_Meml.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /******************************************************************************/
  2. struct _Meml // List Based Container Base - Do not use this class, use 'Meml' instead
  3. {
  4. void del ();
  5. void clear();
  6. Int elms ()C {return _elms ;}
  7. UInt elmSize ()C {return _elm_size;}
  8. UInt memUsage()C {return elms()*elmSize();}
  9. Ptr addr (Int i)C {return InRange(i, _elms) ? _element(i) : null;}
  10. Ptr operator[](Int i)C { RANGE_ASSERT(i, _elms); return _element(i);}
  11. Ptr operator()(Int i);
  12. Ptr New ( );
  13. Ptr NewAt (Int i);
  14. MemlNode* add ( );
  15. MemlNode* addZero ( );
  16. MemlNode* addBefore(MemlNode *node);
  17. MemlNode* addAfter (MemlNode *node);
  18. MemlNode* first()C {return _first;}
  19. MemlNode* last ()C {return _last ;}
  20. Int index (CPtr elm)C;
  21. Bool contains(CPtr elm)C {return index(elm)>=0;}
  22. void removeFirst( Bool keep_order=false) {remove(_first, keep_order);}
  23. void removeLast ( ) {remove(_last );}
  24. void remove (MemlNode *node, Bool keep_order=false);
  25. void removeData (CPtr elm , Bool keep_order=false);
  26. void removeIndex(Int i , Bool keep_order=false);
  27. void setNum (Int num);
  28. void setNumZero(Int num);
  29. Int addNum (Int num);
  30. void reverseOrder();
  31. void swapOrder(Int i, Int j);
  32. Bool saveRaw(File &f)C;
  33. Bool loadRaw(File &f) ;
  34. #if EE_PRIVATE
  35. void copyTo ( Ptr dest)C;
  36. void copyFrom(CPtr src ) ;
  37. #endif
  38. ~_Meml() {del();}
  39. private:
  40. MemlNode *_first, *_last;
  41. Int _elms;
  42. UInt _elm_size;
  43. void (*_new)(Ptr elm),
  44. (*_del)(Ptr elm);
  45. Ptr _element(Int i)C;
  46. explicit _Meml(Int elm_size, void (*_new)(Ptr elm), void (*_del)(Ptr elm)) {_elms=0; T._elm_size=elm_size; _first=_last=null; T._new=_new; T._del=_del;}
  47. NO_COPY_CONSTRUCTOR(_Meml);
  48. T1(TYPE) friend struct Meml;
  49. };
  50. /******************************************************************************/