_Memx.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /******************************************************************************/
  2. struct _Memx // Block Based Extended Container Base - Do not use this class, use 'Memx' instead
  3. {
  4. void del ();
  5. void clear();
  6. Int absElms ()C {return _abs.elms();}
  7. Int validElms ()C {return _valid.elms();}
  8. Int elms ()C {return _valid.elms();}
  9. UInt elmSize ()C {return _abs.elmSize()-SIZE(UInt);}
  10. UInt memUsage()C;
  11. #if EE_PRIVATE
  12. UInt maxElms ()C {return _valid.maxElms();}
  13. #endif
  14. Ptr absElm (Int i)C {return (Byte*)_abs [i]+SIZE(UInt);}
  15. Ptr validElm (Int i)C {return absElm(_valid[i]);}
  16. Ptr addr (Int i)C {return InRange(i, T) ? T[i] : null;}
  17. Ptr operator[](Int i)C {return validElm(i);}
  18. Ptr first ( )C {return validElm(0);}
  19. Ptr last ( )C {return validElm(validElms()-1);}
  20. Ptr New ( );
  21. Ptr NewAt (Int i);
  22. Int validToAbsIndex(Int valid)C;
  23. Int absToValidIndex(Int abs )C;
  24. Int validIndex (CPtr elm )C;
  25. Int absIndex (CPtr elm )C;
  26. Bool contains (CPtr elm )C {return validIndex(elm)>=0;}
  27. #if EE_PRIVATE
  28. Int absIndexFastUnsafeValid(CPtr elm)C; // fast version that doesn't do any safety checks, assumes that "elm!=null" and points exactly to the element, and it is valid (not removed)
  29. #endif
  30. void removeAbs (Int i , Bool keep_order=false);
  31. void removeValid(Int i , Bool keep_order=false);
  32. void removeData (CPtr elm, Bool keep_order=false);
  33. void removeLast ();
  34. void setNum(Int num);
  35. Int addNum(Int num);
  36. void reverseOrder();
  37. void swapOrder(Int i , Int j);
  38. void moveElm (Int elm, Int new_index);
  39. void moveToStart (Int elm);
  40. void moveToEnd (Int elm);
  41. Bool saveRaw(File &f)C;
  42. Bool loadRaw(File &f) ;
  43. #if EE_PRIVATE
  44. void moveElmLeftUnsafe(Int elm, Int new_index);
  45. void copyTo ( Ptr dest)C;
  46. void copyFrom(CPtr src ) ;
  47. void verify ()C;
  48. #endif
  49. ~_Memx() {del();}
  50. private:
  51. _Memb _abs;
  52. Memc<UInt> _valid, _invalid;
  53. void (*_new)(Ptr elm),
  54. (*_del)(Ptr elm);
  55. explicit _Memx(Int elm_size, Int block_elms, void (*_new)(Ptr elm), void (*_del)(Ptr elm));
  56. void _reset(Int elm_size, Int block_elms, void (*_new)(Ptr elm), void (*_del)(Ptr elm));
  57. NO_COPY_CONSTRUCTOR(_Memx);
  58. T1(TYPE) friend struct Memx;
  59. T1(TYPE) friend struct MemxAbstract;
  60. };
  61. /******************************************************************************/