From 04653742243e4bb6452108cfd0fef2f4afd8f23b Mon Sep 17 00:00:00 2001 From: rtk0c Date: Mon, 6 Sep 2021 00:15:35 -0700 Subject: Fix all compile errors, remove OperateIOProxy requirement from DataStream api --- core/src/Model/Assets.cpp | 21 +++++--- core/src/Model/Assets.hpp | 4 +- core/src/Model/Template/TableTemplate.cpp | 84 +++++++++++++++++++------------ core/src/Model/Template/TableTemplate.hpp | 15 +++--- core/src/Model/Template/Template.hpp | 2 +- core/src/Model/Template/Template_Main.cpp | 32 ++++-------- core/src/Utils/IO/Archive.cpp | 5 ++ core/src/Utils/IO/Archive.hpp | 4 ++ core/src/Utils/IO/DataStream.hpp | 70 +++++++------------------- core/src/Utils/IO/Helper.hpp | 43 ++++++++++++++++ core/src/Utils/IO/StringIntegration.hpp | 18 +++---- core/src/Utils/IO/TslArrayIntegration.hpp | 26 ++++------ core/src/Utils/IO/TslRobinIntegration.hpp | 54 ++++++-------------- core/src/Utils/IO/UuidIntegration.hpp | 8 +-- core/src/Utils/IO/VectorIntegration.hpp | 21 +++----- core/src/Utils/Vector.hpp | 50 ++++++++++++------ 16 files changed, 233 insertions(+), 224 deletions(-) create mode 100644 core/src/Utils/IO/Helper.hpp (limited to 'core') diff --git a/core/src/Model/Assets.cpp b/core/src/Model/Assets.cpp index 80c2fa4..40f300e 100644 --- a/core/src/Model/Assets.cpp +++ b/core/src/Model/Assets.cpp @@ -16,21 +16,26 @@ using namespace std::literals::string_view_literals; namespace fs = std::filesystem; -template -void SavedAsset::OperateIOProxy(TProxy& proxy) +template +void OperateStreamForSavedAsset(TSavedAsset& cell, TStream& proxy) { - proxy.template ObjectAdapted(Name); - proxy.template ObjectAdapted(Uuid); - proxy.Value(Payload); + proxy.template ObjectAdapted(cell.Name); + proxy.template ObjectAdapted(cell.Uuid); + proxy.Value(cell.Payload); } -template void SavedAsset::OperateIOProxy(InputDataStream& adapter); -template void SavedAsset::OperateIOProxy(OutputDataStream& adapter); +void SavedAsset::ReadFromDataStream(InputDataStream& stream) +{ + ::OperateStreamForSavedAsset(*this, stream); +} -Asset::Asset() +void SavedAsset::WriteToDataStream(OutputDataStream& stream) const { + ::OperateStreamForSavedAsset(*this, stream); } +Asset::Asset() = default; + class AssetList::Private { public: diff --git a/core/src/Model/Assets.hpp b/core/src/Model/Assets.hpp index 3b38dff..3d90d3f 100644 --- a/core/src/Model/Assets.hpp +++ b/core/src/Model/Assets.hpp @@ -20,8 +20,8 @@ struct SavedAsset /// Extra data to be used by the AssetList/Asset implementation. uint64_t Payload; - template - void OperateIOProxy(TProxy& proxy); + void ReadFromDataStream(InputDataStream& stream); + void WriteToDataStream(OutputDataStream& stream) const; }; class Asset diff --git a/core/src/Model/Template/TableTemplate.cpp b/core/src/Model/Template/TableTemplate.cpp index a5745c7..16cd333 100644 --- a/core/src/Model/Template/TableTemplate.cpp +++ b/core/src/Model/Template/TableTemplate.cpp @@ -27,22 +27,29 @@ bool TableCell::IsMergedCell() const return PrimaryCellLocation.x == -1 || PrimaryCellLocation.y == -1; } -template -void TableCell::OperateIOProxy(TProxy& proxy) +template +void OperateStreamForTableCell(TTableCell& cell, TStream& proxy) { - proxy.template ObjectAdapted(Content); - proxy.Object(Location); - proxy.Object(PrimaryCellLocation); - proxy.Value(SpanX); - proxy.Value(SpanY); - proxy.Value(HorizontalAlignment); - proxy.Value(VerticalAlignment); - proxy.Value(Type); - proxy.Value(DataId); + proxy.template ObjectAdapted(cell.Content); + proxy.Object(cell.Location); + proxy.Object(cell.PrimaryCellLocation); + proxy.Value(cell.SpanX); + proxy.Value(cell.SpanY); + proxy.Enum(cell.HorizontalAlignment); + proxy.Enum(cell.VerticalAlignment); + proxy.Enum(cell.Type); + proxy.Value(cell.DataId); } -template void TableCell::OperateIOProxy(InputDataStream& adapter); -template void TableCell::OperateIOProxy(OutputDataStream& adapter); +void TableCell::ReadFromDataStream(InputDataStream& stream) +{ + ::OperateStreamForTableCell(*this, stream); +} + +void TableCell::WriteToDataStream(OutputDataStream& stream) const +{ + ::OperateStreamForTableCell(*this, stream); +} Vec2i TableArrayGroup::GetLeftCell() const { @@ -86,16 +93,23 @@ bool TableArrayGroup::UpdateCellName(std::string_view oldName, std::string_view return ::UpdateElementName(mName2Cell, oldName, newName); } -template -void TableArrayGroup::OperateIOProxy(TProxy& proxy) +template +void OperateStreamForTableArrayGroup(TTableArrayGroup& group, TStream& stream) +{ + stream.Value(group.Row); + stream.Value(group.LeftCell); + stream.Value(group.RightCell); +} + +void TableArrayGroup::ReadFromDataStream(InputDataStream& stream) { - proxy.Value(Row); - proxy.Value(LeftCell); - proxy.Value(RightCell); + ::OperateStreamForTableArrayGroup(*this, stream); } -template void TableArrayGroup::OperateIOProxy(InputDataStream& adapter); -template void TableArrayGroup::OperateIOProxy(OutputDataStream& adapter); +void TableArrayGroup::WriteToDataStream(OutputDataStream& stream) const +{ + ::OperateStreamForTableArrayGroup(*this, stream); +} TableInstantiationParameters::TableInstantiationParameters(const TableTemplate& table) : mTable{ &table } @@ -549,23 +563,27 @@ lxw_worksheet* TableTemplate::InstantiateToExcelWorksheet(lxw_workbook* workbook return worksheet; } -void TableTemplate::ReadFromDataStream(InputDataStream& stream) +class TableTemplate::Private { - OperateIOProxy(stream); -} +public: + template + static void OperateStream(TTableTemplate& table, TProxy& proxy) + { + proxy.template ObjectAdapted>(table.mColumnWidths); + proxy.template ObjectAdapted>(table.mRowHeights); + proxy.template ObjectAdapted>(table.mCells); + proxy.template ObjectAdapted>(table.mArrayGroups); + proxy.template ObjectAdapted>(table.mName2Parameters); + proxy.template ObjectAdapted>(table.mName2ArrayGroups); + } +}; -void TableTemplate::WriteToDataStream(OutputDataStream& stream) +void TableTemplate::ReadFromDataStream(InputDataStream& stream) { - OperateIOProxy(stream); + Private::OperateStream(*this, stream); } -template -void TableTemplate::OperateIOProxy(TProxy& proxy) +void TableTemplate::WriteToDataStream(OutputDataStream& stream) const { - proxy.template ObjectAdapted>(mColumnWidths); - proxy.template ObjectAdapted>(mRowHeights); - proxy.template ObjectAdapted>(mCells); - proxy.template ObjectAdapted>(mArrayGroups); - proxy.template ObjectAdapted>(mName2Parameters); - proxy.template ObjectAdapted>(mName2ArrayGroups); + Private::OperateStream(*this, stream); } diff --git a/core/src/Model/Template/TableTemplate.hpp b/core/src/Model/Template/TableTemplate.hpp index c6617b0..8771867 100644 --- a/core/src/Model/Template/TableTemplate.hpp +++ b/core/src/Model/Template/TableTemplate.hpp @@ -54,8 +54,8 @@ public: /// Return whether this cell is a part of a merged range or not. Includes the primary cell. bool IsMergedCell() const; - template - void OperateIOProxy(TProxy& proxy); + void ReadFromDataStream(InputDataStream& stream); + void WriteToDataStream(OutputDataStream& stream) const; }; // TODO support reverse (bottom to top) filling order @@ -109,8 +109,8 @@ public: Vec2i FindCell(std::string_view name); bool UpdateCellName(std::string_view oldName, std::string_view newName); - template - void OperateIOProxy(TProxy& proxy); + void ReadFromDataStream(InputDataStream& stream); + void WriteToDataStream(OutputDataStream& stream) const; }; // Forward declaration of libxlsxwriter structs @@ -148,6 +148,7 @@ class TableTemplate : public Template { friend class TableSingleParamsIter; friend class TableArrayGroupsIter; + class Private; private: /// Map from parameter name to index of the parameter cell (stored in mCells). @@ -218,9 +219,5 @@ public: lxw_worksheet* InstantiateToExcelWorksheet(lxw_workbook* workbook, const TableInstantiationParameters& params) const; void ReadFromDataStream(InputDataStream& stream) override; - void WriteToDataStream(OutputDataStream& stream) override; - -private: - template - void OperateIOProxy(TProxy& proxy); + void WriteToDataStream(OutputDataStream& stream) const override; }; diff --git a/core/src/Model/Template/Template.hpp b/core/src/Model/Template/Template.hpp index c6b93e2..061cc07 100644 --- a/core/src/Model/Template/Template.hpp +++ b/core/src/Model/Template/Template.hpp @@ -36,7 +36,7 @@ public: Kind GetKind() const; virtual void ReadFromDataStream(InputDataStream& stream) = 0; - virtual void WriteToDataStream(OutputDataStream& stream) = 0; + virtual void WriteToDataStream(OutputDataStream& stream) const = 0; }; class TemplateAssetList final : public AssetListTyped