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

  1. #pragma once
  2.  
  3. #include "common.h"
  4. #include "types.h"
  5.  
  6. class BTreeBase
  7. {
  8. protected:
  9.     typedef int KeyComparsionOp(const void* const key, const void* const sub_data);
  10.  
  11.     typedef int TraverseCallback(const void* const data, void* const arg);
  12.  
  13. public:
  14.     enum
  15.     {
  16.         kTRAVERSE_CONTINUE = 0,
  17.         kTRAVERSE_STOP = -1,
  18.     };
  19.  
  20.     static const uint32_t kINVALID_INDEX = -1;
  21.  
  22.     inline BTreeBase(const void* const table_data, KeyComparsionOp* const less_than_op, KeyComparsionOp* const equal_op)
  23.         : table_data_(table_data)
  24.         , less_than_op_(less_than_op)
  25.         , equal_op_(equal_op)
  26.     {
  27.     }
  28.  
  29.     inline virtual ~BTreeBase()
  30.     {
  31.     }
  32.  
  33. protected:
  34.     template<typename T>
  35.     struct TraverseCallbackArgs
  36.     {
  37.         inline TraverseCallbackArgs(T* const callback, void* const arg)
  38.             : callback(callback)
  39.             , arg(arg)
  40.         {
  41.         }
  42.  
  43.         T* const callback;
  44.         void* const arg;
  45.     };
  46.  
  47.     const void* search(const uint32_t index) const;
  48.  
  49.     const void* search(const void* const key, uint32_t* const index) const;
  50.  
  51.     void traverse(TraverseCallback* callback, void* const arg) const;
  52.  
  53.     virtual const void* skip_node_data(const void* const node) const = 0;
  54.  
  55.     template<typename T>
  56.     static inline KeyComparsionOp* key_comparsion_op(T* op)
  57.     {
  58.         return reinterpret_cast<KeyComparsionOp*>(op);
  59.     }
  60.  
  61. private:
  62.     const void* search_with_cmp(const void* const node_data, const void* const key, KeyComparsionOp* const op, uint32_t* const lower_bound, uint32_t* const upper_bound, const bool is_internal) const;
  63.  
  64.     const void* table_data_;
  65.  
  66.     KeyComparsionOp* const less_than_op_;
  67.     KeyComparsionOp* const equal_op_;
  68. };
  69.