_Memb.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /******************************************************************************/
  2. struct _Memb // Block Based Container Base - Do not use this class, use 'Memb' instead
  3. {
  4. void del ();
  5. void clear();
  6. Int elms ()C {return _elms ;}
  7. UInt elmSize ()C {return _elm_size ;}
  8. UInt blockElms ()C {return _block_elms;}
  9. UInt blockSize ()C {return _block_elms*_elm_size;}
  10. UInt memUsage()C {return _blocks*blockSize();}
  11. Ptr addr (Int i)C {return InRange(i, _elms) ? _element(i) : null;}
  12. Ptr operator[](Int i)C { RANGE_ASSERT(i, _elms); return _element(i);}
  13. Ptr operator()(Int i);
  14. Ptr first ( )C {return T[0 ];}
  15. Ptr last ( )C {return T[elms()-1 ];}
  16. Ptr New ( ) {return T[addNum(1)];}
  17. Ptr NewAt (Int i);
  18. Int index (CPtr elm)C;
  19. Bool contains(CPtr elm)C {return index(elm)>=0;}
  20. void removeLast();
  21. void remove (Int i , Bool keep_order=false);
  22. void removeData(CPtr elm, Bool keep_order=false);
  23. void setNum (Int num);
  24. void setNumZero(Int num);
  25. Int addNum (Int num);
  26. void reverseOrder();
  27. void swapOrder(Int i , Int j);
  28. void moveElm(Int elm, Int new_index);
  29. Bool saveRaw(File &f)C;
  30. Bool loadRaw(File &f) ;
  31. #if EE_PRIVATE
  32. UInt mask()C {return _block_elms-1;} // '_block_elms' is always a power of 2, so -1 can be used as an index mask for all elements in a block
  33. void moveElmLeftUnsafe(Int elm, Int new_index, Ptr temp);
  34. void copyTo ( Ptr dest)C;
  35. void copyFrom(CPtr src ) ;
  36. void reset ( ) ;
  37. #endif
  38. ~_Memb() {del();}
  39. private:
  40. Int _elms;
  41. UInt _elm_size, _block_elms, _blocks, _shr;
  42. Ptr *_ptr;
  43. void (*_new)(Ptr elm),
  44. (*_del)(Ptr elm);
  45. Ptr _element(Int i)C;
  46. explicit _Memb(Int elm_size, Int block_elms, void (*_new)(Ptr elm), void (*_del)(Ptr elm));
  47. void _reset(Int elm_size, Int block_elms, void (*_new)(Ptr elm), void (*_del)(Ptr elm));
  48. NO_COPY_CONSTRUCTOR(_Memb);
  49. T1(TYPE) friend struct Memb;
  50. T1(TYPE) friend struct MembAbstract;
  51. friend struct _Memx;
  52. };
  53. /******************************************************************************/