Container System 0.1.0
High-performance C++20 type-safe container framework with SIMD-accelerated serialization
Loading...
Searching...
No Matches
messaging_integration_example.cpp File Reference

Messaging system integration, round-trip serialization, and memory efficiency. More...

#include <iostream>
#include <vector>
#include <chrono>
#include <thread>
#include <iomanip>
#include "container.h"
Include dependency graph for messaging_integration_example.cpp:

Go to the source code of this file.

Functions

void demonstrate_basic_usage ()
 
void demonstrate_value_access ()
 
void demonstrate_serialization_roundtrip ()
 
void demonstrate_compatibility ()
 
void performance_comparison ()
 
void demonstrate_memory_efficiency ()
 
int main ()
 

Detailed Description

Messaging system integration, round-trip serialization, and memory efficiency.

Definition in file messaging_integration_example.cpp.

Function Documentation

◆ demonstrate_basic_usage()

void demonstrate_basic_usage ( )

Definition at line 36 of file messaging_integration_example.cpp.

36 {
37 std::cout << "\n=== Basic Container Usage ===\n";
38
39 // Create container using set_value API
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");
44
45 // Add values using set_value
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);
50
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";
55
56 // Serialize
57 std::string serialized = container->serialize_string(value_container::serialization_format::binary).value();
58 std::cout << "Serialized size: " << serialized.size() << " bytes\n";
59}

Referenced by main().

Here is the caller graph for this function:

◆ demonstrate_compatibility()

void demonstrate_compatibility ( )
Examples
messaging_integration_example.cpp.

Definition at line 141 of file messaging_integration_example.cpp.

141 {
142 std::cout << "\n=== Messaging System Compatibility ===\n";
143
144 // Show that the container system can be used with both aliases
145 std::cout << "This container system provides compatibility aliases:\n";
146 std::cout << "- ContainerSystem::container (standalone usage)\n";
147 std::cout << "- MessagingSystem::container (messaging system integration)\n\n";
148
149 // Demonstrate that the same container can be used in different contexts
150 auto container = std::make_shared<value_container>();
151 container->set_message_type("compatibility_test");
152 container->set("demo_value", static_cast<int32_t>(123));
153
154 std::cout << "Container can be used standalone or as part of messaging system\n";
155 std::cout << "Type safety and performance remain consistent across usage patterns\n";
156}

Referenced by main().

Here is the caller graph for this function:

◆ demonstrate_memory_efficiency()

void demonstrate_memory_efficiency ( )
Examples
messaging_integration_example.cpp.

Definition at line 183 of file messaging_integration_example.cpp.

183 {
184 std::cout << "\n=== Memory Efficiency ===\n";
185
186 auto container = std::make_shared<value_container>();
187 container->set_message_type("memory_test");
188
189 // Add various values
190 container->set("small_int", static_cast<int32_t>(42));
191 container->set("large_string", std::string(1000, 'x'));
192 container->set("double_val", 123.456);
193 container->set("bool_val", true);
194 container->set("long_val", static_cast<int64_t>(9999999999L));
195
196 // Get memory stats
197 auto [heap, stack] = container->memory_stats();
198 std::cout << "Container memory stats:\n";
199 std::cout << " Heap allocations: " << heap << "\n";
200 std::cout << " Stack allocations: " << stack << "\n";
201 std::cout << " Total footprint: " << container->memory_footprint() << " bytes\n";
202}

Referenced by main().

Here is the caller graph for this function:

◆ demonstrate_serialization_roundtrip()

void demonstrate_serialization_roundtrip ( )
Examples
messaging_integration_example.cpp.

Definition at line 100 of file messaging_integration_example.cpp.

100 {
101 std::cout << "\n=== Serialization Round-trip ===\n";
102
103 // Create source container
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");
108
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));
114
115 // Serialize
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";
118
119 // Deserialize
120 auto restored = std::make_shared<value_container>(serialized);
121 std::cout << "Restored container: " << restored->message_type() << "\n";
122
123 // Verify values
124 bool all_match = true;
125
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;
129 }
130 }
131
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;
135 }
136 }
137
138 std::cout << "Round-trip verification: " << (all_match ? "PASSED" : "FAILED") << "\n";
139}

Referenced by main().

Here is the caller graph for this function:

◆ demonstrate_value_access()

void demonstrate_value_access ( )

Definition at line 61 of file messaging_integration_example.cpp.

61 {
62 std::cout << "\n=== Value Access Patterns ===\n";
63
64 auto container = std::make_shared<value_container>();
65 container->set_message_type("value_access_demo");
66
67 // Add various values
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);
73
74 // Access values using get_value and std::get_if
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";
78 }
79 }
80
81 if (auto val = container->get("payload")) {
82 if (auto* v = std::get_if<std::string>(&val->data)) {
83 std::cout << "Payload: " << *v << "\n";
84 }
85 }
86
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";
90 }
91 }
92
93 // Iterate over all values
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";
97 }
98}

Referenced by main().

Here is the caller graph for this function:

◆ main()

int main ( )

Definition at line 204 of file messaging_integration_example.cpp.

204 {
205 std::cout << "Container System - Messaging Integration Example\n";
206 std::cout << "================================================\n";
207 std::cout << "Using variant-based API (set_value/get_value)\n";
208
209 try {
210 // Demonstrate various features
217
218 std::cout << "\n=== Example Completed Successfully ===\n";
219
220 } catch (const std::exception& e) {
221 std::cerr << "Error: " << e.what() << std::endl;
222 return 1;
223 }
224
225 return 0;
226}
void demonstrate_memory_efficiency()
void demonstrate_basic_usage()
void demonstrate_value_access()
void demonstrate_serialization_roundtrip()
void performance_comparison()
void demonstrate_compatibility()

References demonstrate_basic_usage(), demonstrate_compatibility(), demonstrate_memory_efficiency(), demonstrate_serialization_roundtrip(), demonstrate_value_access(), and performance_comparison().

Here is the call graph for this function:

◆ performance_comparison()

void performance_comparison ( )
Examples
messaging_integration_example.cpp.

Definition at line 158 of file messaging_integration_example.cpp.

158 {
159 std::cout << "\n=== Performance Comparison ===\n";
160
161 const int iterations = 1000;
162
163 // Test set_value performance
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();
171 }
172 auto standard_time = std::chrono::high_resolution_clock::now() - start;
173
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";
176
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";
180 }
181}

Referenced by main().

Here is the caller graph for this function: