| #ifndef SHARED_BASYX_OBJECT_IMPL_OBJECT_ACCESS_IMPL_H |
| #define SHARED_BASYX_OBJECT_IMPL_OBJECT_ACCESS_IMPL_H |
| |
| template<typename T> |
| bool basyx::object::insert(const T & t) |
| { |
| if (!this->content) |
| return false; |
| |
| // Check if contained object is list or set |
| switch (content->object_type()) |
| { |
| case basyx::type::objectType::List: |
| if (this->InstanceOf<object::list_t<T>>()) |
| { |
| auto & vec = this->Get<object::list_t<T>&>(); |
| vec.push_back(t); |
| return true; |
| } |
| else if (this->InstanceOf<object::object_list_t>()) |
| { |
| auto & vec = this->Get<object::object_list_t&>(); |
| vec.emplace_back(t); |
| return true; |
| } |
| break; |
| }; |
| return false; |
| }; |
| |
| template<typename T> |
| bool basyx::object::insertKey(const std::string & key, const T & t, bool override) |
| { |
| if (!this->content) |
| return false; |
| |
| // Check if contained object is hashmap |
| if (content->object_type() == basyx::type::objectType::Map) |
| { |
| // Check contained type |
| if (this->InstanceOf<object::object_map_t>()) |
| { |
| auto & map = this->Get<object::object_map_t&>(); |
| |
| // Check if key already exists |
| if (map.find(key) != map.end()) |
| { |
| // if override, set new value, else return false |
| if (override) { |
| map[key] = t; |
| return true; |
| }; |
| |
| return false; |
| } |
| else // key doesn't exist, just insert object |
| { |
| map.emplace(key, t); |
| return true; |
| } |
| } |
| }; |
| |
| return false; |
| }; |
| |
| template<typename T> |
| bool basyx::object::remove(const T & t) |
| { |
| if (!this->content) |
| return false; |
| |
| // Check if contained object is list or set |
| switch (content->object_type()) |
| { |
| case basyx::type::objectType::List: |
| auto & list = this->Get<object::list_t<T>&>(); |
| list.erase(std::remove(list.begin(), list.end(), t), list.end()); |
| return true; |
| break; |
| }; |
| return false; |
| } |
| |
| inline bool basyx::object::remove(basyx::object & obj) |
| { |
| auto valueType = obj.GetValueType(); |
| switch(valueType) |
| { |
| case basyx::type::valueType::Bool: |
| return this->remove(obj.Get<const bool>()); |
| break; |
| case basyx::type::valueType::Int: |
| return this->remove(obj.Get<const int>()); |
| break; |
| case basyx::type::valueType::String: |
| return this->remove(obj.Get<const std::string>()); |
| break; |
| case basyx::type::valueType::Float: |
| return this->remove(obj.Get<const double>()); |
| break; |
| }; |
| |
| return false; |
| }; |
| |
| #endif /* SHARED_BASYX_OBJECT_IMPL_OBJECT_ACCESS_IMPL_H */ |