Added some docs

This commit is contained in:
MihailRis 2023-12-28 02:48:20 +03:00
parent d75b2641c2
commit 86ab2d8145

View File

@ -112,6 +112,11 @@ ubyte* WorldFiles::decompress(const ubyte* src, size_t srclen, size_t dstlen) {
return decompressed; return decompressed;
} }
/*
* Compress and store chunk voxels data in region
* @param x chunk.x
* @param z chunk.z
*/
void WorldFiles::put(int x, int z, const ubyte* voxelData) { void WorldFiles::put(int x, int z, const ubyte* voxelData) {
int regionX = floordiv(x, REGION_SIZE); int regionX = floordiv(x, REGION_SIZE);
int regionZ = floordiv(z, REGION_SIZE); int regionZ = floordiv(z, REGION_SIZE);
@ -127,6 +132,9 @@ void WorldFiles::put(int x, int z, const ubyte* voxelData) {
} }
} }
/*
* Store chunk (voxels and lights) in region (existing or new)
*/
void WorldFiles::put(Chunk* chunk){ void WorldFiles::put(Chunk* chunk){
assert(chunk != nullptr); assert(chunk != nullptr);
@ -168,6 +176,13 @@ fs::path WorldFiles::getRegionFilename(int x, int z) const {
return fs::path(filename); return fs::path(filename);
} }
/*
* Extract X and Z from 'X_Z.bin' region file name.
* @param name source region file name
* @param x parsed X destination
* @param z parsed Z destination
* @return false if std::invalid_argument or std::out_of_range occurred
*/
bool WorldFiles::parseRegionFilename(const std::string& name, int& x, int& z) { bool WorldFiles::parseRegionFilename(const std::string& name, int& x, int& z) {
size_t sep = name.find('_'); size_t sep = name.find('_');
if (sep == std::string::npos || sep == 0 || sep == name.length()-1) if (sep == std::string::npos || sep == 0 || sep == name.length()-1)
@ -203,6 +218,8 @@ ubyte* WorldFiles::getChunk(int x, int z){
return getData(regions, getRegionsFolder(), x, z, REGION_LAYER_VOXELS); return getData(regions, getRegionsFolder(), x, z, REGION_LAYER_VOXELS);
} }
/* Get cached lights for chunk at x,z
* @return lights data or nullptr */
light_t* WorldFiles::getLights(int x, int z) { light_t* WorldFiles::getLights(int x, int z) {
std::unique_ptr<ubyte> data (getData(lights, getLightsFolder(), x, z, REGION_LAYER_LIGHTS)); std::unique_ptr<ubyte> data (getData(lights, getLightsFolder(), x, z, REGION_LAYER_LIGHTS));
if (data == nullptr) if (data == nullptr)
@ -294,6 +311,10 @@ ubyte* WorldFiles::readChunkData(int x,
return data; return data;
} }
/* Read missing chunks data (null pointers) from region file
* @param layer used as third part of openRegFiles map key
* (see REGION_LAYER_* constants)
*/
void WorldFiles::fetchChunks(WorldRegion* region, int x, int z, fs::path folder, int layer) { void WorldFiles::fetchChunks(WorldRegion* region, int x, int z, fs::path folder, int layer) {
ubyte** chunks = region->getChunks(); ubyte** chunks = region->getChunks();
uint32_t* sizes = region->getSizes(); uint32_t* sizes = region->getSizes();
@ -307,6 +328,12 @@ void WorldFiles::fetchChunks(WorldRegion* region, int x, int z, fs::path folder,
} }
} }
/* Write or rewrite region file
* @param x region X
* @param z region Z
* @param layer used as third part of openRegFiles map key
* (see REGION_LAYER_* constants)
*/
void WorldFiles::writeRegion(int x, int z, WorldRegion* entry, fs::path folder, int layer){ void WorldFiles::writeRegion(int x, int z, WorldRegion* entry, fs::path folder, int layer){
fs::path filename = folder/getRegionFilename(x, z); fs::path filename = folder/getRegionFilename(x, z);