From adf54b8a38c47737c45ed08e13bcef7bebb66283 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Mon, 15 Apr 2024 12:16:04 +0300 Subject: [PATCH] clang warnings fix + minor refactor --- src/assets/assetload_funcs.cpp | 2 +- src/files/WorldConverter.cpp | 2 +- src/files/WorldFiles.cpp | 22 ---------- src/files/WorldFiles.h | 1 - src/files/WorldRegions.cpp | 61 ++++++++++++++++++---------- src/files/WorldRegions.h | 10 +++++ src/frontend/ContentGfxCache.h | 2 +- src/graphics/render/BlocksRenderer.h | 2 +- 8 files changed, 53 insertions(+), 49 deletions(-) diff --git a/src/assets/assetload_funcs.cpp b/src/assets/assetload_funcs.cpp index 57679410..e6f5b8f3 100644 --- a/src/assets/assetload_funcs.cpp +++ b/src/assets/assetload_funcs.cpp @@ -120,7 +120,7 @@ assetload::postfunc assetload::font( for (size_t i = 0; i <= 4; i++) { std::string name = filename + "_" + std::to_string(i) + ".png"; name = paths->find(name).string(); - pages->push_back(std::move(imageio::read(name))); + pages->push_back(imageio::read(name)); } return [=](auto assets) { int res = pages->at(0)->getHeight() / 16; diff --git a/src/files/WorldConverter.cpp b/src/files/WorldConverter.cpp index b3c737fc..045faf4e 100644 --- a/src/files/WorldConverter.cpp +++ b/src/files/WorldConverter.cpp @@ -41,7 +41,7 @@ WorldConverter::~WorldConverter() { void WorldConverter::convertRegion(fs::path file) { int x, z; std::string name = file.stem().string(); - if (!WorldFiles::parseRegionFilename(name, x, z)) { + if (!WorldRegions::parseRegionFilename(name, x, z)) { logger.error() << "could not parse name " << name; return; } diff --git a/src/files/WorldFiles.cpp b/src/files/WorldFiles.cpp index a485b725..997821a0 100644 --- a/src/files/WorldFiles.cpp +++ b/src/files/WorldFiles.cpp @@ -29,8 +29,6 @@ #define WORLD_FORMAT_MAGIC ".VOXWLD" -const size_t BUFFER_SIZE_UNKNOWN = -1; - WorldFiles::WorldFiles(fs::path directory) : directory(directory), regions(directory) { } @@ -51,26 +49,6 @@ void WorldFiles::createDirectories() { fs::create_directories(directory / fs::path("content")); } -/// @brief 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) { - size_t sep = name.find('_'); - if (sep == std::string::npos || sep == 0 || sep == name.length()-1) - return false; - try { - x = std::stoi(name.substr(0, sep)); - z = std::stoi(name.substr(sep+1)); - } catch (std::invalid_argument& err) { - return false; - } catch (std::out_of_range& err) { - return false; - } - return true; -} - fs::path WorldFiles::getPlayerFile() const { return directory/fs::path("player.json"); } diff --git a/src/files/WorldFiles.h b/src/files/WorldFiles.h index 7ef7e1e6..70db605c 100644 --- a/src/files/WorldFiles.h +++ b/src/files/WorldFiles.h @@ -63,7 +63,6 @@ public: fs::path getFolder() const; static const inline std::string WORLD_FILE = "world.json"; - static bool parseRegionFilename(const std::string& name, int& x, int& y); WorldRegions& getRegions() { return regions; diff --git a/src/files/WorldRegions.cpp b/src/files/WorldRegions.cpp index 111bf23e..8dfc3a57 100644 --- a/src/files/WorldRegions.cpp +++ b/src/files/WorldRegions.cpp @@ -28,6 +28,26 @@ regfile::regfile(fs::path filename) : file(filename) { } } +std::unique_ptr regfile::read(int index, uint32_t& length) { + size_t file_size = file.length(); + size_t table_offset = file_size - REGION_CHUNKS_COUNT * 4; + + uint32_t offset; + file.seekg(table_offset + index * 4); + file.read((char*)(&offset), 4); + offset = dataio::read_int32_big((const ubyte*)(&offset), 0); + if (offset == 0){ + return nullptr; + } + + file.seekg(offset); + file.read((char*)(&offset), 4); + length = dataio::read_int32_big((const ubyte*)(&offset), 0); + auto data = std::make_unique(length); + file.read((char*)data.get(), length); + return data; +} + WorldRegion::WorldRegion() { chunksData = new ubyte*[REGION_CHUNKS_COUNT]{}; sizes = new uint32_t[REGION_CHUNKS_COUNT]{}; @@ -136,31 +156,10 @@ std::unique_ptr WorldRegions::readChunkData( uint32_t& length, regfile* rfile ){ - if (generatorTestMode) - return nullptr; - int regionX, regionZ, localX, localZ; calc_reg_coords(x, z, regionX, regionZ, localX, localZ); int chunkIndex = localZ * REGION_SIZE + localX; - - files::rafile& file = rfile->file; - size_t file_size = file.length(); - size_t table_offset = file_size - REGION_CHUNKS_COUNT * 4; - - uint32_t offset; - file.seekg(table_offset + chunkIndex * 4); - file.read((char*)(&offset), 4); - offset = dataio::read_int32_big((const ubyte*)(&offset), 0); - if (offset == 0){ - return nullptr; - } - - file.seekg(offset); - file.read((char*)(&offset), 4); - length = dataio::read_int32_big((const ubyte*)(&offset), 0); - auto data = std::make_unique(length); - file.read((char*)data.get(), length); - return data; + return rfile->read(chunkIndex, length); } /// @brief Read missing chunks data (null pointers) from region file @@ -181,6 +180,9 @@ ubyte* WorldRegions::getData( int x, int z, int layer, uint32_t& size ) { + if (generatorTestMode) { + return nullptr; + } int regionX, regionZ, localX, localZ; calc_reg_coords(x, z, regionX, regionZ, localX, localZ); @@ -454,3 +456,18 @@ void WorldRegions::write() { writeRegions(layer.layer); } } + +bool WorldRegions::parseRegionFilename(const std::string& name, int& x, int& z) { + size_t sep = name.find('_'); + if (sep == std::string::npos || sep == 0 || sep == name.length()-1) + return false; + try { + x = std::stoi(name.substr(0, sep)); + z = std::stoi(name.substr(sep+1)); + } catch (std::invalid_argument& err) { + return false; + } catch (std::out_of_range& err) { + return false; + } + return true; +} diff --git a/src/files/WorldRegions.h b/src/files/WorldRegions.h index 98d7a027..65c35f6a 100644 --- a/src/files/WorldRegions.h +++ b/src/files/WorldRegions.h @@ -62,6 +62,9 @@ struct regfile { bool inUse = false; regfile(fs::path filename); + regfile(const regfile&) = delete; + + std::unique_ptr read(int index, uint32_t& length); }; using regionsmap = std::unordered_map>; @@ -150,6 +153,13 @@ public: fs::path getRegionsFolder(int layer) const; void write(); + + /// @brief 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 + static bool parseRegionFilename(const std::string& name, int& x, int& y); }; #endif // FILES_WORLD_REGIONS_H_ diff --git a/src/frontend/ContentGfxCache.h b/src/frontend/ContentGfxCache.h index c5101f99..354675e1 100644 --- a/src/frontend/ContentGfxCache.h +++ b/src/frontend/ContentGfxCache.h @@ -9,7 +9,7 @@ class Content; class Assets; class UiDocument; -class UVRegion; +struct UVRegion; using uidocuments_map = std::unordered_map>; diff --git a/src/graphics/render/BlocksRenderer.h b/src/graphics/render/BlocksRenderer.h index 5b3dfbc6..ea2c6fba 100644 --- a/src/graphics/render/BlocksRenderer.h +++ b/src/graphics/render/BlocksRenderer.h @@ -16,7 +16,7 @@ class Chunks; class VoxelsVolume; class ChunksStorage; class ContentGfxCache; -class UVRegion; +struct UVRegion; class BlocksRenderer { static const glm::vec3 SUN_VECTOR;