the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
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}