diff --git a/HelloTemplate.vcxproj b/HelloTemplate.vcxproj index a7db817f483ef84cc2a016216d56ffc04f415b96..acdd3da53747c92eae959f8b28c68ebbee1e62cb 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 a91ad0ed994ce7aa3420c56bf7050c66b31ad493..775520f1d7ccef8c02830fdcd31413adfbe2ce48 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 0000000000000000000000000000000000000000..c8a7959c24c0e6828d0757eee043ccfde8ec8db2 --- /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 0000000000000000000000000000000000000000..d979f4a317eefb107244e85af55ba84579566d61 --- /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 0000000000000000000000000000000000000000..c2b60e4665f46ac41fd97c34dd12815e2aeee025 --- /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 0000000000000000000000000000000000000000..5ccd654c182e65453b4b5fd94cde46988de902ee --- /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 bfc11bda9a465d2533f257dab3adeb8cf028f5bf..e522b3080df95465e66e0534b7c2e63c0bba54c2 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;