DataCache.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #ifndef _DATA_CACHE_
  2. #define _DATA_CACHE_
  3. #include "..\system\datasource\datasource.h"
  4. #include "..\..\Common_h\FileService.h"
  5. #include "..\..\common_h\templates.h"
  6. class IParticleManager;
  7. class DataCacheGlobal : public Object
  8. {
  9. string NameWithExt;
  10. IFileService* pFS;
  11. struct LoadedDataSource
  12. {
  13. dword dwStringHash;
  14. string FileName;
  15. DataSource* pData;
  16. void* pBuffer;
  17. LoadedDataSource ()
  18. {
  19. dwStringHash = 0x0;
  20. pBuffer = NULL;
  21. pData = NULL;
  22. }
  23. };
  24. array<LoadedDataSource> Cache;
  25. void CreateDataSource (void* pBuffer, DWORD BufferSize, const char* SourceFileName);
  26. #ifndef _XBOX
  27. void CreateDataSourceXML (const char* SourceFileName, const char* id_name);
  28. #endif
  29. public:
  30. //Конструктор/деструктор
  31. DataCacheGlobal ();
  32. ~DataCacheGlobal ();
  33. //Положить в кэш данные для системы
  34. void CacheSystem (const char* FileName);
  35. #ifndef _XBOX
  36. //Положить в кэш данные для системы
  37. void CacheSystemXML (const char* FileName);
  38. #endif
  39. //Сбросить кэш
  40. void ResetCache ();
  41. //Получить указатель на данные для системы партиклов
  42. __forceinline DataSource* GetParticleSystemDataSource (const char* FileName)
  43. {
  44. NameWithExt = FileName;
  45. NameWithExt.AddExtention(".xps");
  46. dword dwSearchHash = string::HashNoCase(NameWithExt);
  47. for (int n = 0; n < Cache; n++)
  48. {
  49. if (Cache[n].dwStringHash == dwSearchHash)
  50. {
  51. if (Cache[n].FileName == NameWithExt)
  52. {
  53. return Cache[n].pData;
  54. }
  55. }
  56. }
  57. return NULL;
  58. }
  59. //Проверить указатель на валидность
  60. bool ValidatePointer (DataSource* pData);
  61. DWORD GetCachedCount ();
  62. const char* GetCachedNameByIndex (DWORD Index);
  63. void NewForceFieldRegistred();
  64. };
  65. #endif