From 4e99dc1c02eb69b906325c8f0146455061e8c14e Mon Sep 17 00:00:00 2001 From: Zandor Smith <info@zsinfo.nl> Date: Wed, 20 Feb 2019 11:46:06 +0100 Subject: [PATCH] Add Redoable, Undoable, UndoRedoValue, Location2D. --- HelloTemplate.vcxproj | 7 +++++++ HelloTemplate.vcxproj.filters | 17 +++++++++++++++++ Location2D.h | 20 ++++++++++++++++++++ RedoableValue.h | 17 +++++++++++++++++ UndoRedoValue.h | 31 +++++++++++++++++++++++++++++++ UndoableValue.h | 17 +++++++++++++++++ main.cpp | 19 +++++++++++++++++++ 7 files changed, 128 insertions(+) create mode 100644 Location2D.h create mode 100644 RedoableValue.h create mode 100644 UndoRedoValue.h create mode 100644 UndoableValue.h diff --git a/HelloTemplate.vcxproj b/HelloTemplate.vcxproj index a7db817..acdd3da 100644 --- a/HelloTemplate.vcxproj +++ b/HelloTemplate.vcxproj @@ -117,6 +117,13 @@ <ItemGroup> <ClCompile Include="main.cpp" /> </ItemGroup> + <ItemGroup> + <ClInclude Include="Location2D.h" /> + <ClInclude Include="Pair.h" /> + <ClInclude Include="RedoableValue.h" /> + <ClInclude Include="UndoableValue.h" /> + <ClInclude Include="UndoRedoValue.h" /> + </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> </ImportGroup> diff --git a/HelloTemplate.vcxproj.filters b/HelloTemplate.vcxproj.filters index a91ad0e..775520f 100644 --- a/HelloTemplate.vcxproj.filters +++ b/HelloTemplate.vcxproj.filters @@ -19,4 +19,21 @@ <Filter>Source Files</Filter> </ClCompile> </ItemGroup> + <ItemGroup> + <ClInclude Include="Pair.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="Location2D.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="RedoableValue.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="UndoableValue.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="UndoRedoValue.h"> + <Filter>Header Files</Filter> + </ClInclude> + </ItemGroup> </Project> \ No newline at end of file diff --git a/Location2D.h b/Location2D.h new file mode 100644 index 0000000..c8a7959 --- /dev/null +++ b/Location2D.h @@ -0,0 +1,20 @@ +#pragma once +#include "UndoRedoValue.h" + +template<typename valueType> +struct Location2D +{ + Location2D(valueType x, valueType y) + { + this->x = UndoRedoValue<valueType>(x); + this->y = UndoRedoValue<valueType>(y); + } + + UndoRedoValue<valueType> x = NULL; + UndoRedoValue<valueType> y = NULL; + + void print() + { + printf((std::string("(") + std::to_string(x.value) + std::string(" ") + std::to_string(y.value) + std::string(")")).c_str()); + } +}; diff --git a/RedoableValue.h b/RedoableValue.h new file mode 100644 index 0000000..d979f4a --- /dev/null +++ b/RedoableValue.h @@ -0,0 +1,17 @@ +#pragma once + +template<typename valueType> +struct RedoableValue +{ + void updateRedoableValue(valueType& valueToSet, valueType value) + { + this->lastSet = value; + } + + void redoSet(valueType& valueToSet) + { + valueToSet = this->lastSet; + } + + valueType lastSet; +}; \ No newline at end of file diff --git a/UndoRedoValue.h b/UndoRedoValue.h new file mode 100644 index 0000000..c2b60e4 --- /dev/null +++ b/UndoRedoValue.h @@ -0,0 +1,31 @@ +#pragma once +#include "UndoableValue.h" +#include "RedoableValue.h" + +template<typename valueType> +struct UndoRedoValue : UndoableValue<valueType>, RedoableValue<valueType> +{ + UndoRedoValue(valueType startingValue) + { + this->value = startingValue; + } + + void setValue(valueType value) + { + this->updateUndoableValue(this->value, value); + this->value = value; + this->updateRedoableValue(this->value, value); + } + + void redoSet() + { + this->RedoableValue<valueType>::redoSet(this->value); + } + + void undoSet() + { + this->UndoableValue<valueType>::undoSet(this->value); + } + + valueType value; +}; diff --git a/UndoableValue.h b/UndoableValue.h new file mode 100644 index 0000000..5ccd654 --- /dev/null +++ b/UndoableValue.h @@ -0,0 +1,17 @@ +#pragma once + +template<typename valueType> +struct UndoableValue +{ + void updateUndoableValue(valueType& valueToSet, valueType value) + { + this->previousValue = valueToSet; + } + + void undoSet(valueType& valueToSet) + { + valueToSet = this->previousValue; + } + + valueType previousValue; +}; \ No newline at end of file diff --git a/main.cpp b/main.cpp index bfc11bd..e522b30 100644 --- a/main.cpp +++ b/main.cpp @@ -1,5 +1,6 @@ #include <vector> #include <string> +#include "Location2D.h" template<typename vectorType> bool inVector(const std::vector<vectorType>& haystack, const vectorType& needle) @@ -50,6 +51,24 @@ int main() // ============== + // TODO: Add test for Pair. + + // ============== + + { + Location2D<int> location = Location2D<int>(10, 20); + + location.print(); + location.y.setValue(10); + location.print(); + location.y.undoSet(); + location.print(); + location.y.redoSet(); + location.print(); + } + + // ============== + while(true) {} return 0; -- GitLab