From a2938c83841dd9529f0f453c8f346f8802dbc483 Mon Sep 17 00:00:00 2001 From: Malin E Date: Fri, 5 Aug 2022 15:12:43 +0200 Subject: [PATCH] Update label file cache format --- .../space/rendering/renderableconstellation.cpp | 11 ++++++++++- modules/space/speckloader.cpp | 16 +++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/modules/space/rendering/renderableconstellation.cpp b/modules/space/rendering/renderableconstellation.cpp index 6e0c2936dd..14d6903b3a 100644 --- a/modules/space/rendering/renderableconstellation.cpp +++ b/modules/space/rendering/renderableconstellation.cpp @@ -305,7 +305,16 @@ void RenderableConstellation::initialize() { for (speck::Labelset::Entry& entry : _labelset.entries) { if (!entry.identifier.empty()) { - entry.text = _constellationNamesTranslation.at(entry.identifier); + try { + entry.text = _constellationNamesTranslation.at(entry.identifier); + } + catch (const std::out_of_range&) { + std::string message = fmt::format( + "Identifier '{}' could not be found in list of constellations", + entry.identifier + ); + throw ghoul::RuntimeError(message, "RenderableConstellation"); + } } } } diff --git a/modules/space/speckloader.cpp b/modules/space/speckloader.cpp index 4462c8f688..889be4b38e 100644 --- a/modules/space/speckloader.cpp +++ b/modules/space/speckloader.cpp @@ -37,7 +37,7 @@ namespace { constexpr int8_t DataCacheFileVersion = 10; - constexpr int8_t LabelCacheFileVersion = 10; + constexpr int8_t LabelCacheFileVersion = 11; constexpr int8_t ColorCacheFileVersion = 10; bool startsWith(std::string lhs, std::string_view rhs) noexcept { @@ -741,6 +741,13 @@ std::optional loadCachedFile(std::filesystem::path path) { file.read(reinterpret_cast(&e.position.y), sizeof(float)); file.read(reinterpret_cast(&e.position.z), sizeof(float)); + // Identifier + uint8_t idLen; + file.read(reinterpret_cast(&idLen), sizeof(uint8_t)); + e.identifier.resize(idLen); + file.read(e.identifier.data(), idLen); + + // Text uint16_t len; file.read(reinterpret_cast(&len), sizeof(uint16_t)); e.text.resize(len); @@ -773,6 +780,13 @@ void saveCachedFile(const Labelset& labelset, std::filesystem::path path) { file.write(reinterpret_cast(&e.position.y), sizeof(float)); file.write(reinterpret_cast(&e.position.z), sizeof(float)); + // Identifier + checkSize(e.identifier.size(), "Identifier too long"); + uint8_t idLen = static_cast(e.identifier.size()); + file.write(reinterpret_cast(&idLen), sizeof(uint8_t)); + file.write(e.identifier.data(), idLen); + + // Text checkSize(e.text.size(), "Text too long"); uint16_t len = static_cast(e.text.size()); file.write(reinterpret_cast(&len), sizeof(uint16_t));