memnodes.h
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:3k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * memnodes.h
  4.  *   POSTGRES memory context node definitions.
  5.  *
  6.  *
  7.  * Copyright (c) 1994, Regents of the University of California
  8.  *
  9.  * $Id: memnodes.h,v 1.13 1999/05/25 22:42:55 momjian Exp $
  10.  *
  11.  * XXX the typedefs in this file are different from the other ???nodes.h;
  12.  *   they are pointers to structures instead of the structures themselves.
  13.  *   If you're wondering, this is plain laziness. I don't want to touch
  14.  *   the memory context code which should be revamped altogether some day.
  15.  * - ay 10/94
  16.  *-------------------------------------------------------------------------
  17.  */
  18. #ifndef MEMNODES_H
  19. #define MEMNODES_H
  20. #include <lib/fstack.h>
  21. #include <utils/memutils.h>
  22. #include <nodes/nodes.h>
  23. /*
  24.  * MemoryContext
  25.  * A logical context in which memory allocations occur.
  26.  *
  27.  * The types of memory contexts can be thought of as members of the
  28.  * following inheritance hierarchy with properties summarized below.
  29.  *
  30.  * Node
  31.  * |
  32.  * MemoryContext___
  33.  * /
  34.  * GlobalMemory PortalMemoryContext
  35.  * /
  36.  * PortalVariableMemory PortalHeapMemory
  37.  *
  38.  * Flushed at Flushed at Checkpoints
  39.  * Transaction Portal
  40.  * Commit Close
  41.  *
  42.  * GlobalMemory n n n
  43.  * PortalVariableMemory n y n
  44.  * PortalHeapMemory y y y
  45.  */
  46. typedef struct MemoryContextMethodsData
  47. {
  48. Pointer (*alloc) ();
  49. void (*free_p) (); /* need to use free as a #define, so can't
  50.  * use free */
  51. Pointer (*realloc) ();
  52. char    *(*getName) ();
  53. void (*dump) ();
  54. }    *MemoryContextMethods;
  55. typedef struct MemoryContextData
  56. {
  57. NodeTag type;
  58. MemoryContextMethods method;
  59. } MemoryContextData;
  60. /* utils/mcxt.h contains typedef struct MemoryContextData *MemoryContext */
  61. /* think about doing this right some time but we'll have explicit fields
  62.    for now -ay 10/94 */
  63. typedef struct GlobalMemoryData
  64. {
  65. NodeTag type;
  66. MemoryContextMethods method;
  67. AllocSetData setData;
  68. char    *name;
  69. OrderedElemData elemData;
  70. } GlobalMemoryData;
  71. /* utils/mcxt.h contains typedef struct GlobalMemoryData *GlobalMemory */
  72. typedef struct MemoryContextData *PortalMemoryContext;
  73. typedef struct PortalVariableMemoryData
  74. {
  75. NodeTag type;
  76. MemoryContextMethods method;
  77. AllocSetData setData;
  78. }    *PortalVariableMemory;
  79. typedef struct PortalHeapMemoryData
  80. {
  81. NodeTag type;
  82. MemoryContextMethods method;
  83. Pointer block;
  84. FixedStackData stackData;
  85. }    *PortalHeapMemory;
  86. /*
  87.  * MemoryContextIsValid
  88.  * True iff memory context is valid.
  89.  */
  90. #define MemoryContextIsValid(context) 
  91. (IsA(context,MemoryContext) || IsA(context,GlobalMemory) || 
  92.  IsA(context,PortalVariableMemory) || IsA(context,PortalHeapMemory))
  93. #endif  /* MEMNODES_H */