Advertisement
expired6978

NET4

Mar 10th, 2014
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.18 KB | None | 0 0
  1. NiExtraData* NiObjectNET::GetExtraData(const BSFixedString& key) const
  2. {
  3.     if (!key.data)
  4.         return NULL;
  5.  
  6.     UInt16 t = (UInt16)m_extraDataLen - 1;  // Top
  7.     UInt16 m = 0;   // Middle
  8.     UInt16 b = 0;   // Bottom
  9.     while (b <= t)
  10.     {
  11.         m = (t + b) >> 1; // Middle
  12.         ptrdiff_t ptCompare = key.data - m_extraData[m]->m_pcName;
  13.         if (ptCompare == 0) { // Key equal
  14.             return m_extraData[m];
  15.         } else if (ptCompare > 0) { // Key > middle
  16.             b = m + 1;
  17.         } else {   // Key < middle
  18.             t = m - 1;
  19.         }
  20.     }
  21.  
  22.     return NULL;    // Couldn't find Extra Data for the given search key.
  23. }
  24.  
  25. bool NiObjectNET::RemoveExtraData(const BSFixedString& key)
  26. {
  27.     if (m_extraDataLen == 0) // No extra data
  28.         return false;
  29.  
  30.     if (!key.data) // No key data
  31.         return false;
  32.  
  33.     UInt16 t = (UInt16)m_extraDataLen - 1;  // Top
  34.     UInt16 m = 0;   // Middle
  35.     UInt16 b = 0;   // Bottom
  36.     while (b <= t)
  37.     {
  38.         m = (t + b) >> 1; // Middle
  39.         ptrdiff_t ptCompare = key.data - m_extraData[m]->m_pcName;
  40.         if (ptCompare == 0) { // Key equal
  41.             DeleteExtraData(m);
  42.             return true;
  43.         } else if (ptCompare > 0) { // Key > middle
  44.             b = m + 1;
  45.         } else { // Key < middle
  46.             t = m - 1;
  47.         }
  48.     }
  49.  
  50.     return false; // Key not found
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement