home *** CD-ROM | disk | FTP | other *** search
/ Xentax forum attachments archive / xentax.7z / 7662 / gttool_src_bin.7z / gttool / src / string_btree.h < prev    next >
Encoding:
C/C++ Source or Header  |  2014-02-20  |  2.0 KB  |  83 lines

  1. #pragma once
  2.  
  3. #include "btree.h"
  4.  
  5. class StringBTree
  6.     : public BTreeBase
  7. {
  8. public:
  9.     typedef int TraverseStringCallback(const String* const string, void* const arg);
  10.  
  11.     struct Key
  12.     {
  13.         inline Key()
  14.             : data(nullptr)
  15.             , length(0)
  16.         {
  17.         }
  18.  
  19.         inline Key(const void* const data, const uint32_t length)
  20.             : data(data)
  21.             , length(length)
  22.         {
  23.         }
  24.  
  25.         const void* data;
  26.         size_t length;
  27.     };
  28.  
  29.     inline StringBTree(const void* const table_data)
  30.         : BTreeBase(table_data, key_comparsion_op(&key_less_than_op), key_comparsion_op(&key_equal_op))
  31.     {
  32.     }
  33.  
  34.     inline ~StringBTree()
  35.     {
  36.     }
  37.  
  38.     inline bool search_by_index(const uint32_t index, String* string) const
  39.     {
  40.         const void* const data = BTreeBase::search(index);
  41.         if (!data)
  42.             return false;
  43.         return string->parse(data) != nullptr;
  44.     }
  45.  
  46.     inline const void* search(const char* const string, uint32_t* const index = nullptr) const
  47.     {
  48.         return search(string, strlen(string), index);
  49.     }
  50.  
  51.     inline const void* search(const char* const string, const size_t string_length, uint32_t* const index = nullptr) const
  52.     {
  53.         return BTreeBase::search(&Key(string, string_length), index);
  54.     }
  55.  
  56.     inline uint32_t index_by_string(const char* const string) const
  57.     {
  58.         return index_by_string(string, strlen(string));
  59.     }
  60.  
  61.     inline uint32_t index_by_string(const char* const string, const size_t string_length) const
  62.     {
  63.         uint32_t index;
  64.         search(string, string_length, &index);
  65.         return index;
  66.     }
  67.  
  68.     inline void traverse(TraverseStringCallback* const callback, void* const arg) const
  69.     {
  70.         TraverseCallbackArgs<TraverseStringCallback> args(callback, arg);
  71.         BTreeBase::traverse(traverse_callback, &args);
  72.     }
  73.  
  74. protected:
  75.     virtual const void* skip_node_data(const void* const node) const;
  76.  
  77. private:
  78.     static int key_equal_op(const Key* const key, const void* const data);
  79.     static int key_less_than_op(const Key* const key, const void* const data);
  80.  
  81.     static int traverse_callback(const void* const data, void* const arg);
  82. };
  83.