diff options
| author | Markus Mittendrein <git@maxmitti.tk> | 2019-04-20 01:54:54 +0200 |
|---|---|---|
| committer | Markus Mittendrein <git@maxmitti.tk> | 2019-04-20 02:43:37 +0200 |
| commit | 43931c7e187bda85e2be12bccb14bd826a6c34c0 (patch) | |
| tree | 1987ad09d84049a87bbf482af7569b0f93e7d5fe /examples | |
| parent | 712a61956cdd0e2e2907fb730b6dde9b5cc3524a (diff) | |
| download | cc4group-43931c7e187bda85e2be12bccb14bd826a6c34c0.tar.gz cc4group-43931c7e187bda85e2be12bccb14bd826a6c34c0.zip | |
Add custom memory management strategies to cppc4group
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/cppc4group_memorymanagement.cpp | 51 |
1 files changed, 51 insertions, 0 deletions
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 <string_view> +#include <cstring> +#include <iostream> + +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<char*>(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 |
