SYMBTBL.Cpp
上传用户:tenhai
上传日期:2021-02-19
资源大小:492k
文件大小:1k
源码类别:

组合框控件

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "symbol.h"
  3. #include "symbtbl.h"
  4. tblsearch(symbol_node_ref_tbl_t *ptbl, char* token){
  5.     int cond;
  6.     int low=0, high=ptbl->tblsize-1, mid;
  7.     /*binary search*/
  8.     while (low<=high){
  9.           mid=(low+high)/2;
  10.           if ((cond=strcmp(token, ptbl->tblbody[mid]->literal))<0)
  11.              high=mid-1;
  12.           else 
  13.           if (cond>0)
  14.              low=mid+1;
  15.           else{
  16.              ptbl->currpos=mid;
  17.              return 1; 
  18.           }   
  19.     }
  20.     ptbl->currpos=low;
  21.     return 0;
  22. }
  23. tblinsert(symbol_node_ref_tbl_t *ptbl, symbol_node_t *pnews){
  24.     int ptr;
  25.     for (ptr=ptbl->tblsize;ptr>ptbl->currpos;ptr--)
  26.         ptbl->tblbody[ptr]=ptbl->tblbody[ptr-1];
  27.     ptbl->tblbody[ptbl->currpos]=pnews;
  28.     return ++ptbl->tblsize;
  29. }
  30. tblremove(symbol_node_ref_tbl_t *ptbl, symbol_node_t **ppnews){
  31.     unsigned int ptr;
  32.     *ppnews=ptbl->tblbody[ptbl->currpos];
  33.     for (ptr=ptbl->currpos+1;ptr<ptbl->tblsize;ptr++)
  34.         ptbl->tblbody[ptr-1]=ptbl->tblbody[ptr];
  35.     return --ptbl->tblsize;
  36. }
  37. tblappend(symbol_node_ref_tbl_t *ptbl, symbol_node_t *pnews){
  38.   ptbl->currpos=ptbl->tblsize;
  39.   ptbl->tblbody[ptbl->tblsize++]=pnews;
  40.   return 0;
  41. }
  42. tblclear(symbol_node_ref_tbl_t *ptbl){
  43.   unsigned int idx;
  44.   for (idx=0;idx<ptbl->tblsize;idx++)
  45.       ptbl->tblbody[idx]=NULL;
  46.   ptbl->tblsize=0;
  47.   ptbl->currpos=0;
  48.   return 0;
  49. }