From 43931c7e187bda85e2be12bccb14bd826a6c34c0 Mon Sep 17 00:00:00 2001 From: Markus Mittendrein Date: Sat, 20 Apr 2019 01:54:54 +0200 Subject: Add custom memory management strategies to cppc4group --- examples/cppc4group_memorymanagement.cpp | 51 ++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 examples/cppc4group_memorymanagement.cpp (limited to 'examples') diff --git a/examples/cppc4group_memorymanagement.cpp b/examples/cppc4group_memorymanagement.cpp new file mode 100644 index 0000000..b29adae --- /dev/null +++ b/examples/cppc4group_memorymanagement.cpp @@ -0,0 +1,51 @@ +#include "cppc4group.hpp" +#include +#include +#include + +using namespace std::literals; + +int main() +{ + CppC4Group g; + g.create(); + + constexpr auto takeContents = "This is only some dummy text for testing."sv; + void* takeData = malloc(takeContents.size()); + memcpy(takeData, takeContents.data(), takeContents.size()); + + auto takeContentsString = new std::string{takeContents}; + + (g.create() && + g.createFile("Take") && + g.createFile("Reference") && + g.createFile("Copy") && + g.createFile("Custom") && + g.createFile("CustomNoOpStart") && + + + g.setEntryData("Take", takeData, takeContents.size(), CppC4Group::MemoryManagement::Take) && + g.setEntryData("Reference", takeContents.data(), takeContents.size(), CppC4Group::MemoryManagement::Reference) && + g.setEntryData("Copy", takeContents.data(), takeContents.size(), CppC4Group::MemoryManagement::Copy) && + g.setEntryData("Custom", takeContents.data(), takeContents.size(), { + [](void* const data, size_t const size) -> void* + { + auto retData = new char[size]; + memcpy(retData, data, size); + return retData; + }, + [](void* const data) + { + delete [] reinterpret_cast(data); + } + }) && + g.setEntryData("CustomNoOpStart", takeContentsString->data(), takeContentsString->size(), {CppC4Group::MemoryManagement::NoOpStart, + [takeContentsString](void* const) + { + delete takeContentsString; + } + }) && + + g.save("cppc4group_memorymanagement.c4d")) || (std::cerr << g.getErrorMessage() << '\n', true); + return 0; +} \ No newline at end of file -- cgit v1.2.3-54-g00ecf