OSDN Git Service

Update copyrights to 2003.
[pg-rex/syncrep.git] / src / include / utils / palloc.h
index 168ed30..352108b 100644 (file)
  * everything that should be freed.  See utils/mmgr/README for more info.
  *
  *
- * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: palloc.h,v 1.19 2002/06/20 20:29:53 momjian Exp $
+ * $Id: palloc.h,v 1.26 2003/08/04 02:40:15 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -46,9 +46,26 @@ extern DLLIMPORT MemoryContext CurrentMemoryContext;
  * Fundamental memory-allocation operations (more are in utils/memutils.h)
  */
 extern void *MemoryContextAlloc(MemoryContext context, Size size);
+extern void *MemoryContextAllocZero(MemoryContext context, Size size);
+extern void *MemoryContextAllocZeroAligned(MemoryContext context, Size size);
 
 #define palloc(sz)     MemoryContextAlloc(CurrentMemoryContext, (sz))
 
+#define palloc0(sz) MemoryContextAllocZero(CurrentMemoryContext, (sz))
+
+/*
+ * The result of palloc() is always word-aligned, so we can skip testing
+ * alignment of the pointer when deciding which MemSet variant to use.
+ * Note that this variant does not offer any advantage, and should not be
+ * used, unless its "sz" argument is a compile-time constant; therefore, the
+ * issue that it evaluates the argument multiple times isn't a problem in
+ * practice.
+ */
+#define palloc0fast(sz) \
+       ( MemSetTest(0, sz) ? \
+               MemoryContextAllocZeroAligned(CurrentMemoryContext, sz) : \
+               MemoryContextAllocZero(CurrentMemoryContext, sz) )
+
 extern void pfree(void *pointer);
 
 extern void *repalloc(void *pointer, Size size);