37 std::cout <<
"\n=== Basic Container Usage ===\n";
40 auto container = std::make_shared<value_container>();
41 container->set_source(
"client_01",
"session_123");
42 container->set_target(
"server",
"main_handler");
43 container->set_message_type(
"user_data");
46 container->set(
"user_id",
static_cast<int64_t
>(12345L));
47 container->set(
"username", std::string(
"john_doe"));
48 container->set(
"balance", 1500.75);
49 container->set(
"active",
true);
51 std::cout <<
"Created container with 4 values\n";
52 std::cout <<
"Message type: " << container->message_type() <<
"\n";
53 std::cout <<
"Source: " << container->source_id() <<
":" << container->source_sub_id() <<
"\n";
54 std::cout <<
"Target: " << container->target_id() <<
":" << container->target_sub_id() <<
"\n";
57 std::string serialized = container->serialize_string(value_container::serialization_format::binary).value();
58 std::cout <<
"Serialized size: " << serialized.size() <<
" bytes\n";
62 std::cout <<
"\n=== Value Access Patterns ===\n";
64 auto container = std::make_shared<value_container>();
65 container->set_message_type(
"value_access_demo");
68 container->set(
"request_id",
static_cast<int32_t
>(789));
69 container->set(
"priority",
static_cast<int32_t
>(1));
70 container->set(
"payload", std::string(
"Important data"));
71 container->set(
"timestamp",
static_cast<int64_t
>(1672531200L));
72 container->set(
"is_urgent",
true);
75 if (
auto val = container->get(
"request_id")) {
76 if (
auto* v = std::get_if<int32_t>(&val->data)) {
77 std::cout <<
"Request ID: " << *v <<
"\n";
81 if (
auto val = container->get(
"payload")) {
82 if (
auto* v = std::get_if<std::string>(&val->data)) {
83 std::cout <<
"Payload: " << *v <<
"\n";
87 if (
auto val = container->get(
"is_urgent")) {
88 if (
auto* v = std::get_if<bool>(&val->data)) {
89 std::cout <<
"Is Urgent: " << (*v ?
"yes" :
"no") <<
"\n";
94 std::cout <<
"\nAll values in container:\n";
95 for (
const auto& val : *container) {
96 std::cout <<
" - " << val.name <<
" (type: " <<
static_cast<int>(val.type) <<
")\n";
101 std::cout <<
"\n=== Serialization Round-trip ===\n";
104 auto source = std::make_shared<value_container>();
105 source->set_source(
"sender",
"app_1");
106 source->set_target(
"receiver",
"app_2");
107 source->set_message_type(
"roundtrip_test");
109 source->set(
"int_val",
static_cast<int32_t
>(42));
110 source->set(
"double_val", 3.14159);
111 source->set(
"string_val", std::string(
"Hello, World!"));
112 source->set(
"bool_val",
true);
113 source->set(
"long_val",
static_cast<int64_t
>(9876543210L));
116 std::string serialized = source->serialize_string(value_container::serialization_format::binary).value();
117 std::cout <<
"Serialized " << source->size() <<
" values to " << serialized.size() <<
" bytes\n";
120 auto restored = std::make_shared<value_container>(serialized);
121 std::cout <<
"Restored container: " << restored->message_type() <<
"\n";
124 bool all_match =
true;
126 if (
auto val = restored->get(
"int_val")) {
127 if (
auto* v = std::get_if<int32_t>(&val->data)) {
128 if (*v != 42) all_match =
false;
132 if (
auto val = restored->get(
"string_val")) {
133 if (
auto* v = std::get_if<std::string>(&val->data)) {
134 if (*v !=
"Hello, World!") all_match =
false;
138 std::cout <<
"Round-trip verification: " << (all_match ?
"PASSED" :
"FAILED") <<
"\n";
159 std::cout <<
"\n=== Performance Comparison ===\n";
161 const int iterations = 1000;
164 auto start = std::chrono::high_resolution_clock::now();
165 for (
int i = 0; i < iterations; ++i) {
166 auto container = std::make_shared<value_container>();
167 container->set_message_type(
"perf_test");
168 container->set(
"index",
static_cast<int32_t
>(i));
169 container->set(
"data", std::string(
"test_data"));
170 std::string serialized = container->serialize_string(value_container::serialization_format::binary).value();
172 auto standard_time = std::chrono::high_resolution_clock::now() - start;
174 auto standard_ms = std::chrono::duration_cast<std::chrono::milliseconds>(standard_time).count();
175 std::cout <<
"set_value API: " << standard_ms <<
" ms for " << iterations <<
" operations\n";
177 if (standard_ms > 0) {
178 double rate = (iterations * 1000.0) / standard_ms;
179 std::cout <<
"Rate: " << std::fixed << std::setprecision(2) << rate <<
" containers/second\n";