|
-
-
-
-
-
-
- namespace cpphibernate {
- namespace mariadb {
-
-
- /* nullable_helper - cppcore::nullable */
-
- template<typename T_value>
- struct nullable_helper<cppcore::nullable<T_value>, void>
- {
- using nullable_type = cppcore::nullable<T_value>;
- using value_type = T_value;
-
- static inline value_type* get(nullable_type& x)
- { return x.has_value() ? &x.value() : nullptr; }
-
- static inline const value_type* get(const nullable_type& x)
- { return x.has_value() ? &x.value() : nullptr; }
-
- static inline value_type& set(nullable_type& x, const value_type* value)
- { return *(x = *value); }
-
- static inline value_type& set(nullable_type& x, const value_type& value)
- { return *(x = value); }
-
- static inline value_type& set(nullable_type& x, value_type&& value)
- { return *(x = std::move(value)); }
-
- static void clear(nullable_type& x)
- { x.reset(); }
- };
-
- /* nullable_helper - std::unique_ptr/std::shared_ptr */
-
- template<typename T>
- struct nullable_helper<
- T,
- mp::enable_if_t<
- mp::is_specialization_of_v<T, std::unique_ptr>
- || mp::is_specialization_of_v<T, std::shared_ptr>>>
- {
- using nullable_type = T;
- using value_type = typename nullable_type::element_type;
-
- static inline value_type* get(const nullable_type& x)
- { return x.get(); }
-
- static inline value_type& set(nullable_type& x, value_type* value)
- {
- x.reset(value);
- return *x;
- }
-
- static inline value_type& set(nullable_type& x, const value_type& value)
- {
- x.reset(new value_type(value));
- return *x;
- }
-
- static inline value_type& set(nullable_type& x, value_type&& value)
- {
- x.reset(new value_type(std::move(value)));
- return *x;
- }
-
- static void clear(nullable_type& x)
- { return x.reset(); }
- };
-
- } }
|