17#include <unordered_map>
23#if KCENON_WITH_CONTAINER_SYSTEM
25container_system_adapter::container_system_adapter(
26 std::shared_ptr<container_module::value_container> container
27) : container_(container) {
30std::vector<uint8_t> container_system_adapter::serialize(
const std::any& data)
const {
39 if (
data.type() ==
typeid(std::string)) {
40 auto str = std::any_cast<std::string>(data);
41 return std::vector<uint8_t>(str.begin(), str.end());
44 }
catch (
const std::bad_any_cast&) {
51std::any container_system_adapter::deserialize(
const std::vector<uint8_t>& bytes)
const {
52 if (!container_ || bytes.empty()) {
58 std::string str(bytes.begin(), bytes.end());
62std::string container_system_adapter::type_name()
const {
63 return "container_system_adapter";
66bool container_system_adapter::is_valid()
const {
67 return container_ !=
nullptr;
70std::shared_ptr<container_module::value_container>
71container_system_adapter::get_container()
const {
81 std::vector<uint8_t>
serialize(
const std::any& data)
const {
82 if (custom_serializer_) {
83 return custom_serializer_(data);
88 if (data.type() ==
typeid(std::string)) {
89 auto str = std::any_cast<std::string>(data);
90 return std::vector<uint8_t>(str.begin(), str.end());
91 }
else if (data.type() ==
typeid(
int)) {
92 auto val = std::any_cast<int>(data);
93 std::vector<uint8_t> bytes(
sizeof(
int));
94 std::memcpy(bytes.data(), &val,
sizeof(
int));
96 }
else if (data.type() ==
typeid(
double)) {
97 auto val = std::any_cast<double>(data);
98 std::vector<uint8_t> bytes(
sizeof(
double));
99 std::memcpy(bytes.data(), &val,
sizeof(
double));
101 }
else if (data.type() ==
typeid(
bool)) {
102 auto val = std::any_cast<bool>(data);
103 return {
static_cast<uint8_t
>(val ? 1 : 0)};
105 }
catch (
const std::bad_any_cast&) {
113 if (custom_deserializer_) {
114 return custom_deserializer_(bytes);
118 if (!bytes.empty()) {
119 return std::any(std::string(bytes.begin(), bytes.end()));
126 std::function<std::vector<uint8_t>(
const std::any&)> serializer
128 custom_serializer_ = serializer;
132 std::function<std::any(
const std::vector<uint8_t>&)> deserializer
134 custom_deserializer_ = deserializer;
142basic_container::basic_container()
143 : pimpl_(std::make_unique<
impl>()) {
157 return "basic_container";
165 std::function<std::vector<uint8_t>(
const std::any&)> serializer
171 std::function<std::any(
const std::vector<uint8_t>&)> deserializer
182 const std::string& name,
183 std::shared_ptr<container_interface> container
185 std::unique_lock<std::mutex> lock(
mutex_);
190 const std::string& name
192 std::unique_lock<std::mutex> lock(
mutex_);
201 std::shared_ptr<container_interface> container
203 std::unique_lock<std::mutex> lock(
mutex_);
208 std::unique_lock<std::mutex> lock(
mutex_);
224 std::unique_lock<std::mutex> lock(
mutex_);
225 std::vector<std::string> names;
228 names.push_back(name);
235 std::unordered_map<std::string, std::shared_ptr<container_interface>>
containers_;
245 : pimpl_(std::make_unique<
impl>()) {
251 const std::string& name,
252 std::shared_ptr<container_interface> container
258 const std::string& name
264 std::shared_ptr<container_interface> container
std::any deserialize(const std::vector< uint8_t > &bytes) const
void set_deserializer(std::function< std::any(const std::vector< uint8_t > &)> deserializer)
std::vector< uint8_t > serialize(const std::any &data) const
std::function< std::vector< uint8_t >(const std::any &)> custom_serializer_
void set_serializer(std::function< std::vector< uint8_t >(const std::any &)> serializer)
std::function< std::any(const std::vector< uint8_t > &)> custom_deserializer_
bool is_valid() const override
Check if container is valid.
std::unique_ptr< impl > pimpl_
void set_deserializer(std::function< std::any(const std::vector< uint8_t > &)> deserializer)
Set custom deserializer.
std::vector< uint8_t > serialize(const std::any &data) const override
Serialize data to bytes.
std::any deserialize(const std::vector< uint8_t > &bytes) const override
Deserialize bytes to data.
void set_serializer(std::function< std::vector< uint8_t >(const std::any &)> serializer)
Set custom serializer.
std::string type_name() const override
Get container type name.
void set_default_container(std::shared_ptr< container_interface > container)
std::shared_ptr< container_interface > default_container_
std::unordered_map< std::string, std::shared_ptr< container_interface > > containers_
std::vector< std::string > list_containers() const
void register_container(const std::string &name, std::shared_ptr< container_interface > container)
std::vector< uint8_t > serialize(const std::any &data)
std::shared_ptr< container_interface > get_container(const std::string &name) const
std::any deserialize(const std::vector< uint8_t > &bytes)
std::shared_ptr< container_interface > get_default_container()
Manager for container system integration.
void register_container(const std::string &name, std::shared_ptr< container_interface > container)
Register a container implementation.
static container_manager & instance()
Get the singleton instance.
std::unique_ptr< impl > pimpl_
std::shared_ptr< container_interface > get_container(const std::string &name) const
Get a registered container.
std::shared_ptr< container_interface > get_default_container()
Get default container.
std::any deserialize(const std::vector< uint8_t > &bytes)
Deserialize using default container.
std::vector< uint8_t > serialize(const std::any &data)
Serialize using default container.
void set_default_container(std::shared_ptr< container_interface > container)
Set default container.
std::vector< std::string > list_containers() const
Get list of registered container names.
Container system integration interface for network_system.
Feature flags for network_system.