cycler.h
上传用户:dgyhgb
上传日期:2007-01-07
资源大小:676k
文件大小:4k
源码类别:

SQL Server

开发平台:

Unix_Linux

  1. /* 
  2.  *  cycler.h  - interface of cycle processors library of
  3.  *              GNU SQL compiler  
  4.  *
  5.  * This file is a part of GNU SQL Server
  6.  *
  7.  *  Copyright (c) 1996, 1997, Free Software Foundation, Inc
  8.  *  Developed at the Institute of System Programming
  9.  *  This file is written by Michael Kimelman
  10.  * 
  11.  *  This program is free software; you can redistribute it and/or modify
  12.  *  it under the terms of the GNU General Public License as published by
  13.  *  the Free Software Foundation; either version 2 of the License, or
  14.  *  (at your option) any later version.
  15.  *
  16.  *  This program is distributed in the hope that it will be useful,
  17.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19.  *  GNU General Public License for more details.
  20.  *
  21.  *  You should have received a copy of the GNU General Public License
  22.  *  along with this program; if not, write to the Free Software
  23.  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  24.  *
  25.  *  Contacts: gss@ispras.ru
  26.  *
  27.  */
  28. /* $Id: cycler.h,v 1.245 1997/03/31 03:46:38 kml Exp $ */
  29. #ifndef __CYCLER_H__
  30. #define __CYCLER_H__
  31. #include "global.h"
  32. extern i4_t    cycler_skip_subtree;
  33. #define LPROC(lv,RNODE) for(lv=RNODE;lv;lv=RIGHT_TRN(lv))
  34. typedef TXTREF  (*PROC) __P((TXTREF r,i4_t flags));
  35. TXTREF  cycler __P((TXTREF root,PROC exec,i4_t flags));
  36. /*
  37.   i4_t flags; - mask of bits determining the order and conditions of processing
  38.   
  39.     0 -  processing arguments (before step down)
  40.     1 -  processing on Left-Down  way
  41.     2 -  processing on Down-Right way 
  42.     3 -  processing on Right-Left way 
  43.     4 -  'root' is the left end of line
  44.     5 -  correct right link
  45.     6 -  it's vocabulary node - for internal purpose of cycler only
  46. */
  47. #define CYCLER_OPER  1
  48. #define CYCLER_LD    2
  49. #define CYCLER_DR    4
  50. #define CYCLER_RL    8
  51. #define CYCLER_LN    0x10
  52. #define CYCLER_RLC   0x20
  53. #define CYCLER_VCB   0x40
  54. #define CYC(fl)  CYCLER_##fl
  55. /*************************************************************************
  56. **   STACK's macro declarations                                          **
  57. *************************************************************************/
  58. #define STACK_PORTION  100
  59. struct Stack_portion
  60. {
  61.   i4_t                   used;
  62.   struct Stack_portion *nxt;
  63.   void                 *inf;
  64. };
  65.   void st_push __P((struct Stack_portion **hdr,void *ptr,i4_t size));
  66.   void st_pop __P((struct Stack_portion **hdr,void *ptr,i4_t size,char *f,i4_t l));
  67.   i4_t  st_depth __P((struct Stack_portion *hd));
  68.   void *st_get __P((struct Stack_portion *hd,i4_t size,i4_t shift,char *f,i4_t l));
  69. #define DECL_STACK(SN,VTYPE) 
  70.     typedef VTYPE SN##_EL_TYPE;
  71.     static struct Stack_portion *SN##_stack=NULL;
  72.     static SN##_EL_TYPE SN##_buffer;
  73. #define PUSHS(SN,VALUE) { SN##_buffer=VALUE;
  74.     st_push(&SN##_stack,&SN##_buffer,sizeof(SN##_buffer));}
  75. #define POPS(SN,LVALUE) 
  76.   { st_pop(&SN##_stack,&SN##_buffer,sizeof(SN##_buffer),__FILE__,__LINE__);
  77.     (LVALUE) = SN##_buffer;}
  78. /* st_pop(&SN##_stack,&LVALUE,sizeof(SN##_buffer),__FILE__,__LINE__); */
  79. #define IS_ST_EPMTY(SN)         (SN##_stack==NULL)
  80. #define STACK_DEPTH(SN,lv)      lv=st_depth(SN##_stack)
  81. #define GET_STACK(SN,shift,lv) lv=*((SN##_EL_TYPE*)
  82.     st_get(SN##_stack,sizeof(SN##_buffer),shift,__FILE__,__LINE__))
  83. #define SPTR(SN,shift)          ((SN##_EL_TYPE*)
  84.     st_get(SN##_stack,sizeof(SN##_buffer),shift,__FILE__,__LINE__))
  85. #define TOP_STACK(SN) *((SN##_EL_TYPE*)
  86.     st_get(SN##_stack,sizeof(SN##_buffer),0,__FILE__,__LINE__))
  87. #define TOP_ST                  TOP_STACK(SNAME)
  88. #define IS_ST_EMP               IS_ST_EPMTY(SNAME)
  89. #define DECL_ST(VTYPE)          DECL_STACK(SNAME,VTYPE)
  90. #define PUSH(VALUE)             PUSHS(SNAME,VALUE)
  91. #define POP(LVALUE)             POPS(SNAME,LVALUE)
  92. #define ST_DEPTH(lv)            STACK_DEPTH(SNAME,lv)
  93. #define GET_ST(shift,lv)        GET_STACK(SNAME,shift,lv)
  94. #endif  /* __CYCLER_H__ */