the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 128 lines 3.1 kB view raw
1#include "stdafx.h" 2#include "File.h" 3#include "RegionFileCache.h" 4#include "ConsoleSaveFileIO.h" 5 6RegionFileCache RegionFileCache::s_defaultCache; 7 8bool RegionFileCache::useSplitSaves(ESavePlatform platform) 9{ 10 switch(platform) 11 { 12 case SAVE_FILE_PLATFORM_XBONE: 13 case SAVE_FILE_PLATFORM_PS4: 14 return true; 15 default: 16 return false; 17 }; 18} 19 20RegionFile *RegionFileCache::_getRegionFile(ConsoleSaveFile *saveFile, const wstring &prefix, int chunkX, int chunkZ) // 4J - TODO was synchronized 21{ 22 // 4J Jev - changed back to use of the File class. 23 //char file[MAX_PATH_SIZE]; 24 //sprintf(file,"%s\\region\\r.%d.%d.mcr",basePath,chunkX >> 5,chunkZ >> 5); 25 26 //File regionDir(basePath, L"region"); 27 28 //File file(regionDir, wstring(L"r.") + _toString(chunkX>>5) + L"." + _toString(chunkZ>>5) + L".mcr" ); 29 MemSect(31); 30 File file; 31 if(useSplitSaves(saveFile->getSavePlatform())) 32 { 33 file = File( prefix + wstring(L"r.") + _toString(chunkX>>4) + L"." + _toString(chunkZ>>4) + L".mcr" ); 34 } 35 else 36 { 37 file = File( prefix + wstring(L"r.") + _toString(chunkX>>5) + L"." + _toString(chunkZ>>5) + L".mcr" ); 38 } 39 MemSect(0); 40 41 RegionFile *ref = NULL; 42 AUTO_VAR(it, cache.find(file)); 43 if( it != cache.end() ) 44 ref = it->second; 45 46 // 4J Jev, put back in. 47 if (ref != NULL) 48 { 49 return ref; 50 } 51 52 // 4J Stu - Remove for new save files 53 /* 54 if (!regionDir.exists()) 55 { 56 regionDir.mkdirs(); 57 } 58 */ 59 if (cache.size() >= MAX_CACHE_SIZE) 60 { 61 _clear(); 62 } 63 64 RegionFile *reg = new RegionFile(saveFile, &file); 65 cache[file] = reg; // 4J - this was originally a softReferenc 66 return reg; 67 68} 69 70void RegionFileCache::_clear() // 4J - TODO was synchronized 71{ 72 AUTO_VAR(itEnd, cache.end()); 73 for( AUTO_VAR(it, cache.begin()); it != itEnd; it++ ) 74 { 75 // 4J - removed try/catch 76// try { 77 RegionFile *regionFile = it->second; 78 if (regionFile != NULL) 79 { 80 regionFile->close(); 81 } 82 delete regionFile; 83// } catch (IOException e) { 84// e.printStackTrace(); 85// } 86 } 87 cache.clear(); 88} 89 90int RegionFileCache::_getSizeDelta(ConsoleSaveFile *saveFile, const wstring &prefix, int chunkX, int chunkZ) 91{ 92 RegionFile *r = _getRegionFile(saveFile, prefix, chunkX, chunkZ); 93 return r->getSizeDelta(); 94} 95 96DataInputStream *RegionFileCache::_getChunkDataInputStream(ConsoleSaveFile *saveFile, const wstring &prefix, int chunkX, int chunkZ) 97{ 98 RegionFile* r = _getRegionFile(saveFile, prefix, chunkX, chunkZ); 99 if(useSplitSaves(saveFile->getSavePlatform())) 100 { 101 return r->getChunkDataInputStream(chunkX & 15, chunkZ & 15); 102 } 103 else 104 { 105 106 return r->getChunkDataInputStream(chunkX & 31, chunkZ & 31); 107 } 108} 109 110DataOutputStream *RegionFileCache::_getChunkDataOutputStream(ConsoleSaveFile *saveFile, const wstring &prefix, int chunkX, int chunkZ) 111{ 112 RegionFile* r = _getRegionFile(saveFile, prefix, chunkX, chunkZ); 113 if(useSplitSaves(saveFile->getSavePlatform())) 114 { 115 return r->getChunkDataOutputStream(chunkX & 15, chunkZ & 15); 116 } 117 else 118 { 119 120 return r->getChunkDataOutputStream(chunkX & 31, chunkZ & 31); 121 } 122} 123 124 125RegionFileCache::~RegionFileCache() 126{ 127 _clear(); 128}