From 684e791ba3149bf2b03e6a165a1171f29286c54d Mon Sep 17 00:00:00 2001 From: HanSY Date: Thu, 16 Jan 2025 16:35:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DFA=E6=A8=A1=E5=9E=8B=E8=AF=BB?= =?UTF-8?q?=E5=8F=96=E9=94=99=E8=AF=AF=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: HanSY --- include/id_worker.h | 2 +- include/resource_item.h | 1 + src/id_worker.cpp | 7 ++++--- src/resource_item.cpp | 11 +++++++++++ src/resource_table.cpp | 3 --- 5 files changed, 17 insertions(+), 7 deletions(-) diff --git a/include/id_worker.h b/include/id_worker.h index 3fe29e2..8e89903 100644 --- a/include/id_worker.h +++ b/include/id_worker.h @@ -33,7 +33,7 @@ public: std::vector GetHeaderId() const; int64_t GetId(ResType resType, const std::string &name) const; int64_t GetSystemId(ResType resType, const std::string &name) const; - void LoadIdFromHap(const std::map> &items); + void LoadIdFromHap(std::map> &items); private: int64_t GenerateAppId(ResType resType, const std::string &name); diff --git a/include/resource_item.h b/include/resource_item.h index 08ec82c..1cbe0a2 100644 --- a/include/resource_item.h +++ b/include/resource_item.h @@ -47,6 +47,7 @@ public: const std::vector SplitValue() const; bool IsArray() const; bool IsPair() const; + void CheckData(); ResourceItem &operator=(const ResourceItem &other); private: diff --git a/src/id_worker.cpp b/src/id_worker.cpp index 406573a..010d527 100644 --- a/src/id_worker.cpp +++ b/src/id_worker.cpp @@ -84,12 +84,13 @@ int64_t IdWorker::GetSystemId(ResType resType, const string &name) const return result->second.id; } -void IdWorker::LoadIdFromHap(const map> &items) +void IdWorker::LoadIdFromHap(map> &items) { int64_t minId = 0xffffffff; int64_t maxId = 0x01000000; - for (const auto &item : items) { - for (const auto &resourceItem : item.second) { + for (auto &item : items) { + for (auto &resourceItem : item.second) { + resourceItem.CheckData(); ids_.emplace(make_pair(resourceItem.GetResType(), resourceItem.GetName()), item.first); } minId = min(minId, item.first); diff --git a/src/resource_item.cpp b/src/resource_item.cpp index 2a1793e..b6dc464 100644 --- a/src/resource_item.cpp +++ b/src/resource_item.cpp @@ -160,6 +160,17 @@ const std::vector ResourceItem::SplitValue() const return ret; } +void ResourceItem::CheckData() +{ + int8_t data[GetDataLength()]; + for (int i = 0; i < GetDataLength(); i++) { + data[i] = GetData()[i]; + } + if (data[GetDataLength() - 1] == '\0') { + SetData(data, GetDataLength() - 1); + } +} + ResourceItem &ResourceItem::operator=(const ResourceItem &other) { if (this == &other) { diff --git a/src/resource_table.cpp b/src/resource_table.cpp index 6659c23..269d1e9 100644 --- a/src/resource_table.cpp +++ b/src/resource_table.cpp @@ -510,9 +510,6 @@ bool ResourceTable::ReadDataRecordStart(basic_istream &in, RecordItem &rec const vector &keyparams = limitKeys.find(datas.find(offset)->second.second)->second; ResourceItem resourceitem(filename, keyparams, g_resTypeMap.find(record.resType)->second); resourceitem.SetLimitKey(ResourceUtil::PaserKeyParam(keyparams)); - if (values[value_size - 1] == '\0') { - value_size--; - } resourceitem.SetData(values, value_size); resourceitem.MarkCoverable(); resInfos[record.id].push_back(resourceitem);