kDB: Knowledge DataBase
Loading...
Searching...
No Matches
BigNumberMetaTypeImplementation_p.h
1#include <knowCore/MetaTypeImplementation.h>
2
3KNOWCORE_DEFINE_METATYPE_START_IMPLEMENTATION(knowCore::BigNumber)
4cres_qresult<QByteArray> md5(const knowCore::BigNumber& _value) const override
5{
6 return cres_success(_value.md5());
7}
8cres_qresult<QJsonValue> toJsonValue(const knowCore::BigNumber& _value,
9 const SerialisationContexts&) const override
10{
11 const auto [success, value, errorMessage] = _value.toInt64();
12 Q_UNUSED(errorMessage);
13
14 if(success and value > -9007199254740992
15 and value < 9007199254740992) // outside of that range, there is a loss of precision, since
16 // Json store value as double!
17 {
18 return cres_success(QJsonValue(value.value()));
19 }
20 else
21 {
22 return cres_success(QJsonValue(_value.toString()));
23 }
24}
25cres_qresult<void> fromJsonValue(knowCore::BigNumber* _value, const QJsonValue& _json_value,
26 const DeserialisationContexts&) const override
27{
28 if(_json_value.isDouble())
29 {
30 *_value = BigNumber(_json_value.toDouble());
31 return cres_success();
32 }
33 else if(_json_value.isString())
34 {
35 cres_try(*_value, BigNumber::fromString(_json_value.toString()));
36 return cres_success();
37 }
38 else
39 {
40 return expectedError("number", _json_value);
41 }
42}
43cres_qresult<QCborValue> toCborValue(const knowCore::BigNumber& _value,
44 const SerialisationContexts&) const override
45{
46 const auto [success, value, errorMessage] = _value.toInt64();
47 Q_UNUSED(errorMessage);
48 if(success)
49 {
50 return cres_success(QCborValue(value.value()));
51 }
52 else
53 {
54 return cres_success(_value.toString());
55 }
56}
57cres_qresult<void> fromCborValue(knowCore::BigNumber* _value, const QCborValue& _cbor_value,
58 const DeserialisationContexts&) const override
59{
60 if(_cbor_value.isInteger())
61 {
62 *_value = BigNumber(_cbor_value.toInteger());
63 return cres_success();
64 }
65 else if(_cbor_value.isString())
66 {
67 cres_try(*_value, BigNumber::fromString(_cbor_value.toString()));
68 return cres_success();
69 }
70 else
71 {
72 return expectedError("number", _cbor_value);
73 }
74}
75cres_qresult<QString> printable(const knowCore::BigNumber& _value) const override
76{
77 return cres_success(_value.toString());
78}
79cres_qresult<QString> toRdfLiteral(const knowCore::BigNumber& _value,
80 const SerialisationContexts&) const override
81{
82 return cres_success(_value.toString());
83}
84cres_qresult<void> fromRdfLiteral(knowCore::BigNumber* _value, const QString& _serialised,
85 const DeserialisationContexts&) const override
86{
87 cres_try(*_value, BigNumber::fromString(_serialised));
88 return cres_success();
89}
90KNOWCORE_DEFINE_METATYPE_FINISH_IMPLEMENTATION(knowCore::BigNumber)
Class that can contains large numeric value.
Definition BigNumber.h:51
cres_qresult< qint64 > toInt64(bool _truncate=false) const
Definition BigNumber.cpp:288