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

  1. #pragma once
  2.  
  3. #include "btree.h"
  4.  
  5. class FileIdBTree
  6.     : public BTreeBase
  7. {
  8. public:
  9.     typedef int TraverseFileIdCallback(const FileId* const file_id, void* const arg);
  10.  
  11.     struct Key
  12.     {
  13.         inline Key()
  14.             : name_index(kINVALID_INDEX)
  15.             , extension_index(kINVALID_INDEX)
  16.         {
  17.         }
  18.  
  19.         inline Key(const uint32_t name_index, const uint32_t extension_index)
  20.             : name_index(name_index)
  21.             , extension_index(extension_index)
  22.         {
  23.         }
  24.  
  25.         uint32_t name_index;
  26.         uint32_t extension_index;
  27.     };
  28.  
  29.     inline FileIdBTree(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 ~FileIdBTree()
  35.     {
  36.     }
  37.  
  38.     inline bool search_by_index(const uint32_t index, FileId* file_id) const
  39.     {
  40.         const void* const data = BTreeBase::search(index);
  41.         if (!data)
  42.             return false;
  43.         return file_id->parse(data) != nullptr;
  44.     }
  45.  
  46.     inline const void* search(const uint32_t name_index, const uint32_t extension_index, uint32_t* const index = nullptr) const
  47.     {
  48.         return BTreeBase::search(&Key(name_index, extension_index), index);
  49.     }
  50.  
  51.     inline void traverse(TraverseFileIdCallback* const callback, void* const arg) const
  52.     {
  53.         TraverseCallbackArgs<TraverseFileIdCallback> args(callback, arg);
  54.         BTreeBase::traverse(traverse_callback, &args);
  55.     }
  56.  
  57. protected:
  58.     virtual const void* skip_node_data(const void* const node) const;
  59.     
  60. private:
  61.     static int key_equal_op(const Key* const key, const void* const data);
  62.     static int key_less_than_op(const Key* const key, const void* const data);
  63.  
  64.     static int traverse_callback(const void* const data, void* const arg);
  65. };
  66.