_Memc.h 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /******************************************************************************/
  2. struct _Memc // Continuous Memory Based Container Base - Do not use this class, use 'Memc' instead
  3. {
  4. void del ();
  5. void clear();
  6. Int elms ()C {return _elms ;}
  7. UInt elmSize ()C {return _elm_size;}
  8. Ptr data ()C {return _data ;}
  9. UInt memUsage()C {return _elm_size*_max_elms;}
  10. #if EE_PRIVATE
  11. UInt maxElms ()C {return _max_elms ;}
  12. Bool initialized()C {return _elm_size>0;}
  13. #endif
  14. Ptr addr (Int i)C {return InRange(i, _elms) ? (Byte*)_data + i *_elm_size : null;}
  15. Ptr addrFirst ( )C {return _elms ? (Byte*)_data : null;}
  16. Ptr addrLast ( )C {return _elms ? (Byte*)_data + (_elms-1)*_elm_size : null;}
  17. Ptr operator[](Int i)C { RANGE_ASSERT(i, _elms); return (Byte*)_data + i *_elm_size;}
  18. Ptr operator()(Int i);
  19. Ptr first ( )C {return T[0 ];}
  20. Ptr last ( )C {return T[elms()-1 ];}
  21. Ptr New ( ) {return T[addNum(1)];}
  22. Ptr NewAt (Int i);
  23. Int index (CPtr elm)C;
  24. Bool contains(CPtr elm)C {return index(elm)>=0;}
  25. void removeLast();
  26. void remove (Int i, Bool keep_order=false);
  27. void removeNum (Int i, Int n, Bool keep_order=false);
  28. void removeData(CPtr elm, Bool keep_order=false);
  29. void setNum (Int num);
  30. void setNumZero(Int num);
  31. Int addNum (Int num);
  32. Int addNumZero(Int num);
  33. void reserve (Int num);
  34. Bool binarySearch(CPtr value, Int &index, Int compare(CPtr a, CPtr b))C;
  35. void sort(Int compare(CPtr a, CPtr b));
  36. void reverseOrder();
  37. void randomizeOrder();
  38. void rotateOrder(Int offset);
  39. void swapOrder(Int i , Int j);
  40. void moveElm (Int elm, Int new_index);
  41. Bool saveRaw(File &f)C;
  42. Bool loadRaw(File &f) ;
  43. #if EE_PRIVATE
  44. void moveElmLeftUnsafe(Int elm, Int new_index, Ptr temp);
  45. void copyTo ( Ptr dest)C;
  46. void copyFrom(CPtr src ) ;
  47. Bool _saveRaw(File &f)C;
  48. Bool _loadRaw(File &f) ;
  49. #endif
  50. ~_Memc() {del();}
  51. private:
  52. Int _elms;
  53. UInt _elm_size, _max_elms;
  54. Ptr _data;
  55. void (*_new)(Ptr elm),
  56. (*_del)(Ptr elm);
  57. explicit _Memc(Int elm_size, void (*_new)(Ptr elm), void (*_del)(Ptr elm));
  58. void _reset(Int elm_size, void (*_new)(Ptr elm), void (*_del)(Ptr elm));
  59. NO_COPY_CONSTRUCTOR(_Memc);
  60. T1(TYPE) friend struct Memc;
  61. T1(TYPE) friend struct MemcAbstract;
  62. friend struct _MemcThreadSafe;
  63. };
  64. /******************************************************************************/