diff options
Diffstat (limited to 'src/include/access')
| -rw-r--r-- | src/include/access/gin.h | 399 | ||||
| -rw-r--r-- | src/include/access/gist.h | 8 | ||||
| -rw-r--r-- | src/include/access/gist_private.h | 57 | ||||
| -rw-r--r-- | src/include/access/heapam.h | 4 | ||||
| -rw-r--r-- | src/include/access/hio.h | 4 | ||||
| -rw-r--r-- | src/include/access/htup.h | 8 | ||||
| -rw-r--r-- | src/include/access/nbtree.h | 42 | ||||
| -rw-r--r-- | src/include/access/reloptions.h | 12 | ||||
| -rw-r--r-- | src/include/access/relscan.h | 6 | ||||
| -rw-r--r-- | src/include/access/skey.h | 4 | ||||
| -rw-r--r-- | src/include/access/slru.h | 6 | ||||
| -rw-r--r-- | src/include/access/tupdesc.h | 4 | ||||
| -rw-r--r-- | src/include/access/xlog_internal.h | 4 |
13 files changed, 292 insertions, 266 deletions
diff --git a/src/include/access/gin.h b/src/include/access/gin.h index 8bdb030c20..7035635e68 100644 --- a/src/include/access/gin.h +++ b/src/include/access/gin.h @@ -1,9 +1,9 @@ /*-------------------------------------------------------------------------- * gin.h - * header file for postgres inverted index access method implementation. + * header file for postgres inverted index access method implementation. * - * Copyright (c) 2006, PostgreSQL Global Development Group - * $PostgreSQL: pgsql/src/include/access/gin.h,v 1.7 2006/09/10 20:14:20 tgl Exp $ + * Copyright (c) 2006, PostgreSQL Global Development Group + * $PostgreSQL: pgsql/src/include/access/gin.h,v 1.8 2006/10/04 00:30:06 momjian Exp $ *-------------------------------------------------------------------------- */ @@ -25,51 +25,53 @@ /* * amproc indexes for inverted indexes. */ -#define GIN_COMPARE_PROC 1 -#define GIN_EXTRACTVALUE_PROC 2 -#define GIN_EXTRACTQUERY_PROC 3 -#define GIN_CONSISTENT_PROC 4 -#define GINNProcs 4 +#define GIN_COMPARE_PROC 1 +#define GIN_EXTRACTVALUE_PROC 2 +#define GIN_EXTRACTQUERY_PROC 3 +#define GIN_CONSISTENT_PROC 4 +#define GINNProcs 4 typedef XLogRecPtr GinNSN; /* * Page opaque data in a inverted index page. */ -typedef struct GinPageOpaqueData { - uint16 flags; - OffsetNumber maxoff; /* number entries on GIN_DATA page: - number of heap ItemPointer on GIN_DATA|GIN_LEAF page - and number of records on GIN_DATA & ~GIN_LEAF page - */ - BlockNumber rightlink; +typedef struct GinPageOpaqueData +{ + uint16 flags; + OffsetNumber maxoff; /* number entries on GIN_DATA page: number of + * heap ItemPointer on GIN_DATA|GIN_LEAF page + * and number of records on GIN_DATA & + * ~GIN_LEAF page */ + BlockNumber rightlink; } GinPageOpaqueData; typedef GinPageOpaqueData *GinPageOpaque; #define GIN_ROOT_BLKNO (0) -typedef struct { - BlockIdData child_blkno; /* use it instead of BlockNumber to - save space on page */ - ItemPointerData key; +typedef struct +{ + BlockIdData child_blkno; /* use it instead of BlockNumber to save space + * on page */ + ItemPointerData key; } PostingItem; -#define PostingItemGetBlockNumber(pointer) \ +#define PostingItemGetBlockNumber(pointer) \ BlockIdGetBlockNumber(&(pointer)->child_blkno) -#define PostingItemSetBlockNumber(pointer, blockNumber) \ +#define PostingItemSetBlockNumber(pointer, blockNumber) \ BlockIdSet(&((pointer)->child_blkno), (blockNumber)) /* * Page opaque data in a inverted index page. */ -#define GIN_DATA (1 << 0) -#define GIN_LEAF (1 << 1) -#define GIN_DELETED (1 << 2) +#define GIN_DATA (1 << 0) +#define GIN_LEAF (1 << 1) +#define GIN_DELETED (1 << 2) /* - * Works on page + * Works on page */ #define GinPageGetOpaque(page) ( (GinPageOpaque) PageGetSpecialPointer(page) ) @@ -103,15 +105,15 @@ typedef struct { #define GinSetNPosting(itup,n) ItemPointerSetOffsetNumber(&(itup)->t_tid,(n)) #define GIN_TREE_POSTING ((OffsetNumber)0xffff) #define GinIsPostingTree(itup) ( GinGetNPosting(itup)==GIN_TREE_POSTING ) -#define GinSetPostingTree(itup, blkno) ( GinSetNPosting((itup),GIN_TREE_POSTING ), ItemPointerSetBlockNumber(&(itup)->t_tid, blkno) ) -#define GinGetPostingTree(itup) GinItemPointerGetBlockNumber(&(itup)->t_tid) +#define GinSetPostingTree(itup, blkno) ( GinSetNPosting((itup),GIN_TREE_POSTING ), ItemPointerSetBlockNumber(&(itup)->t_tid, blkno) ) +#define GinGetPostingTree(itup) GinItemPointerGetBlockNumber(&(itup)->t_tid) -#define GinGetOrigSizePosting(itup) GinItemPointerGetBlockNumber(&(itup)->t_tid) +#define GinGetOrigSizePosting(itup) GinItemPointerGetBlockNumber(&(itup)->t_tid) #define GinSetOrigSizePosting(itup,n) ItemPointerSetBlockNumber(&(itup)->t_tid,(n)) #define GinGetPosting(itup) ( (ItemPointer)(( ((char*)(itup)) + SHORTALIGN(GinGetOrigSizePosting(itup)) )) ) #define GinMaxItemSize \ - ((BLCKSZ - SizeOfPageHeaderData - \ + ((BLCKSZ - SizeOfPageHeaderData - \ MAXALIGN(sizeof(GinPageOpaqueData))) / 3 - sizeof(ItemIdData)) @@ -121,8 +123,8 @@ typedef struct { #define GinDataPageGetData(page) \ (PageGetContents(page)+MAXALIGN(sizeof(ItemPointerData))) #define GinDataPageGetRightBound(page) ((ItemPointer)PageGetContents(page)) -#define GinSizeOfItem(page) ( (GinPageIsLeaf(page)) ? sizeof(ItemPointerData) : sizeof(PostingItem) ) -#define GinDataPageGetItem(page,i) ( GinDataPageGetData(page) + ((i)-1) * GinSizeOfItem(page) ) +#define GinSizeOfItem(page) ( (GinPageIsLeaf(page)) ? sizeof(ItemPointerData) : sizeof(PostingItem) ) +#define GinDataPageGetItem(page,i) ( GinDataPageGetData(page) + ((i)-1) * GinSizeOfItem(page) ) #define GinDataPageGetFreeSpace(page) \ ( BLCKSZ - SizeOfPageHeaderData - MAXALIGN(sizeof(GinPageOpaqueData)) - \ @@ -131,11 +133,12 @@ typedef struct { -#define GIN_UNLOCK BUFFER_LOCK_UNLOCK -#define GIN_SHARE BUFFER_LOCK_SHARE +#define GIN_UNLOCK BUFFER_LOCK_UNLOCK +#define GIN_SHARE BUFFER_LOCK_SHARE #define GIN_EXCLUSIVE BUFFER_LOCK_EXCLUSIVE -typedef struct GinState { +typedef struct GinState +{ FmgrInfo compareFn; FmgrInfo extractValueFn; FmgrInfo extractQueryFn; @@ -150,80 +153,88 @@ typedef struct GinState { #define XLOG_GIN_CREATE_PTREE 0x10 -typedef struct ginxlogCreatePostingTree { - RelFileNode node; - BlockNumber blkno; - uint32 nitem; +typedef struct ginxlogCreatePostingTree +{ + RelFileNode node; + BlockNumber blkno; + uint32 nitem; /* follows list of heap's ItemPointer */ } ginxlogCreatePostingTree; #define XLOG_GIN_INSERT 0x20 -typedef struct ginxlogInsert { - RelFileNode node; - BlockNumber blkno; - BlockNumber updateBlkno; - OffsetNumber offset; - bool isDelete; - bool isData; - bool isLeaf; - OffsetNumber nitem; - - /* follows: tuples or ItemPointerData or PostingItem or list of ItemPointerData*/ +typedef struct ginxlogInsert +{ + RelFileNode node; + BlockNumber blkno; + BlockNumber updateBlkno; + OffsetNumber offset; + bool isDelete; + bool isData; + bool isLeaf; + OffsetNumber nitem; + + /* + * follows: tuples or ItemPointerData or PostingItem or list of + * ItemPointerData + */ } ginxlogInsert; -#define XLOG_GIN_SPLIT 0x30 +#define XLOG_GIN_SPLIT 0x30 -typedef struct ginxlogSplit { - RelFileNode node; - BlockNumber lblkno; - BlockNumber rootBlkno; - BlockNumber rblkno; - BlockNumber rrlink; - OffsetNumber separator; - OffsetNumber nitem; +typedef struct ginxlogSplit +{ + RelFileNode node; + BlockNumber lblkno; + BlockNumber rootBlkno; + BlockNumber rblkno; + BlockNumber rrlink; + OffsetNumber separator; + OffsetNumber nitem; - bool isData; - bool isLeaf; - bool isRootSplit; + bool isData; + bool isLeaf; + bool isRootSplit; - BlockNumber leftChildBlkno; - BlockNumber updateBlkno; + BlockNumber leftChildBlkno; + BlockNumber updateBlkno; - ItemPointerData rightbound; /* used only in posting tree */ + ItemPointerData rightbound; /* used only in posting tree */ /* follows: list of tuple or ItemPointerData or PostingItem */ } ginxlogSplit; -#define XLOG_GIN_VACUUM_PAGE 0x40 +#define XLOG_GIN_VACUUM_PAGE 0x40 -typedef struct ginxlogVacuumPage { - RelFileNode node; - BlockNumber blkno; - OffsetNumber nitem; +typedef struct ginxlogVacuumPage +{ + RelFileNode node; + BlockNumber blkno; + OffsetNumber nitem; /* follows content of page */ } ginxlogVacuumPage; -#define XLOG_GIN_DELETE_PAGE 0x50 +#define XLOG_GIN_DELETE_PAGE 0x50 -typedef struct ginxlogDeletePage { - RelFileNode node; - BlockNumber blkno; - BlockNumber parentBlkno; - OffsetNumber parentOffset; - BlockNumber leftBlkno; - BlockNumber rightLink; +typedef struct ginxlogDeletePage +{ + RelFileNode node; + BlockNumber blkno; + BlockNumber parentBlkno; + OffsetNumber parentOffset; + BlockNumber leftBlkno; + BlockNumber rightLink; } ginxlogDeletePage; /* ginutil.c */ extern Datum ginoptions(PG_FUNCTION_ARGS); -extern void initGinState( GinState *state, Relation index ); +extern void initGinState(GinState *state, Relation index); extern Buffer GinNewBuffer(Relation index); extern void GinInitBuffer(Buffer b, uint32 f); extern void GinInitPage(Page page, uint32 f, Size pageSize); -extern int compareEntries(GinState *ginstate, Datum a, Datum b); -extern Datum* extractEntriesS(GinState *ginstate, Datum value, uint32 *nentries); -extern Datum* extractEntriesSU(GinState *ginstate, Datum value, uint32 *nentries); -extern Page GinPageGetCopyPage( Page page ); +extern int compareEntries(GinState *ginstate, Datum a, Datum b); +extern Datum *extractEntriesS(GinState *ginstate, Datum value, uint32 *nentries); +extern Datum *extractEntriesSU(GinState *ginstate, Datum value, uint32 *nentries); +extern Page GinPageGetCopyPage(Page page); /* gininsert.c */ extern Datum ginbuild(PG_FUNCTION_ARGS); @@ -238,147 +249,157 @@ extern bool gin_safe_restartpoint(void); /* ginbtree.c */ -typedef struct GinBtreeStack { - BlockNumber blkno; - Buffer buffer; - OffsetNumber off; - /* predictNumber contains prediction number of pages on current level */ - uint32 predictNumber; +typedef struct GinBtreeStack +{ + BlockNumber blkno; + Buffer buffer; + OffsetNumber off; + /* predictNumber contains prediction number of pages on current level */ + uint32 predictNumber; struct GinBtreeStack *parent; } GinBtreeStack; typedef struct GinBtreeData *GinBtree; -typedef struct GinBtreeData { +typedef struct GinBtreeData +{ /* search methods */ - BlockNumber (*findChildPage)(GinBtree, GinBtreeStack *); - bool (*isMoveRight)(GinBtree, Page); - bool (*findItem)(GinBtree, GinBtreeStack *); + BlockNumber (*findChildPage) (GinBtree, GinBtreeStack *); + bool (*isMoveRight) (GinBtree, Page); + bool (*findItem) (GinBtree, GinBtreeStack *); /* insert methods */ - OffsetNumber (*findChildPtr)(GinBtree, Page, BlockNumber, OffsetNumber); - BlockNumber (*getLeftMostPage)(GinBtree, Page); - bool (*isEnoughSpace)(GinBtree, Buffer, OffsetNumber); - void (*placeToPage)(GinBtree, Buffer, OffsetNumber, XLogRecData**); - Page (*splitPage)(GinBtree, Buffer, Buffer, OffsetNumber, XLogRecData**); - void (*fillRoot)(GinBtree, Buffer, Buffer, Buffer); + OffsetNumber (*findChildPtr) (GinBtree, Page, BlockNumber, OffsetNumber); + BlockNumber (*getLeftMostPage) (GinBtree, Page); + bool (*isEnoughSpace) (GinBtree, Buffer, OffsetNumber); + void (*placeToPage) (GinBtree, Buffer, OffsetNumber, XLogRecData **); + Page (*splitPage) (GinBtree, Buffer, Buffer, OffsetNumber, XLogRecData **); + void (*fillRoot) (GinBtree, Buffer, Buffer, Buffer); - bool searchMode; + bool searchMode; - Relation index; - GinState *ginstate; - bool fullScan; - bool isBuild; + Relation index; + GinState *ginstate; + bool fullScan; + bool isBuild; - BlockNumber rightblkno; + BlockNumber rightblkno; /* Entry options */ - Datum entryValue; - IndexTuple entry; - bool isDelete; + Datum entryValue; + IndexTuple entry; + bool isDelete; /* Data (posting tree) option */ - ItemPointerData *items; - uint32 nitem; - uint32 curitem; + ItemPointerData *items; + uint32 nitem; + uint32 curitem; - PostingItem pitem; + PostingItem pitem; } GinBtreeData; -extern GinBtreeStack* ginPrepareFindLeafPage(GinBtree btree, BlockNumber blkno); -extern GinBtreeStack* ginFindLeafPage(GinBtree btree, GinBtreeStack *stack ); -extern void freeGinBtreeStack( GinBtreeStack *stack ); +extern GinBtreeStack *ginPrepareFindLeafPage(GinBtree btree, BlockNumber blkno); +extern GinBtreeStack *ginFindLeafPage(GinBtree btree, GinBtreeStack *stack); +extern void freeGinBtreeStack(GinBtreeStack *stack); extern void ginInsertValue(GinBtree btree, GinBtreeStack *stack); -extern void findParents( GinBtree btree, GinBtreeStack *stack, BlockNumber rootBlkno); +extern void findParents(GinBtree btree, GinBtreeStack *stack, BlockNumber rootBlkno); /* ginentrypage.c */ extern IndexTuple GinFormTuple(GinState *ginstate, Datum key, ItemPointerData *ipd, uint32 nipd); extern Datum ginGetHighKey(GinState *ginstate, Page page); -extern void prepareEntryScan( GinBtree btree, Relation index, Datum value, GinState *ginstate); +extern void prepareEntryScan(GinBtree btree, Relation index, Datum value, GinState *ginstate); extern void entryFillRoot(GinBtree btree, Buffer root, Buffer lbuf, Buffer rbuf); extern IndexTuple ginPageGetLinkItup(Buffer buf); /* gindatapage.c */ -extern int compareItemPointers( ItemPointer a, ItemPointer b ); -extern void MergeItemPointers( - ItemPointerData *dst, - ItemPointerData *a, uint32 na, - ItemPointerData *b, uint32 nb - ); - -extern void GinDataPageAddItem( Page page, void *data, OffsetNumber offset ); +extern int compareItemPointers(ItemPointer a, ItemPointer b); +extern void +MergeItemPointers( + ItemPointerData *dst, + ItemPointerData *a, uint32 na, + ItemPointerData *b, uint32 nb +); + +extern void GinDataPageAddItem(Page page, void *data, OffsetNumber offset); extern void PageDeletePostingItem(Page page, OffsetNumber offset); -typedef struct { - GinBtreeData btree; - GinBtreeStack *stack; +typedef struct +{ + GinBtreeData btree; + GinBtreeStack *stack; } GinPostingTreeScan; -extern GinPostingTreeScan* prepareScanPostingTree( Relation index, - BlockNumber rootBlkno, bool searchMode); -extern void insertItemPointer(GinPostingTreeScan *gdi, - ItemPointerData *items, uint32 nitem); -extern Buffer scanBeginPostingTree( GinPostingTreeScan *gdi ); +extern GinPostingTreeScan *prepareScanPostingTree(Relation index, + BlockNumber rootBlkno, bool searchMode); +extern void insertItemPointer(GinPostingTreeScan *gdi, + ItemPointerData *items, uint32 nitem); +extern Buffer scanBeginPostingTree(GinPostingTreeScan *gdi); extern void dataFillRoot(GinBtree btree, Buffer root, Buffer lbuf, Buffer rbuf); -extern void prepareDataScan( GinBtree btree, Relation index); +extern void prepareDataScan(GinBtree btree, Relation index); + /* ginscan.c */ typedef struct GinScanEntryData *GinScanEntry; -typedef struct GinScanEntryData { +typedef struct GinScanEntryData +{ /* link to the equals entry in current scan key */ - GinScanEntry master; + GinScanEntry master; - /* link to values reported to consistentFn, - points to GinScanKey->entryRes[i]*/ - bool *pval; + /* + * link to values reported to consistentFn, points to + * GinScanKey->entryRes[i] + */ + bool *pval; - /* entry, got from extractQueryFn */ - Datum entry; + /* entry, got from extractQueryFn */ + Datum entry; /* current ItemPointer to heap, its offset in buffer and buffer */ - ItemPointerData curItem; - OffsetNumber offset; - Buffer buffer; + ItemPointerData curItem; + OffsetNumber offset; + Buffer buffer; /* in case of Posing list */ - ItemPointerData *list; - uint32 nlist; + ItemPointerData *list; + uint32 nlist; - bool isFinished; - bool reduceResult; - uint32 predictNumberResult; + bool isFinished; + bool reduceResult; + uint32 predictNumberResult; } GinScanEntryData; -typedef struct GinScanKeyData { - /* Number of entries in query (got by extractQueryFn) */ - uint32 nentries; +typedef struct GinScanKeyData +{ + /* Number of entries in query (got by extractQueryFn) */ + uint32 nentries; /* array of ItemPointer result, reported to consistentFn */ - bool *entryRes; + bool *entryRes; - /* array of scans per entry */ - GinScanEntry scanEntry; + /* array of scans per entry */ + GinScanEntry scanEntry; /* for calling consistentFn(GinScanKey->entryRes, strategy, query) */ - StrategyNumber strategy; - Datum query; + StrategyNumber strategy; + Datum query; - ItemPointerData curItem; - bool firstCall; - bool isFinished; + ItemPointerData curItem; + bool firstCall; + bool isFinished; } GinScanKeyData; -typedef GinScanKeyData *GinScanKey; +typedef GinScanKeyData *GinScanKey; -typedef struct GinScanOpaqueData { - MemoryContext tempCtx; - GinState ginstate; +typedef struct GinScanOpaqueData +{ + MemoryContext tempCtx; + GinState ginstate; - GinScanKey keys; - uint32 nkeys; + GinScanKey keys; + uint32 nkeys; - GinScanKey markPos; + GinScanKey markPos; } GinScanOpaqueData; typedef GinScanOpaqueData *GinScanOpaque; @@ -391,12 +412,12 @@ extern Datum ginrestrpos(PG_FUNCTION_ARGS); extern void newScanKey(IndexScanDesc scan); /* ginget.c */ -extern DLLIMPORT int GinFuzzySearchLimit; +extern DLLIMPORT int GinFuzzySearchLimit; -#define ItemPointerSetMax(p) ItemPointerSet( (p), (BlockNumber)0xffffffff, (OffsetNumber)0xffff ) -#define ItemPointerIsMax(p) ( ItemPointerGetBlockNumber(p) == (BlockNumber)0xffffffff && ItemPointerGetOffsetNumber(p) == (OffsetNumber)0xffff ) -#define ItemPointerSetMin(p) ItemPointerSet( (p), (BlockNumber)0, (OffsetNumber)0) -#define ItemPointerIsMin(p) ( ItemPointerGetBlockNumber(p) == (BlockNumber)0 && ItemPointerGetOffsetNumber(p) == (OffsetNumber)0 ) +#define ItemPointerSetMax(p) ItemPointerSet( (p), (BlockNumber)0xffffffff, (OffsetNumber)0xffff ) +#define ItemPointerIsMax(p) ( ItemPointerGetBlockNumber(p) == (BlockNumber)0xffffffff && ItemPointerGetOffsetNumber(p) == (OffsetNumber)0xffff ) +#define ItemPointerSetMin(p) ItemPointerSet( (p), (BlockNumber)0, (OffsetNumber)0) +#define ItemPointerIsMin(p) ( ItemPointerGetBlockNumber(p) == (BlockNumber)0 && ItemPointerGetOffsetNumber(p) == (OffsetNumber)0 ) extern Datum gingetmulti(PG_FUNCTION_ARGS); extern Datum gingettuple(PG_FUNCTION_ARGS); @@ -410,31 +431,33 @@ extern Datum ginarrayextract(PG_FUNCTION_ARGS); extern Datum ginarrayconsistent(PG_FUNCTION_ARGS); /* ginbulk.c */ -typedef struct EntryAccumulator { - Datum value; - uint32 length; - uint32 number; +typedef struct EntryAccumulator +{ + Datum value; + uint32 length; + uint32 number; ItemPointerData *list; bool shouldSort; - struct EntryAccumulator *left; - struct EntryAccumulator *right; + struct EntryAccumulator *left; + struct EntryAccumulator *right; } EntryAccumulator; -typedef struct { - GinState *ginstate; - EntryAccumulator *entries; +typedef struct +{ + GinState *ginstate; + EntryAccumulator *entries; uint32 maxdepth; - EntryAccumulator **stack; - uint32 stackpos; - uint32 allocatedMemory; + EntryAccumulator **stack; + uint32 stackpos; + uint32 allocatedMemory; - uint32 length; - EntryAccumulator *entryallocator; + uint32 length; + EntryAccumulator *entryallocator; } BuildAccumulator; extern void ginInitBA(BuildAccumulator *accum); -extern void ginInsertRecordBA( BuildAccumulator *accum, - ItemPointer heapptr, Datum *entries, uint32 nentry ); -extern ItemPointerData* ginGetEntry(BuildAccumulator *accum, Datum *entry, uint32 *n); +extern void ginInsertRecordBA(BuildAccumulator *accum, + ItemPointer heapptr, Datum *entries, uint32 nentry); +extern ItemPointerData *ginGetEntry(BuildAccumulator *accum, Datum *entry, uint32 *n); #endif diff --git a/src/include/access/gist.h b/src/include/access/gist.h index 1b3c042e95..1502af67ec 100644 --- a/src/include/access/gist.h +++ b/src/include/access/gist.h @@ -9,7 +9,7 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/gist.h,v 1.55 2006/09/10 00:29:34 tgl Exp $ + * $PostgreSQL: pgsql/src/include/access/gist.h,v 1.56 2006/10/04 00:30:06 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -80,7 +80,7 @@ typedef GISTPageOpaqueData *GISTPageOpaque; * PickSplit should check spl_(r|l)datum_exists. If it is 'true', * that corresponding spl_(r|l)datum already defined and * PickSplit should use that value. PickSplit should always set - * spl_(r|l)datum_exists to false: GiST will check value to + * spl_(r|l)datum_exists to false: GiST will check value to * control supportng this feature by PickSplit... */ typedef struct GIST_SPLITVEC @@ -88,12 +88,12 @@ typedef struct GIST_SPLITVEC OffsetNumber *spl_left; /* array of entries that go left */ int spl_nleft; /* size of this array */ Datum spl_ldatum; /* Union of keys in spl_left */ - bool spl_ldatum_exists; /* true, if spl_ldatum already exists. */ + bool spl_ldatum_exists; /* true, if spl_ldatum already exists. */ OffsetNumber *spl_right; /* array of entries that go right */ int spl_nright; /* size of the array */ Datum spl_rdatum; /* Union of keys in spl_right */ - bool spl_rdatum_exists; /* true, if spl_rdatum already exists. */ + bool spl_rdatum_exists; /* true, if spl_rdatum already exists. */ } GIST_SPLITVEC; /* diff --git a/src/include/access/gist_private.h b/src/include/access/gist_private.h index de917c8b83..0c17fd4211 100644 --- a/src/include/access/gist_private.h +++ b/src/include/access/gist_private.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/gist_private.h,v 1.23 2006/08/07 16:57:57 tgl Exp $ + * $PostgreSQL: pgsql/src/include/access/gist_private.h,v 1.24 2006/10/04 00:30:07 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -144,7 +144,7 @@ typedef struct SplitedPageLayout gistxlogPage block; IndexTupleData *list; int lenlist; - IndexTuple itup; /* union key for page */ + IndexTuple itup; /* union key for page */ Page page; /* to operate */ Buffer buffer; /* to write after all proceed */ @@ -180,19 +180,22 @@ typedef struct GISTInsertStack struct GISTInsertStack *next; } GISTInsertStack; -typedef struct GistSplitVector { - GIST_SPLITVEC splitVector; /* to/from PickSplit method */ +typedef struct GistSplitVector +{ + GIST_SPLITVEC splitVector; /* to/from PickSplit method */ - Datum spl_lattr[INDEX_MAX_KEYS]; /* Union of subkeys in spl_left */ - bool spl_lisnull[INDEX_MAX_KEYS]; - bool spl_leftvalid; + Datum spl_lattr[INDEX_MAX_KEYS]; /* Union of subkeys in + * spl_left */ + bool spl_lisnull[INDEX_MAX_KEYS]; + bool spl_leftvalid; - Datum spl_rattr[INDEX_MAX_KEYS]; /* Union of subkeys in spl_right */ - bool spl_risnull[INDEX_MAX_KEYS]; - bool spl_rightvalid; + Datum spl_rattr[INDEX_MAX_KEYS]; /* Union of subkeys in + * spl_right */ + bool spl_risnull[INDEX_MAX_KEYS]; + bool spl_rightvalid; - bool *spl_equiv; /* equivalent tuples which can be freely - * distributed between left and right pages */ + bool *spl_equiv; /* equivalent tuples which can be freely + * distributed between left and right pages */ } GistSplitVector; #define XLogRecPtrIsInvalid( r ) ( (r).xlogid == 0 && (r).xrecoff == 0 ) @@ -255,7 +258,7 @@ extern bool gist_safe_restartpoint(void); extern IndexTuple gist_form_invalid_tuple(BlockNumber blkno); extern XLogRecData *formUpdateRdata(RelFileNode node, Buffer buffer, - OffsetNumber *todelete, int ntodelete, + OffsetNumber *todelete, int ntodelete, IndexTuple *itup, int ituplen, ItemPointer key); extern XLogRecData *formSplitRdata(RelFileNode node, @@ -271,7 +274,7 @@ extern Datum gistgetmulti(PG_FUNCTION_ARGS); /* gistutil.c */ #define GiSTPageSize \ - ( BLCKSZ - SizeOfPageHeaderData - MAXALIGN(sizeof(GISTPageOpaqueData)) ) + ( BLCKSZ - SizeOfPageHeaderData - MAXALIGN(sizeof(GISTPageOpaqueData)) ) #define GIST_MIN_FILLFACTOR 10 #define GIST_DEFAULT_FILLFACTOR 90 @@ -287,7 +290,7 @@ extern IndexTuple *gistextractpage(Page page, int *len /* out */ ); extern IndexTuple *gistjoinvector( IndexTuple *itvec, int *len, IndexTuple *additvec, int addlen); -extern IndexTupleData* gistfillitupvec(IndexTuple *vec, int veclen, int *memlen); +extern IndexTupleData *gistfillitupvec(IndexTuple *vec, int veclen, int *memlen); extern IndexTuple gistunion(Relation r, IndexTuple *itvec, int len, GISTSTATE *giststate); @@ -312,27 +315,27 @@ extern void gistdentryinit(GISTSTATE *giststate, int nkey, GISTENTRY *e, bool l, bool isNull); extern float gistpenalty(GISTSTATE *giststate, int attno, - GISTENTRY *key1, bool isNull1, - GISTENTRY *key2, bool isNull2); + GISTENTRY *key1, bool isNull1, + GISTENTRY *key2, bool isNull2); extern bool gistMakeUnionItVec(GISTSTATE *giststate, IndexTuple *itvec, int len, int startkey, - Datum *attr, bool *isnull ); + Datum *attr, bool *isnull); extern bool gistKeyIsEQ(GISTSTATE *giststate, int attno, Datum a, Datum b); extern void gistDeCompressAtt(GISTSTATE *giststate, Relation r, IndexTuple tuple, Page p, - OffsetNumber o, GISTENTRY *attdata, bool *isnull); + OffsetNumber o, GISTENTRY *attdata, bool *isnull); -extern void gistMakeUnionKey( GISTSTATE *giststate, int attno, - GISTENTRY *entry1, bool isnull1, - GISTENTRY *entry2, bool isnull2, - Datum *dst, bool *dstisnull ); +extern void gistMakeUnionKey(GISTSTATE *giststate, int attno, + GISTENTRY *entry1, bool isnull1, + GISTENTRY *entry2, bool isnull2, + Datum *dst, bool *dstisnull); /* gistvacuum.c */ extern Datum gistbulkdelete(PG_FUNCTION_ARGS); extern Datum gistvacuumcleanup(PG_FUNCTION_ARGS); /* gistsplit.c */ -extern void gistSplitByKey(Relation r, Page page, IndexTuple *itup, - int len, GISTSTATE *giststate, - GistSplitVector *v, GistEntryVector *entryvec, - int attno); +extern void gistSplitByKey(Relation r, Page page, IndexTuple *itup, + int len, GISTSTATE *giststate, + GistSplitVector *v, GistEntryVector *entryvec, + int attno); #endif /* GIST_PRIVATE_H */ diff --git a/src/include/access/heapam.h b/src/include/access/heapam.h index 772a6588fa..b2dd0f3390 100644 --- a/src/include/access/heapam.h +++ b/src/include/access/heapam.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/heapam.h,v 1.115 2006/08/18 16:09:10 tgl Exp $ + * $PostgreSQL: pgsql/src/include/access/heapam.h,v 1.116 2006/10/04 00:30:07 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -220,7 +220,7 @@ extern void heap_deformtuple(HeapTuple tuple, TupleDesc tupleDesc, Datum *values, char *nulls); extern void heap_freetuple(HeapTuple htup); extern MinimalTuple heap_form_minimal_tuple(TupleDesc tupleDescriptor, - Datum *values, bool *isnull); + Datum *values, bool *isnull); extern void heap_free_minimal_tuple(MinimalTuple mtup); extern MinimalTuple heap_copy_minimal_tuple(MinimalTuple mtup); extern HeapTuple heap_tuple_from_minimal_tuple(MinimalTuple mtup); diff --git a/src/include/access/hio.h b/src/include/access/hio.h index 8cb8f8925f..d93c27a26d 100644 --- a/src/include/access/hio.h +++ b/src/include/access/hio.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/hio.h,v 1.32 2006/07/13 17:47:01 momjian Exp $ + * $PostgreSQL: pgsql/src/include/access/hio.h,v 1.33 2006/10/04 00:30:07 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -21,6 +21,6 @@ extern void RelationPutHeapTuple(Relation relation, Buffer buffer, HeapTuple tuple); extern Buffer RelationGetBufferForTuple(Relation relation, Size len, - Buffer otherBuffer, bool use_fsm); + Buffer otherBuffer, bool use_fsm); #endif /* HIO_H */ diff --git a/src/include/access/htup.h b/src/include/access/htup.h index caac3229f3..edfce82bc0 100644 --- a/src/include/access/htup.h +++ b/src/include/access/htup.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/htup.h,v 1.85 2006/07/13 17:47:01 momjian Exp $ + * $PostgreSQL: pgsql/src/include/access/htup.h,v 1.86 2006/10/04 00:30:07 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -356,7 +356,7 @@ do { \ * MinimalTuple is an alternate representation that is used for transient * tuples inside the executor, in places where transaction status information * is not required, the tuple rowtype is known, and shaving off a few bytes - * is worthwhile because we need to store many tuples. The representation + * is worthwhile because we need to store many tuples. The representation * is chosen so that tuple access routines can work with either full or * minimal tuples via a HeapTupleData pointer structure. The access routines * see no difference, except that they must not access the transaction status @@ -367,7 +367,7 @@ do { \ * and thereby prevent accidental use of the nonexistent fields. * * MinimalTupleData contains a length word, some padding, and fields matching - * HeapTupleHeaderData beginning with t_natts. The padding is chosen so that + * HeapTupleHeaderData beginning with t_natts. The padding is chosen so that * offsetof(t_natts) is the same modulo MAXIMUM_ALIGNOF in both structs. * This makes data alignment rules equivalent in both cases. * @@ -431,7 +431,7 @@ typedef MinimalTupleData *MinimalTuple; * limited contexts where the code knows that case #1 will never apply.) * * * Separately allocated minimal tuple: t_data points MINIMAL_TUPLE_OFFSET - * bytes before the start of a MinimalTuple. As with the previous case, + * bytes before the start of a MinimalTuple. As with the previous case, * this can't be told apart from case #1 by inspection; code setting up * or destroying this representation has to know what it's doing. * diff --git a/src/include/access/nbtree.h b/src/include/access/nbtree.h index 33d295a71b..3350a057b2 100644 --- a/src/include/access/nbtree.h +++ b/src/include/access/nbtree.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/nbtree.h,v 1.104 2006/08/24 01:18:34 tgl Exp $ + * $PostgreSQL: pgsql/src/include/access/nbtree.h,v 1.105 2006/10/04 00:30:07 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -35,10 +35,10 @@ typedef uint16 BTCycleId; * and status. If the page is deleted, we replace the level with the * next-transaction-ID value indicating when it is safe to reclaim the page. * - * We also store a "vacuum cycle ID". When a page is split while VACUUM is + * We also store a "vacuum cycle ID". When a page is split while VACUUM is * processing the index, a nonzero value associated with the VACUUM run is - * stored into both halves of the split page. (If VACUUM is not running, - * both pages receive zero cycleids.) This allows VACUUM to detect whether + * stored into both halves of the split page. (If VACUUM is not running, + * both pages receive zero cycleids.) This allows VACUUM to detect whether * a page was split since it started, with a small probability of false match * if the page was last split some exact multiple of 65536 VACUUMs ago. * Also, during a split, the BTP_SPLIT_END flag is cleared in the left @@ -71,7 +71,7 @@ typedef BTPageOpaqueData *BTPageOpaque; #define BTP_META (1 << 3) /* meta-page */ #define BTP_HALF_DEAD (1 << 4) /* empty, but still in tree */ #define BTP_SPLIT_END (1 << 5) /* rightmost page of split group */ -#define BTP_HAS_GARBAGE (1 << 6) /* page has LP_DELETEd tuples */ +#define BTP_HAS_GARBAGE (1 << 6) /* page has LP_DELETEd tuples */ /* @@ -140,7 +140,7 @@ typedef struct BTMetaPageData ( (i1).ip_blkid.bi_hi == (i2).ip_blkid.bi_hi && \ (i1).ip_blkid.bi_lo == (i2).ip_blkid.bi_lo && \ (i1).ip_posid == (i2).ip_posid ) -#define BTEntrySame(i1, i2) \ +#define BTEntrySame(i1, i2) \ BTTidSame((i1)->t_tid, (i2)->t_tid) @@ -203,7 +203,7 @@ typedef struct BTMetaPageData #define XLOG_BTREE_SPLIT_R_ROOT 0x60 /* as above, new item on right */ #define XLOG_BTREE_DELETE 0x70 /* delete leaf index tuple */ #define XLOG_BTREE_DELETE_PAGE 0x80 /* delete an entire page */ -#define XLOG_BTREE_DELETE_PAGE_META 0x90 /* same, plus update metapage */ +#define XLOG_BTREE_DELETE_PAGE_META 0x90 /* same, plus update metapage */ #define XLOG_BTREE_NEWROOT 0xA0 /* new root page */ /* @@ -368,17 +368,17 @@ typedef BTStackData *BTStack; * BTScanOpaqueData is the btree-private state needed for an indexscan. * This consists of preprocessed scan keys (see _bt_preprocess_keys() for * details of the preprocessing), information about the current location - * of the scan, and information about the marked location, if any. (We use + * of the scan, and information about the marked location, if any. (We use * BTScanPosData to represent the data needed for each of current and marked - * locations.) In addition we can remember some known-killed index entries + * locations.) In addition we can remember some known-killed index entries * that must be marked before we can move off the current page. * * Index scans work a page at a time: we pin and read-lock the page, identify * all the matching items on the page and save them in BTScanPosData, then * release the read-lock while returning the items to the caller for - * processing. This approach minimizes lock/unlock traffic. Note that we + * processing. This approach minimizes lock/unlock traffic. Note that we * keep the pin on the index page until the caller is done with all the items - * (this is needed for VACUUM synchronization, see nbtree/README). When we + * (this is needed for VACUUM synchronization, see nbtree/README). When we * are ready to step to the next page, if the caller has told us any of the * items were killed, we re-lock the page to mark them killed, then unlock. * Finally we drop the pin and step to the next page in the appropriate @@ -420,7 +420,7 @@ typedef struct BTScanPosData int lastItem; /* last valid index in items[] */ int itemIndex; /* current index in items[] */ - BTScanPosItem items[MaxIndexTuplesPerPage]; /* MUST BE LAST */ + BTScanPosItem items[MaxIndexTuplesPerPage]; /* MUST BE LAST */ } BTScanPosData; typedef BTScanPosData *BTScanPos; @@ -439,11 +439,11 @@ typedef struct BTScanOpaqueData int numKilled; /* number of currently stored items */ /* - * If the marked position is on the same page as current position, - * we don't use markPos, but just keep the marked itemIndex in - * markItemIndex (all the rest of currPos is valid for the mark position). - * Hence, to determine if there is a mark, first look at markItemIndex, - * then at markPos. + * If the marked position is on the same page as current position, we + * don't use markPos, but just keep the marked itemIndex in markItemIndex + * (all the rest of currPos is valid for the mark position). Hence, to + * determine if there is a mark, first look at markItemIndex, then at + * markPos. */ int markItemIndex; /* itemIndex, or -1 if not valid */ @@ -457,8 +457,8 @@ typedef BTScanOpaqueData *BTScanOpaque; /* * We use these private sk_flags bits in preprocessed scan keys */ -#define SK_BT_REQFWD 0x00010000 /* required to continue forward scan */ -#define SK_BT_REQBKWD 0x00020000 /* required to continue backward scan */ +#define SK_BT_REQFWD 0x00010000 /* required to continue forward scan */ +#define SK_BT_REQBKWD 0x00020000 /* required to continue backward scan */ /* @@ -528,8 +528,8 @@ extern void _bt_freeskey(ScanKey skey); extern void _bt_freestack(BTStack stack); extern void _bt_preprocess_keys(IndexScanDesc scan); extern bool _bt_checkkeys(IndexScanDesc scan, - Page page, OffsetNumber offnum, - ScanDirection dir, bool *continuescan); + Page page, OffsetNumber offnum, + ScanDirection dir, bool *continuescan); extern void _bt_killitems(IndexScanDesc scan, bool haveLock); extern BTCycleId _bt_vacuum_cycleid(Relation rel); extern BTCycleId _bt_start_vacuum(Relation rel); diff --git a/src/include/access/reloptions.h b/src/include/access/reloptions.h index 82474f4707..2664069767 100644 --- a/src/include/access/reloptions.h +++ b/src/include/access/reloptions.h @@ -11,7 +11,7 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/reloptions.h,v 1.1 2006/07/03 22:45:40 tgl Exp $ + * $PostgreSQL: pgsql/src/include/access/reloptions.h,v 1.2 2006/10/04 00:30:07 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -21,18 +21,18 @@ #include "nodes/pg_list.h" extern Datum transformRelOptions(Datum oldOptions, List *defList, - bool ignoreOids, bool isReset); + bool ignoreOids, bool isReset); extern void parseRelOptions(Datum options, int numkeywords, - const char * const *keywords, - char **values, bool validate); + const char *const * keywords, + char **values, bool validate); extern bytea *default_reloptions(Datum reloptions, bool validate, - int minFillfactor, int defaultFillfactor); + int minFillfactor, int defaultFillfactor); extern bytea *heap_reloptions(char relkind, Datum reloptions, bool validate); extern bytea *index_reloptions(RegProcedure amoptions, Datum reloptions, - bool validate); + bool validate); #endif /* RELOPTIONS_H */ diff --git a/src/include/access/relscan.h b/src/include/access/relscan.h index d32ab6d524..45ac9b8265 100644 --- a/src/include/access/relscan.h +++ b/src/include/access/relscan.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/relscan.h,v 1.49 2006/07/31 20:09:05 tgl Exp $ + * $PostgreSQL: pgsql/src/include/access/relscan.h,v 1.50 2006/10/04 00:30:07 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -27,12 +27,12 @@ typedef struct HeapScanDescData int rs_nkeys; /* number of scan keys */ ScanKey rs_key; /* array of scan key descriptors */ BlockNumber rs_nblocks; /* number of blocks to scan */ - bool rs_pageatatime; /* verify visibility page-at-a-time? */ + bool rs_pageatatime; /* verify visibility page-at-a-time? */ /* scan current state */ bool rs_inited; /* false = scan not init'd yet */ HeapTupleData rs_ctup; /* current tuple in scan, if any */ - BlockNumber rs_cblock; /* current block # in scan, if any */ + BlockNumber rs_cblock; /* current block # in scan, if any */ Buffer rs_cbuf; /* current buffer in scan, if any */ /* NB: if rs_cbuf is not InvalidBuffer, we hold a pin on that buffer */ ItemPointerData rs_mctid; /* marked scan position, if any */ diff --git a/src/include/access/skey.h b/src/include/access/skey.h index 7a846723df..d81b6fd9a9 100644 --- a/src/include/access/skey.h +++ b/src/include/access/skey.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/skey.h,v 1.32 2006/03/05 15:58:53 momjian Exp $ + * $PostgreSQL: pgsql/src/include/access/skey.h,v 1.33 2006/10/04 00:30:07 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -89,7 +89,7 @@ typedef ScanKeyData *ScanKey; * must be sorted according to the leading column number. * * The subsidiary ScanKey array appears in logical column order of the row - * comparison, which may be different from index column order. The array + * comparison, which may be different from index column order. The array * elements are like a normal ScanKey array except that: * sk_flags must include SK_ROW_MEMBER, plus SK_ROW_END in the last * element (needed since row header does not include a count) diff --git a/src/include/access/slru.h b/src/include/access/slru.h index 7836224db4..48576c2b41 100644 --- a/src/include/access/slru.h +++ b/src/include/access/slru.h @@ -6,7 +6,7 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/slru.h,v 1.18 2006/03/05 15:58:53 momjian Exp $ + * $PostgreSQL: pgsql/src/include/access/slru.h,v 1.19 2006/10/04 00:30:07 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -111,8 +111,8 @@ extern void SimpleLruInit(SlruCtl ctl, const char *name, int nslots, LWLockId ctllock, const char *subdir); extern int SimpleLruZeroPage(SlruCtl ctl, int pageno); extern int SimpleLruReadPage(SlruCtl ctl, int pageno, TransactionId xid); -extern int SimpleLruReadPage_ReadOnly(SlruCtl ctl, int pageno, - TransactionId xid); +extern int SimpleLruReadPage_ReadOnly(SlruCtl ctl, int pageno, + TransactionId xid); extern void SimpleLruWritePage(SlruCtl ctl, int slotno, SlruFlush fdata); extern void SimpleLruFlush(SlruCtl ctl, bool checkpoint); extern void SimpleLruTruncate(SlruCtl ctl, int cutoffPage); diff --git a/src/include/access/tupdesc.h b/src/include/access/tupdesc.h index 035a0a85e5..cb1c375cff 100644 --- a/src/include/access/tupdesc.h +++ b/src/include/access/tupdesc.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/tupdesc.h,v 1.50 2006/06/16 18:42:23 tgl Exp $ + * $PostgreSQL: pgsql/src/include/access/tupdesc.h,v 1.51 2006/10/04 00:30:07 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -104,7 +104,7 @@ extern void DecrTupleDescRefCount(TupleDesc tupdesc); if ((tupdesc)->tdrefcount >= 0) \ DecrTupleDescRefCount(tupdesc); \ } while (0) - + extern bool equalTupleDescs(TupleDesc tupdesc1, TupleDesc tupdesc2); extern void TupleDescInitEntry(TupleDesc desc, diff --git a/src/include/access/xlog_internal.h b/src/include/access/xlog_internal.h index 773e85fbcd..83feb38ad7 100644 --- a/src/include/access/xlog_internal.h +++ b/src/include/access/xlog_internal.h @@ -11,7 +11,7 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/xlog_internal.h,v 1.16 2006/08/17 23:04:08 tgl Exp $ + * $PostgreSQL: pgsql/src/include/access/xlog_internal.h,v 1.17 2006/10/04 00:30:07 momjian Exp $ */ #ifndef XLOG_INTERNAL_H #define XLOG_INTERNAL_H @@ -239,7 +239,7 @@ typedef struct RmgrData extern const RmgrData RmgrTable[]; -/* +/* * Exported to support xlog switching from bgwriter */ extern time_t GetLastSegSwitchTime(void); |
