l_bind.c
上传用户:aidanglao
上传日期:2007-01-07
资源大小:69k
文件大小:3k
源码类别:

Oracle数据库

开发平台:

Unix_Linux

  1. /**********************************************************************
  2. /* Copyright (C) 1990 - 1999 Steve A. Olson
  3. /*  11617 Quarterfield Dr
  4. /* Ellicott City, MD, 21042
  5. /* All rights reserved.
  6. /**********************************************************************
  7. /* */
  8. /* L_BIND.C -- List Bind.  Binds insert, delete, and find functions to a LIST.
  9. /*
  10. /* The LFUNC (LIST FUNCTION) Table defines what insert, delete,
  11. /* and find functions make up a LIST class.  Available LIST classes are:
  12. /* QUEUE, STACK,
  13. /* ASCEND, DESCEND,
  14. /* UNSORTED, INORDER.
  15. /* */
  16. #include "list.h"
  17. /* Struct to hold insert, delete, find, and scan functions by NAME.
  18.  */
  19. typedef struct {
  20. char *name;
  21. PFI ins_f;
  22. PFV del_f;
  23. PFN find_f;
  24. PFI scan_f;
  25. } LFUNC;
  26. /* MUST declare all functions
  27.  */
  28. extern void *lnullpfv(), *ldelq(), *ldelsrch(), *ldelbtree()
  29. ,*ldelhash()
  30. ;
  31. extern LNODE *lnullpfn(), *lfindq(), *lfindsrch(), *lfbtree()
  32. ,*lfdesc(), *lfascend()
  33. ,*lfindhash()
  34. ;
  35. extern int  lnullpfi(),  linsstack(),  linsdesc(),  linsbtree()
  36. ,linsascend(),  linsq(),  liuascend()
  37. ,lscanl(),     lscanbt(),   liudesc()
  38. ,lscanhash(), linshash()
  39. ;
  40. /* Table to hold Insert, Delete, Find, and Scan Functions.
  41.  */
  42. static LFUNC lfunctab [] = {
  43. /*  NAME INSERT FUNC DELETE FUNC FIND FUNC  WALK FUNC
  44. /*  ==== =========== =========== =========  =========
  45.  */ {"HASH", linshash, ldelhash, lfindhash, lscanhash},
  46. {"hash", linshash, ldelhash, lfindhash, lscanhash},
  47. {"BTREE", linsbtree, ldelbtree, lfbtree,   lscanbt },
  48. {"btree", linsbtree, ldelbtree, lfbtree,   lscanbt },
  49. {"ASCEND", linsascend, ldelsrch, lfascend,  lscanl },
  50. {"ascend", linsascend, ldelsrch, lfascend,  lscanl },
  51. {"DESCEND", linsdesc, ldelsrch, lfdesc,    lscanl },
  52. {"descend", linsdesc, ldelsrch, lfdesc,    lscanl },
  53. {"UASCEND", liuascend, ldelsrch, lfascend,  lscanl },
  54. {"uascend", liuascend, ldelsrch, lfascend,  lscanl },
  55. {"UDESCEND", liudesc, ldelsrch, lfdesc,    lscanl },
  56. {"udescend", liudesc, ldelsrch, lfdesc,    lscanl },
  57. {"QUEUE", linsq, ldelq, lfindq,    lscanl },
  58. {"queue", linsq, ldelq, lfindq,    lscanl },
  59. {"STACK", linsstack, ldelq, lfindq,    lscanl },
  60. {"stack", linsstack, ldelq, lfindq,    lscanl },
  61. {"UNSORTED", linsq, ldelsrch, lfindsrch, lscanl },
  62. {"unsorted", linsq, ldelsrch, lfindsrch, lscanl },
  63. {"INORDER", linsq, ldelsrch, lfindsrch, lscanl },
  64. {"inorder", linsq, ldelsrch, lfindsrch, lscanl },
  65. /* Sentinal Do Not Delete */
  66. { (char *)0, NULL_PFI, NULL_PFV, NULL_PFN,  NULL_PFI }
  67. };
  68. /* Function to locate an LFUNC in the above table given a name, such as "QUEUE".
  69. /* called by lgetinsf, lgetdelf, lgetfindf.
  70.  */
  71. LFUNC *
  72. getlfunc(char *name)
  73. {
  74. register LFUNC *lf;
  75. for( lf=lfunctab; lf->name != (char *)0 ; lf++)
  76. if( strcmp(lf->name,name)==0 )
  77. return( lf );
  78. return( (LFUNC *)0 );
  79. }
  80. /* Function to find the INSERT function given a name
  81.  */
  82. PFI
  83. lgetinsf(char *name )
  84. {
  85. register LFUNC *lf;
  86. if( (lf=getlfunc(name)) )
  87. return( lf->ins_f );
  88. return( NULL_PFI );
  89. }
  90. /* Function to find the DELETE function given a name
  91.  */
  92. PFV
  93. lgetdelf(char *name )
  94. {
  95. register LFUNC *lf;
  96. if( (lf=getlfunc(name)) )
  97. return( lf->del_f );
  98. return( NULL_PFV );
  99. }
  100. /* Function to find the FIND function given a name
  101.  */
  102. PFN
  103. lgetfindf(char *name )
  104. {
  105. register LFUNC *lf;
  106. if( (lf=getlfunc(name)) )
  107. return( lf->find_f );
  108. return( NULL_PFN );
  109. }
  110. /* Function to find the SCAN function given a name
  111.  */
  112. PFI
  113. lgetscanf( char *name )
  114. {
  115. register LFUNC *lf;
  116. if( (lf=getlfunc(name)) )
  117. return( lf->scan_f );
  118. return( NULL_PFI );
  119. }