Zserio C++17 runtime library  0.5.0
Built for Zserio 2.17.0
IReflectableData.h
Go to the documentation of this file.
1 #ifndef ZSERIO_I_REFLECTABLE_DATA_H_INC
2 #define ZSERIO_I_REFLECTABLE_DATA_H_INC
3 
4 #include <memory>
5 #include <string_view>
6 
8 
9 namespace zserio
10 {
11 
18 template <typename ALLOC = std::allocator<uint8_t>>
19 class IBasicReflectableData : public IIntrospectableData<IBasicReflectableData<ALLOC>, ALLOC>
20 {
21 public:
23  using Ptr = std::shared_ptr<IBasicReflectableData>;
24 
27 
30  using IIntrospectableData<IBasicReflectableData<ALLOC>, ALLOC>::operator[];
33 
37  ~IBasicReflectableData() override = default;
38 
51  virtual Ptr getField(std::string_view name) = 0;
52 
66  virtual void setField(std::string_view name, const BasicAny<ALLOC>& value) = 0;
67 
80  virtual Ptr createField(std::string_view name) = 0;
81 
91  virtual void resize(size_t size) = 0;
92 
103  virtual Ptr at(size_t index) = 0;
104 
110  virtual Ptr operator[](size_t index) = 0;
111 
120  virtual void setAt(const BasicAny<ALLOC>& value, size_t index) = 0;
121 
129  virtual void append(const BasicAny<ALLOC>& value) = 0;
130 
148  virtual BasicAny<ALLOC> getAnyValue(const ALLOC& allocator) = 0;
169  virtual Ptr find(std::string_view path) = 0;
170 
176  virtual Ptr operator[](std::string_view path) = 0;
177 };
178 
181 template <typename ALLOC = std::allocator<uint8_t>>
183 
184 template <typename ALLOC = std::allocator<uint8_t>>
195 namespace detail
196 {
197 
198 template <typename T, typename ALLOC>
199 struct Reflectable;
200 
201 } // namespace detail
202 
212 template <typename T, typename ALLOC = typename T::allocator_type,
213  std::enable_if_t<is_complete_v<View<T>> && has_allocator_v<std::decay_t<T>>, int> = 0>
214 IBasicReflectableDataConstPtr<ALLOC> reflectable(const T& value, const ALLOC& allocator = ALLOC())
215 {
216  return detail::Reflectable<T, ALLOC>::create(value, allocator);
217 }
218 
219 template <typename T, typename ALLOC = typename T::allocator_type,
220  std::enable_if_t<is_complete_v<View<T>> && has_allocator_v<std::decay_t<T>>, int> = 0>
221 IBasicReflectableDataPtr<ALLOC> reflectable(T& value, const ALLOC& allocator = ALLOC())
222 {
223  return detail::Reflectable<T, ALLOC>::create(value, allocator);
224 }
225 
226 template <typename T, typename ALLOC = std::allocator<uint8_t>,
227  std::enable_if_t<(std::is_enum_v<T> || is_bitmask_v<T>) && !has_allocator_v<std::decay_t<T>>, int> = 0>
228 IBasicReflectableDataPtr<ALLOC> reflectable(T value, const ALLOC& allocator = ALLOC())
229 {
230  return detail::Reflectable<T, ALLOC>::create(value, allocator);
231 }
234 } // namespace zserio
235 
236 #endif // ZSERIO_I_REFLECTABLE_DATA_H_INC
typename IIntrospectableData< IBasicReflectableData< ALLOC >, ALLOC >::ConstPtr ConstPtr
virtual BasicAny< ALLOC > getAnyValue(const ALLOC &allocator)=0
~IBasicReflectableData() override=default
virtual Ptr createField(std::string_view name)=0
virtual Ptr find(std::string_view path)=0
virtual void append(const BasicAny< ALLOC > &value)=0
virtual Ptr at(size_t index)=0
virtual void setAt(const BasicAny< ALLOC > &value, size_t index)=0
virtual BasicAny< ALLOC > getAnyValue()=0
virtual Ptr operator[](std::string_view path)=0
virtual void resize(size_t size)=0
virtual Ptr operator[](size_t index)=0
std::shared_ptr< IBasicReflectableData > Ptr
virtual void setField(std::string_view name, const BasicAny< ALLOC > &value)=0
virtual Ptr getField(std::string_view name)=0
typename IBasicReflectableData< ALLOC >::ConstPtr IBasicReflectableDataConstPtr
typename IBasicReflectableData< ALLOC >::Ptr IBasicReflectableDataPtr
IBasicReflectableDataConstPtr< ALLOC > reflectable(const T &value, const ALLOC &allocator=ALLOC())
IBasicReflectableDataPtr<> IReflectableDataPtr
IBasicReflectableDataConstPtr<> IReflectableDataConstPtr