aboutsummaryrefslogtreecommitdiff
path: root/src/example/proxy.cpp
blob: ca68d9af8b6f4d63f36bc94563221421db377a53 (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
/** \file
 * 
 * Standalone example for usage of the proxy type
 */

#include <crepe/ValueBroker.h>
#include <crepe/api/Config.h>
#include <crepe/util/Proxy.h>
#include <crepe/util/Log.h>

using namespace std;
using namespace crepe;

void test_ro_ref(const int & val) {}
void test_rw_ref(int & val) {}
void test_ro_val(int val) {}

int main() {
	auto & cfg = Config::get_instance();
	cfg.log.level = Log::Level::DEBUG;

	int real_value = 0;

	ValueBroker<int> broker{
		[&real_value](const int & target) {
			dbg_logf("set {} to {}", real_value, target);
			real_value = target;
		},
		[&real_value]() -> const int & {
			dbg_logf("get {}", real_value);
			return real_value;
		},
	};

	Proxy<int> proxy{broker};

	broker.set(54);
	proxy = 84;

	test_ro_ref(proxy); // this is allowed
	// test_rw_ref(proxy); // this should throw a compile error
	test_ro_val(proxy);

	return 0;
}