aboutsummaryrefslogtreecommitdiff
path: root/src/backend/nodes/memnodes.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/nodes/memnodes.h')
-rw-r--r--src/backend/nodes/memnodes.h101
1 files changed, 101 insertions, 0 deletions
diff --git a/src/backend/nodes/memnodes.h b/src/backend/nodes/memnodes.h
new file mode 100644
index 00000000000..35adee0d9c3
--- /dev/null
+++ b/src/backend/nodes/memnodes.h
@@ -0,0 +1,101 @@
+/*-------------------------------------------------------------------------
+ *
+ * memnodes.h--
+ * POSTGRES memory context node definitions.
+ *
+ *
+ * Copyright (c) 1994, Regents of the University of California
+ *
+ * $Id: memnodes.h,v 1.1.1.1 1996/07/09 06:21:32 scrappy Exp $
+ *
+ * XXX the typedefs in this file are different from the other ???nodes.h;
+ * they are pointers to structures instead of the structures themselves.
+ * If you're wondering, this is plain laziness. I don't want to touch
+ * the memory context code which should be revamped altogether some day.
+ * - ay 10/94
+ *-------------------------------------------------------------------------
+ */
+#ifndef MEMNODES_H
+#define MEMNODES_H
+
+#include "c.h"
+
+#include "utils/memutils.h"
+#include "lib/fstack.h"
+
+#include "nodes/nodes.h"
+
+/*
+ * MemoryContext --
+ * A logical context in which memory allocations occur.
+ *
+ * The types of memory contexts can be thought of as members of the
+ * following inheritance hierarchy with properties summarized below.
+ *
+ * Node
+ * |
+ * MemoryContext___
+ * / \
+ * GlobalMemory PortalMemoryContext
+ * / \
+ * PortalVariableMemory PortalHeapMemory
+ *
+ * Flushed at Flushed at Checkpoints
+ * Transaction Portal
+ * Commit Close
+ *
+ * GlobalMemory n n n
+ * PortalVariableMemory n y n
+ * PortalHeapMemory y y y
+ */
+
+typedef struct MemoryContextMethodsData {
+ Pointer (*alloc)();
+ void (*free_p)(); /* need to use free as a #define,
+ so can't use free */
+ Pointer (*realloc)();
+ char* (*getName)();
+ void (*dump)();
+} *MemoryContextMethods;
+
+typedef struct MemoryContext {
+ NodeTag type;
+ MemoryContextMethods method;
+} *MemoryContext;
+
+/* think about doing this right some time but we'll have explicit fields
+ for now -ay 10/94 */
+typedef struct GlobalMemory {
+ NodeTag type;
+ MemoryContextMethods method;
+ AllocSetData setData;
+ char *name;
+ OrderedElemData elemData;
+} *GlobalMemory;
+
+typedef MemoryContext *PortalMemoryContext;
+
+typedef struct PortalVariableMemory {
+ NodeTag type;
+ MemoryContextMethods method;
+ AllocSetData setData;
+} *PortalVariableMemory;
+
+typedef struct PortalHeapMemory {
+ NodeTag type;
+ MemoryContextMethods method;
+ Pointer block;
+ FixedStackData stackData;
+} *PortalHeapMemory;
+
+/*
+ * MemoryContextIsValid --
+ * True iff memory context is valid.
+ */
+#define MemoryContextIsValid(context) \
+ (IsA(context,MemoryContext) || IsA(context,GlobalMemory) || \
+ IsA(context,PortalVariableMemory) || IsA(context,PortalHeapMemory))
+
+#endif /* MEMNODES_H */
+
+