stack.h
来自「国外网站上的一些精典的C程序」· C头文件 代码 · 共 93 行
H
93 行
/* ======================================================================= STACK.h Stack manager. A.Reitsma, Delft, Nederland. v0.25 94-07-03 Public Domain. - Four default stacks are created by StackSystemInit. User stacks must be created by StackCreate; which may fail on insufficient memory. - Initially a stack has space for 32 items and can/will be grown (auto- matically) in steps of 16 items as long as there is sufficient memory space. Therefore the maximum ItemSize is 2kB. In the DEBUG version -- NDEBUG not defined during compilation of STACKS.c -- the maximum is actually restricted to 1kB by an assert. A future version may have reduced initial sizes and growth factors for large itemsizes. - Stacks do NOT decrease in size. Except by complete deletion. - Pushes fail when the stack is full and the memory resizing fails. The return value indicates this. - Underflowing Pops return the Stack's bottom value. - Pushes and Pops do NOT check stack-integrity. Use StackCheck().----------------------------------------------------------------------- */#ifndef STACK_H#define STACK_H#include "extkword.h"enum StackErrors /* Return values for StackCheck() */{ /* The highest value is reported. */ NO_PROBLEMS, /* All is OK (multiple use) */ STACK_EMPTY, /* stack is empty: error on next pop */ STACK_LIMIT_REACHED, /* stack is full: maybe error on next push */ STACK_UNDERFLOW, /* one or more pop's too many */ STACK_ERRORS, /* Dummy to separate warnings and */ /* -------- REAL errors --------- */ STACK_CORRUPT1, /* stack.top > stack.max */ STACK_CORRUPT2, /* top * itemsize != offset */ STACK_NULL, /* Stack deleted or not created */ STACK_INV_NUMBER, /* Stack number out of range */};enum StackDefault{ STACK_INT, STACK_LONG, STACK_PTRS, STACK_FAR_PTRS, STACK_COUNT_DEFAULT }; /* supplied for management *//* ---- management operations ----------------------------------------- */int StackSystemInit( int StackCountAdditional ); /* StackCountAdditional is the amount of User stacks. */ /* Returns actual number of stacks, or -1 on memory error. */ /* MUST be called before other use of Stack system. */ /* Also creates the four default stacks */int StackCreate( int ItemSize ); /* Returns the Stack number to use */ /* or -1 on memory failure. */void StackDelete( int Stack ); /* You MAY delete a default stack */int StackAdapt( int Stack, int Free ); /* Grows Stack as far as possible and needed to have a Free */ /* number of free locations. Partial growth is possible !!! */ /* Returns -1 on memory error, including partial growth. */int StackCheck( int Stack ); /* Returns enum StackErrors value. Will clear underflow flag if */ /* it is the only problem. Major purpose is debugging. *//* ---- Generic push/pop operations ----------------------------------- */int Push( int Stack, void * Source ); /* returns -1 on failure */void Pop( int Stack, void * Destination ); /* Stack value is NOT validated. */ /* Destination buffer _MUST_ be at least of size ItemSize */ /* as given on StackCreate() !!! Otherwise: major SNAFU. */ /* These functions are not meant for the default stacks. */void StackUnpop( int Stack ); /* Reverse last pop. Purpose is to take a */ /* look and not accepting the data ... *//* ---- Push/pop operations to/from default stacks -------------------- *//* VERY destructive when the relevant Stack has been deleted !!! */int PushInt( int Value ); /* non-zero return of pushes is failure! */int PopInt( void ); /* Pop's return the value */int PushLong( long Value );long PopLong( void );int PushPtr( void * Value );void * PopPtr( void );int PushFptr( void FAR * Value );void FAR * PopFptr( void );#endif /* STACK_H *//* === STACK.h end ==================================================== */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?