_Cache.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /******************************************************************************/
  2. struct _Cache // Cache (base) - Do not use this class, use 'Cache' instead
  3. {
  4. struct Desc
  5. {
  6. Str file; // file name
  7. UInt flag, ptr_num;
  8. };
  9. struct Elm
  10. {
  11. };
  12. Int elms()C {return _elms;}
  13. void lock()C;
  14. void unlock()C;
  15. ~_Cache() {del();}
  16. private:
  17. struct DelayRemove
  18. {
  19. Flt time;
  20. Elm *elm;
  21. };
  22. mutable Byte _d_lock;
  23. Bool _case_sensitive;
  24. Byte _mode;
  25. Int _elms, /*_data_offset, */_desc_offset, _delay_remove_counter;
  26. Flt _delay_remove_time;
  27. Dbl _delay_remove_check;
  28. CChar8 *_debug_name;
  29. Elm **_order;
  30. Memx<Elm> _memx;
  31. Memc<DelayRemove> _delay_remove;
  32. SyncLock _lock;
  33. Ptr _user;
  34. Bool (*_load )( Ptr data, C Str &file);
  35. Bool (*_load_user )( Ptr data, C Str &file, Ptr user);
  36. Bool (*_can_be_removed)(CPtr data);
  37. void clear ();
  38. void del ();
  39. Byte mode (Byte mode);
  40. void caseSensitive (Bool sensitive);
  41. void delayRemove (Flt time);
  42. void delayRemoveNow();
  43. void delayRemoveInc();
  44. void delayRemoveDec();
  45. void update ();
  46. void setLoadUser(Bool (*load_user)(Ptr data, C Str &file, Ptr user), Ptr user);
  47. #if EE_PRIVATE
  48. void processDelayRemove(Bool always);
  49. Desc& elmDesc( Elm &elm ) {return *(Desc*)((Byte*)&elm+_desc_offset);}
  50. C Desc& elmDesc(C Elm &elm )C {return *(Desc*)((Byte*)&elm+_desc_offset);}
  51. Ptr elmData( Elm &elm ) {return (Byte*)&elm/*+_data_offset*/ ;} // assumes that '_data_offset' is zero
  52. CPtr elmData(C Elm &elm )C {return (Byte*)&elm/*+_data_offset*/ ;} // assumes that '_data_offset' is zero
  53. Elm* dataElm( CPtr data)C {return (Elm *)((Byte*)data/*-_data_offset*/);} // assumes that '_data_offset' is zero
  54. Elm* findExact(CChar *file, Int &stop);
  55. Elm* findElm (CChar *file, CChar *path);
  56. Int findDelayRemove( Elm &elm);
  57. Ptr validElmData( Elm &elm , Bool counted);
  58. void addToOrder( Elm &elm);
  59. void removeFromOrder( Elm &elm);
  60. Bool contains(C Elm *elm )C {return _memx. contains( elm );} // this is NOT thread-safe
  61. Int absIndex(C Elm *elm )C {return _memx. absIndex( elm );} // this is NOT thread-safe
  62. Int validIndex(C Elm *elm )C {return _memx.validIndex( elm );} // this is NOT thread-safe
  63. Int absIndex( CPtr data)C {return absIndex(dataElm(data));} // this is NOT thread-safe, assumes that '_data_offset' is zero
  64. Int validIndex( CPtr data)C {return validIndex(dataElm(data));} // this is NOT thread-safe, assumes that '_data_offset' is zero
  65. #endif
  66. Ptr _find (CChar *file, CChar *path, Bool counted);
  67. Ptr _find (C UID &id , CChar *path, Bool counted);
  68. Ptr _get (CChar *file, CChar *path, Bool counted);
  69. Ptr _get (C UID &id , CChar *path, Bool counted);
  70. Ptr _require (CChar *file, CChar *path, Bool counted);
  71. Ptr _require (C UID &id , CChar *path, Bool counted);
  72. Bool _contains (CPtr data )C;
  73. Int _ptrCount (CPtr data )C;
  74. Bool _dummy (CPtr data )C;
  75. void _dummy (CPtr data, Bool dummy );
  76. CChar* _name (CPtr data, CChar *path )C;
  77. UID _id (CPtr data )C;
  78. void _removeData(CPtr data );
  79. void _incRef(CPtr data);
  80. void _decRef(CPtr data);
  81. void _lockedFrom(C _Cache &src);
  82. C Desc& lockedDesc(Int i)C;
  83. CPtr lockedData(Int i)C;
  84. explicit _Cache(CChar8 *name, Int block_elms, Bool (*load)(Ptr data, C Str &file));
  85. NO_COPY_CONSTRUCTOR(_Cache);
  86. T1(TYPE) friend struct Cache;
  87. template<typename TYPE, Cache<TYPE> &CACHE> friend struct CacheElmPtr;
  88. };
  89. /******************************************************************************/