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

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