summaryrefslogtreecommitdiffstats
path: root/examples/cppc4group_memorymanagement.cpp
blob: 931911012fb7f1ee694fb9d832a5cdc1d8ec641c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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.saveAs("cppc4group_memorymanagement.c4d")) || (std::cerr << g.getErrorMessage() << '\n', true);
	return 0;
}