⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arroots.h

📁 roots--一个轻量级的内存数据库系统。基于Hash Map的table设计。快速轻巧。
💻 H
📖 第 1 页 / 共 2 页
字号:
#define ExpandShort(Array,NewSize) \
   if (Array.nAlloc < NewSize) { \
      if (Array.nAlloc==0) Array.array = \
            (unsigned short *) malloc(sizeof(short)*(NewSize)); \
      else Array.array = \
            (unsigned short *) realloc(Array.array,sizeof(short)*(NewSize)); \
      if (Array.array==NULL) { \
         RootsSOS("No Free Space\n"); \
         abort(); \
      } \
      memset(Array.array+Array.nAlloc,'\0', \
         sizeof(short)*(NewSize-Array.nAlloc)); \
      Array.nAlloc=NewSize; \
   }

#define ExpandSignedShort(Array,NewSize) \
   if (Array.nAlloc < NewSize) { \
      if (Array.nAlloc==0) Array.array= \
            (short *) malloc(sizeof(short)*(NewSize)); \
      else Array.array = \
            (short *) realloc(Array.array,sizeof(short)*(NewSize)); \
      if (Array.array==NULL) { \
         RootsSOS("No Free Space\n"); \
         abort(); \
      } \
      memset(Array.array+Array.nAlloc,'\0', \
         sizeof(short)*(NewSize-Array.nAlloc)); \
      Array.nAlloc=NewSize; \
   }

#define ExpandByte(Array,NewSize) \
   if (Array.nAlloc < NewSize) { \
      if (Array.nAlloc==0) Array.array = \
            (BYTE *) malloc((NewSize)); \
      else Array.array= \
            (BYTE *) realloc(Array.array,(NewSize)); \
      if (Array.array==NULL) { \
         RootsSOS("No Free Space\n"); \
         abort(); \
      } \
      memset(Array.array+Array.nAlloc,'\0',NewSize-Array.nAlloc); \
      Array.nAlloc=NewSize; \
   }

#define ExpandBlock(Array,NewSize) \
   if (Array.nAlloc < NewSize) { \
      if (Array.nAlloc==0) Array.block = \
            (BYTE *) malloc(Array.cpl*(NewSize)); \
      else Array.block = \
            (BYTE *) realloc(Array.block,Array.cpl*(NewSize)); \
      if (Array.block==NULL) { \
         RootsSOS("No Free Space\n"); \
         abort(); \
      } \
      memset(Array.block+Array.cpl*Array.nAlloc,'\0', \
         Array.cpl*(NewSize-Array.nAlloc)); \
      Array.nAlloc=NewSize; \
   }

#define ExpandPointer(Array,NewSize) \
   if (Array.nAlloc < NewSize) { \
      if (Array.nAlloc==0) Array.array = \
            (void *) malloc(sizeof(void *)*(NewSize)); \
      else Array.array = \
            (void *) realloc(Array.array,sizeof(void *)*(NewSize)); \
      if (Array.array==NULL) { \
         RootsSOS("No Free Space\n"); \
         abort(); \
      } \
      memset(Array.array+Array.nAlloc,(int) NULL, \
         sizeof(void *)*(NewSize-Array.nAlloc)); \
      Array.nAlloc=NewSize; \
   }

#define FreeBlock(Array) \
   {if (Array.block!=NULL) \
       free(Array.block); \
    Array.block=NULL; \
    Array.cpl=0; \
    Array.nline=0; \
    Array.nAlloc=0;}

#define FreeArray(Array) \
   {if (Array.array!=NULL) \
       free(Array.array); \
    Array.array=NULL; \
    Array.nAlloc=0;}

#define BlockPointer(Block,index) \
   (Block).block+((index)-1)*(Block).cpl

#define MatrixPointer(Matrix,row,col) \
   (Matrix).block+((row)-1)*(Matrix).cpl+(col)-1

#define ScanLinkedList(first,next,index) \
   for(index=first;index;index=*(next+(index-1)))

#define RemoveFromInputList(First,lnextl,CurrentLine,PreviousLine,NextLine) \
   NextLine=*(lnextl+CurrentLine); \
   if (!PreviousLine) *(First)=NextLine; \
   else *(lnextl+PreviousLine)=(unsigned short)NextLine;

#define InsertIntoOutputList(Output,lnextl,CurrentLine,LastOutput) \
   if (!LastOutput) { \
      LastOutput=*(Output)=CurrentLine; \
      *(lnextl+CurrentLine)=0; \
   } \
   else { \
      *(lnextl+LastOutput)=(unsigned short)CurrentLine; \
      LastOutput=CurrentLine; \
      *(lnextl+CurrentLine)=0; \
   }


// calling sequence optimizer macros

#define BLOCK(Array)  (Array).block,&(Array).cpl,&(Array).nline
#define BLKCPL(Array) (Array).block,&(Array).cpl

// -------------------------------------------------------------------------
//   functions
// -------------------------------------------------------------------------

extern void chtabm(BYTE *table, long *tabcpl, long *tablin,
   BYTE *block, long *cpl, long *nline,
   long *field, short type, long *sorti,
   int (*compare)(const void *el, const void *e2, size_t count, short typ),
   long *inxary);

extern void uqsort(BYTE *block, long *cpl, long *nline, long *field,
                   short *types, long *nf, long *first,
                   unsigned short *lnextl, unsigned short *lfrstl,
                   unsigned short *llastl, unsigned short *temp,
                   int (*compare)(const void *el, const void *e2, size_t count, short type));

extern void ugroup(long *first, unsigned short *lnextl, 
                   unsigned short *lfrstl, unsigned short *lfrstg,
                   long *ngroup);

extern void lgor(BYTE *seta, long *cpl, BYTE *setb, long *empty);
extern void lgand(BYTE *seta, long *cpl, BYTE *setb, long *empty);
extern void lgexcl(BYTE *seta, long *cpl, BYTE *setb, long *empty);
extern void setbit(long *first, unsigned short *lnextl, BYTE *string);

extern void setprn(BYTE *string, long *first, unsigned short *lnextl,
                   long *match);

extern void txtrng(BYTE *call_block, long *cpl, long *field, BYTE *text,
                   long *tflds2, long *first, unsigned short *lnextl,
                   long *match);

extern void txtrrg(BYTE *block, long *cpl, long *field, BYTE *text,
                   long *tflds2, long *first, unsigned short *lnextl,
                   long *lfrstp);

extern void scanpr(BYTE *block, long *cpl, long *field, BYTE *text,
                   long *tfield, long *first, unsigned short *lnextl,
                   long *match);

extern void mskprn(BYTE *block, long *cpl, long *field, BYTE *call_text,
                   long *tfield, long *first, unsigned short *lnextl,
                   long *match, BYTE *dlm);

extern void cmpprn(BYTE *call_block, long *cpl, long *fielda, long *fieldb,
                   long *first, unsigned short *lnextl,
                   long *gfirst, long *lfirst);

extern long xeq(CompilerArguments *cs);

extern void gregor(long *serial, long *wkday, 
                   long *day, long *month, long *year);

extern int ReadBinFile (BYTE **buf, long *cpl, char *path);
extern BYTE WriteBinFile(BYTE **buf, long *cpl, char *path);

extern BYTE* TextRect(BYTE **CharStream, long *cpl, long *nline,
                      long *tabdist, long *maxcpl);

extern BYTE ReadTextFile(char *fspec, BlockCplNline *file);
extern BYTE ReadBase(DataBase *db);
extern BYTE WriteBase(DataBase *db);
extern BYTE ReadAndTranslateDirectory(DataBase *db);
extern BYTE FormatAndWriteDirectory(DataBase *db);
extern long compint(CompilerArguments *cs);
extern long complin(CompilerArguments *cs, BYTE *Curlin, long *cpl);
extern long Parse(char *line, long cpl, char **tokens, short *tokcpl);
extern BYTE SetupSourceToTargetMaps(DataBase *sb, DataBase *tb);

extern BYTE MapSubsetToTarget(long *first, unsigned short* lnextl,
                              DataBase *source, DataBase *target);

extern BYTE CrunchRectangle(BlockCplNline *rect, long tabdist);
extern BYTE CleanDataBase(DataBase *db);

extern BYTE CanonizeDataBase(DataBase *db,
                             long *nsumBfi,  // number of summary fields
                             long *sumbfi);  // summary bfi's

extern BYTE GetBinaryTablePointersAndMap
               (BlockCplNline *itab,      // sorted input table
                DataBase *trgbas,         // target base
                long *tmaps,              // translation map of itab len
                long bfis);               // field in trgbas

extern BYTE LookupExternalFieldNames(DataBase *db, char *fieldName,
                                     short *bfi, short nfields);

extern BYTE WriteRectangle(BlockCplNline *rect, char *fspec);

extern long arxbin(DataBase *db, short bfi, long line);
extern BYTE* arxcat(BYTE *dest, DataBase *db, short bfi, long line);
extern void setReportConversion(void);
extern void setDefaultConversion(void);
extern void setFullDateConversion(int flag);
extern BYTE cdatec(BYTE *reply, long *repfld, long *ymd);
extern DataBaseInternalValue* arxout(DataBase *db, short bfi, char *string);
extern BYTE* datcat(BYTE *dest, long bin);
extern long arxinx(DataBase *db, short bfi, BYTE *text);
extern void mqueue(MessageQueue *mq, BYTE *text);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -