/*------------------------------------------------------------------------- * * memnodes.h-- * POSTGRES memory context node definitions. * * * Copyright (c) 1994, Regents of the University of California * * $Id: memnodes.h,v 1.9 1999/02/06 16:50:30 wieck 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 #include #include /* * 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 MemoryContextData { 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 GlobalMemoryData { NodeTag type; MemoryContextMethods method; AllocSetData setData; char *name; OrderedElemData elemData; } *GlobalMemory; typedef MemoryContext *PortalMemoryContext; typedef struct PortalVariableMemoryData { NodeTag type; MemoryContextMethods method; AllocSetData setData; } *PortalVariableMemory; typedef struct PortalHeapMemoryData { 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 */