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

  1. #include "string_btree.h"
  2.  
  3. int StringBTree::key_equal_op(const Key* const key, const void* const data)
  4. {
  5.     const void* ptr = data;
  6.  
  7.     const uint32_t length = extract_value_and_advance(&ptr);
  8.     const uint32_t min_length = std::min(key->length, length);
  9.  
  10.     const char* const p1 = static_cast<const char*>(key->data);
  11.     const char* const p2 = static_cast<const char*>(ptr);
  12.  
  13.     for (uint32_t i = 0; i < min_length; ++i) {
  14.         if (p1[i] < p2[i])
  15.             return -1;
  16.         else if (p1[i] > p2[i])
  17.             return 1;
  18.     }
  19.  
  20.     if (key->length < length)
  21.         return -1;
  22.     else if (key->length > length)
  23.         return 1;
  24.     else
  25.         return 0;
  26. }
  27.  
  28. int StringBTree::key_less_than_op(const Key* const key, const void* const data)
  29. {
  30.     const void* ptr = data;
  31.     const uint32_t index = extract_value_and_advance(&ptr);
  32.     const int result = key_equal_op(key, ptr);
  33.     return result != 0 ? result : 1;
  34. }
  35.  
  36. const void* StringBTree::skip_node_data(const void* const node) const
  37. {
  38.     const void* ptr = node;
  39.     const uint32_t length = extract_value_and_advance(&ptr);
  40.     return advance_pointer(ptr, length);
  41. }
  42.  
  43. int StringBTree::traverse_callback(const void* const data, void* const arg)
  44. {
  45.     const TraverseCallbackArgs<TraverseStringCallback>* const args = static_cast<const TraverseCallbackArgs<TraverseStringCallback>*>(arg);
  46.  
  47.     int action = kTRAVERSE_CONTINUE;
  48.  
  49.     String string;
  50.     if (string.parse(data) && args->callback)
  51.         action = (*args->callback)(&string, args->arg);
  52.  
  53.     return action;
  54. }
  55.