regioncache.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #ifndef __REGIONCACHE_H
  2. #define __REGIONCACHE_H
  3. #include <bfc/string/StringW.h>
  4. #include <tataki/region/region.h>
  5. #include <bfc/ptrlist.h>
  6. class CacheRegionServer : public RegionServerI {
  7. public:
  8. CacheRegionServer(api_region *r) {
  9. reg = new RegionI(r->getOSHandle());
  10. }
  11. ~CacheRegionServer() {
  12. delete reg;
  13. }
  14. virtual api_region *getRegion() {
  15. return reg;
  16. }
  17. private:
  18. RegionI *reg;
  19. };
  20. struct RegionCacheItem {
  21. RegionCacheItem(const wchar_t *filename) : region(NULL) { }
  22. virtual ~RegionCacheItem() { }
  23. StringW filename;
  24. CacheRegionServer *region;
  25. };
  26. class SortRegionCacheItem {
  27. public:
  28. static int compareItem(RegionCacheItem *p1, RegionCacheItem *p2) {
  29. return WCSICMP(p1->filename, p2->filename);
  30. }
  31. static int compareAttrib(const wchar_t *attrib, RegionCacheItem *item) {
  32. return WCSICMP(attrib, item->filename);
  33. }
  34. };
  35. class RegionCache {
  36. public:
  37. static RegionServer *requestSkinRegion(const wchar_t *id);
  38. static void cacheSkinRegion(const wchar_t *id, api_region *r);
  39. static PtrListQuickSorted<RegionCacheItem, SortRegionCacheItem> cache;
  40. static int getNumCaches() { return cache.getNumItems(); }
  41. };
  42. #endif