knowL: Knowledge Libraries
Loading...
Searching...
No Matches
ValueToValueImplementation.h
1#include "Interfaces/ValueToValue.h"
2
3#include <rice/rice.hpp>
4
5#include <knowCore/Value.h>
6
7namespace knowRuby
8{
9 template<typename _T_>
11 {
12 static constexpr bool as_pointer = true;
13 };
14 template<typename _T_>
16 {
17 public:
19 bool canConvertToRubyValue(const knowCore::Value& _value) const override
20 {
21 return _value.canConvert<_T_>();
22 }
23 bool canConvertToKnowCoreValue(VALUE _value) const override
24 {
25 return Rice::detail::From_Ruby<_T_>().is_convertible(_value);
26 }
27 VALUE toRubyValue(const knowCore::Value& _value) const override
28 {
29 if constexpr (std::is_trivially_constructible_v<_T_> or not ValueToValueImplementationTraits<_T_>::as_pointer)
30 {
31 return Rice::detail::To_Ruby<_T_>().convert(_value.value<_T_>().expectSuccess());
32 } else {
33 Rice::Return r; r.takeOwnership();
34 return Rice::detail::To_Ruby<_T_*>(&r).convert(new _T_(_value.value<_T_>().expectSuccess()));
35 }
36 }
37 knowCore::Value toKnowCoreValue(VALUE _value) const override
38 {
39 return knowCore::Value::fromValue(Rice::detail::From_Ruby<_T_>().convert(_value));
40 }
41 };
42}
Definition Value.h:13
static Value fromValue(const _T_ &_value)
Definition Value.h:184
ReturnValue< _T_ > value(TypeCheckingMode _conversion=TypeCheckingMode::Safe) const
Definition Value.h:229
bool canConvert(TypeCheckingMode _conversion=TypeCheckingMode::Safe) const
Definition Value.h:264
Definition ValueToValue.h:9
Definition ValueToValueImplementation.h:16
Definition ValueToValueImplementation.h:11