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

  1. #include "fileid_btree.h"
  2.  
  3. int FileIdBTree::key_equal_op(const Key* const key, const void* const data)
  4. {
  5.     const void* ptr = data;
  6.     const bool has_extension = (data_at<uint8_t>(ptr, 0) & 0x2) != 0;
  7.     ptr = advance_pointer(ptr, 1);
  8.     const uint32_t name_index = extract_value_and_advance(&ptr);
  9.     const uint32_t extension_index = has_extension ? extract_value_and_advance(&ptr) : 0;
  10.     if (name_index > key->name_index)
  11.         return -1;
  12.     else if (name_index < key->name_index)
  13.         return 1;
  14.     if (extension_index > key->extension_index)
  15.         return -1;
  16.     else if (extension_index < key->extension_index)
  17.         return 1;
  18.     return 0;
  19. }
  20.  
  21. int FileIdBTree::key_less_than_op(const Key* const key, const void* const data)
  22. {
  23.     const void* ptr = data;
  24.     const uint32_t name_index = extract_value_and_advance(&ptr);
  25.     const uint32_t extension_index = extract_value_and_advance(&ptr);
  26.     if (name_index > key->name_index)
  27.         return -1;
  28.     else if (name_index < key->name_index)
  29.         return 1;
  30.     if (key->extension_index < extension_index)
  31.         return -1;
  32.     else
  33.         return 1;
  34. }
  35.  
  36. const void* FileIdBTree::skip_node_data(const void* const node) const
  37. {
  38.     const void* ptr = node;
  39.     const uint32_t unk1 = extract_value_and_advance(&ptr);
  40.     return ptr;
  41. }
  42.  
  43. int FileIdBTree::traverse_callback(const void* const data, void* const arg)
  44. {
  45.     const TraverseCallbackArgs<TraverseFileIdCallback>* const args = static_cast<const TraverseCallbackArgs<TraverseFileIdCallback>*>(arg);
  46.  
  47.     int action = kTRAVERSE_CONTINUE;
  48.  
  49.     FileId file_id;
  50.     if (file_id.parse(data) && args->callback)
  51.         action = (*args->callback)(&file_id, args->arg);
  52.  
  53.     return action;
  54. }
  55.