home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / fed0217s.zip / source / varpool.cpp < prev    next >
C/C++ Source or Header  |  2000-03-02  |  2KB  |  115 lines

  1. /*
  2. ** Module   :VARPOOL.CPP
  3. ** Abstract :
  4. **
  5. ** Copyright (C) Sergey I. Yevtushenko
  6. **
  7. ** Log: Wed  29/09/1999 Created
  8. **
  9. */
  10.  
  11. #include <varpool.h>
  12. #include <string.h>
  13.  
  14. char *str_dup(char*, int = -1);
  15.  
  16. //VarPoolItem implementation
  17.  
  18. VarPoolItem::VarPoolItem(char * pName, char *pValue)
  19. {
  20.     cName  = str_dup(pName);
  21.     cValue = str_dup(pValue);
  22. };
  23.  
  24. VarPoolItem::~VarPoolItem()
  25. {
  26.     delete cName;
  27.     delete cValue;
  28. }
  29.  
  30. void VarPoolItem::set(char * pValue)
  31. {
  32.     delete cValue;
  33.     cValue = str_dup(pValue);
  34. }
  35.  
  36. //VarPool implementation
  37.  
  38. int VarPool::Compare(Ptr p1, Ptr p2)
  39. {
  40.     return stricmp(((VarPoolItem*)p1)->name(), ((VarPoolItem*)p2)->name());
  41. }
  42.  
  43. VarPoolItem* VarPool::LocateVar(char *name, int iCreate)
  44. {
  45.     VarPoolItem i = name;
  46.  
  47.     unsigned dPos = Look(&i);
  48.  
  49.     if(dPos < Count() && !Compare(&i, Get(dPos)))
  50.         return (VarPoolItem*) Get(dPos);
  51.  
  52.     if(iCreate)
  53.     {
  54.         VarPoolItem *p = new VarPoolItem(name);
  55.         Add(p);
  56.         return p;
  57.     }
  58.  
  59.     return 0;
  60. }
  61.  
  62. void VarPool::del(char *name)
  63. {
  64.     VarPoolItem i = name;
  65.  
  66.     unsigned dPos = Look(&i);
  67.  
  68.     if(dPos < Count() && !Compare(&i, Get(dPos)))
  69.         Free(Remove(dPos));
  70. }
  71.  
  72. void VarPool::drop(char *namestart)
  73. {
  74.     unsigned len = strlen(namestart);
  75.     unsigned dPos;
  76.     {
  77.         VarPoolItem i = namestart;
  78.         dPos = Look(&i);
  79.     }
  80.  
  81.     while(dPos < Count() &&
  82.           !strnicmp(namestart, ((VarPoolItem *)Get(dPos))->name(), len))
  83.     {
  84.         Free(Remove(dPos));
  85.     }
  86. }
  87.  
  88. void VarPool::set(char *name, char *value)
  89. {
  90.     VarPoolItem* pItem = LocateVar(name, 1);
  91.  
  92.     if(pItem)
  93.         pItem->set(value);
  94. }
  95.  
  96. char* VarPool::get(char *name)
  97. {
  98.     VarPoolItem* pItem = LocateVar(name, 0);
  99.  
  100.     if(pItem)
  101.         return pItem->get();
  102.     return 0;
  103. }
  104.  
  105. VarPool::VarPool():SortedCollection()
  106. {
  107.     bDuplicates = 0;
  108. }
  109.  
  110. VarPool::~VarPool()
  111. {
  112.     RemoveAll();
  113. }
  114.  
  115.