mirror of
https://github.com/postgres/postgres.git
synced 2025-12-16 16:42:29 +03:00
115 lines
2.8 KiB
C
115 lines
2.8 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* fstack.h
|
|
* Fixed format stack definitions.
|
|
*
|
|
*
|
|
* Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* $Id: fstack.h,v 1.8 1999/05/25 16:13:58 momjian Exp $
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
/*
|
|
* Note:
|
|
* Fixed format stacks assist in the construction of FIFO stacks of
|
|
* fixed format structures. Structures which are to be stackable
|
|
* should contain a FixedItemData component. A stack is initilized
|
|
* with the offset of the FixedItemData component of the structure
|
|
* it will hold. By doing so, push and pop operations are simplified
|
|
* for the callers. All references to stackable items are pointers
|
|
* to the base of the structure instead of pointers to the
|
|
* FixedItemData component.
|
|
*
|
|
*/
|
|
#ifndef FSTACK_H
|
|
#define FSTACK_H
|
|
|
|
|
|
/*
|
|
* FixedItem
|
|
* Fixed format stackable item chain component.
|
|
*
|
|
* Note:
|
|
* Structures must contain one FixedItemData component per stack in
|
|
* which it will be an item.
|
|
*/
|
|
typedef struct FixedItemData FixedItemData;
|
|
typedef FixedItemData *FixedItem;
|
|
|
|
struct FixedItemData
|
|
{
|
|
FixedItem next; /* next item or NULL */
|
|
};
|
|
|
|
/*
|
|
* FixedStack
|
|
* Fixed format stack.
|
|
*/
|
|
typedef struct FixedStackData
|
|
{
|
|
FixedItem top; /* Top item on the stack or NULL */
|
|
Offset offset; /* Offset from struct base to item */
|
|
/* this could be signed short int! */
|
|
} FixedStackData;
|
|
|
|
typedef FixedStackData *FixedStack;
|
|
|
|
/*
|
|
* FixedStackInit
|
|
* Iniitializes stack for structures with given fixed component offset.
|
|
*
|
|
* Exceptions:
|
|
* BadArg if stack is invalid pointer.
|
|
*/
|
|
extern void FixedStackInit(FixedStack stack, Offset offset);
|
|
|
|
/*
|
|
* FixedStackPop
|
|
* Returns pointer to top structure on stack or NULL if empty stack.
|
|
*
|
|
* Exceptions:
|
|
* BadArg if stack is invalid.
|
|
*/
|
|
Pointer FixedStackPop(FixedStack stack);
|
|
|
|
/*
|
|
* FixedStackPush
|
|
* Places structure associated with pointer onto top of stack.
|
|
*
|
|
* Exceptions:
|
|
* BadArg if stack is invalid.
|
|
* BadArg if pointer is invalid.
|
|
*/
|
|
extern void FixedStackPush(FixedStack stack, Pointer pointer);
|
|
|
|
/*
|
|
* FixedStackGetTop
|
|
* Returns pointer to top structure of a stack. This item is not poped.
|
|
*
|
|
* Note:
|
|
* This is not part of the normal stack interface. It is intended for
|
|
* debugging use only.
|
|
*
|
|
* Exceptions:
|
|
* BadArg if stack is invalid.
|
|
*/
|
|
extern Pointer FixedStackGetTop(FixedStack stack);
|
|
|
|
/*
|
|
* FixedStackGetNext
|
|
* Returns pointer to next structure after pointer of a stack.
|
|
*
|
|
* Note:
|
|
* This is not part of the normal stack interface. It is intended for
|
|
* debugging use only.
|
|
*
|
|
* Exceptions:
|
|
* BadArg if stack is invalid.
|
|
* BadArg if pointer is invalid.
|
|
* BadArg if stack does not contain pointer.
|
|
*/
|
|
extern Pointer FixedStackGetNext(FixedStack stack, Pointer pointer);
|
|
|
|
#endif /* FSTACK_H */
|