diff options
Diffstat (limited to 'src/backend/nodes/memnodes.h')
-rw-r--r-- | src/backend/nodes/memnodes.h | 101 |
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 */ + + |