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