1#ifndef _KNOW_CORE_BIGNUMBER_H_
2#define _KNOW_CORE_BIGNUMBER_H_
11#include <Cyqlops/Crypto/Hash.h>
18 struct is_floating_point<knowCore::
BigNumber> :
public true_type
22 struct is_signed<knowCore::
BigNumber> :
public true_type
26 struct is_unsigned<knowCore::
BigNumber> :
public false_type
30 struct is_integral<knowCore::
BigNumber> :
public false_type
71 template<
typename _T_>
72 requires(std::is_integral_v<_T_> and std::is_unsigned_v<_T_>)
76 template<
typename _T_>
77 requires(std::is_integral_v<_T_> and std::is_signed_v<_T_>)
82 static cres_qresult<BigNumber> fromString(
const QString& _value);
83 static cres_qresult<BigNumber> fromString(
const char* _value)
85 return fromString(QString(_value));
87 static cres_qresult<BigNumber> fromVariant(
const QVariant& _value);
88 static cres_qresult<BigNumber> fromValue(
const knowCore::Value& _value);
94 bool isFinite()
const;
95 bool isInfinite()
const;
100 QString toString()
const;
113 double toDouble()
const;
120 cres_qresult<qint64>
toInt64(
bool _truncate =
false)
const;
121 cres_qresult<quint64> toUInt64(
bool _truncate =
false)
const;
122 bool operator==(
const BigNumber& _rhs)
const;
123 bool operator!=(
const BigNumber& _rhs)
const {
return not(*
this == _rhs); }
124 QByteArray md5()
const;
128 void hash(QCryptographicHash* _hash)
const;
135 bool operator<(
const BigNumber& _rhs)
const;
136 bool operator<=(
const BigNumber& _rhs)
const;
137 bool operator>(
const BigNumber& _rhs)
const;
138 bool operator>=(
const BigNumber& _rhs)
const;
140 template<
typename _T_>
141 requires(std::is_arithmetic_v<_T_>)
142 BigNumber operator+(
const _T_& _rhs)
const
146 template<
typename _T_>
147 requires(std::is_arithmetic_v<_T_>)
148 BigNumber operator-(
const _T_& _rhs)
const
152 template<
typename _T_>
153 requires(std::is_arithmetic_v<_T_>)
154 BigNumber operator*(
const _T_& _rhs)
const
158 template<
typename _T_>
159 requires(std::is_arithmetic_v<_T_>)
160 BigNumber operator/(
const _T_& _rhs)
const
164 template<
typename _T_>
165 requires(std::is_arithmetic_v<_T_>)
166 bool operator<(
const _T_& _rhs)
const
170 template<
typename _T_>
171 requires(std::is_arithmetic_v<_T_>)
172 bool operator<=(
const _T_& _rhs)
const
176 template<
typename _T_>
177 requires(std::is_arithmetic_v<_T_>)
178 bool operator>(
const _T_& _rhs)
const
182 template<
typename _T_>
183 requires(std::is_arithmetic_v<_T_>)
184 bool operator>=(
const _T_& _rhs)
const
189 quint16 weight()
const {
return m_weight; }
190 Sign sign()
const {
return m_sign; }
191 quint16 dscale()
const {
return m_dscale; }
196 void exponenfy(
int exp);
199 enum class ComparisonResult
205 ComparisonResult compare_abs(
const BigNumber& _rhs)
const;
206 ComparisonResult compare(
const BigNumber& _rhs)
const;
210 std::tuple<bool, quint64> toUInt64_ignore_sign()
const;
211 template<
typename _T_>
212 _T_ toVariantValue()
const;
214 qint16 m_weight, m_dscale;
218 template<
typename _T_>
219 requires(std::is_arithmetic_v<_T_>)
224 template<
typename _T_>
225 requires(std::is_arithmetic_v<_T_>)
230 template<
typename _T_>
231 requires(std::is_arithmetic_v<_T_>)
236 template<
typename _T_>
237 requires(std::is_arithmetic_v<_T_>)
242 template<
typename _T_>
243 requires(std::is_arithmetic_v<_T_>)
244 static inline bool operator<(
const _T_& _lhs,
const BigNumber& _rhs)
248 template<
typename _T_>
249 requires(std::is_arithmetic_v<_T_>)
250 static inline bool operator<=(
const _T_& _lhs,
const BigNumber& _rhs)
254 template<
typename _T_>
255 requires(std::is_arithmetic_v<_T_>)
256 static inline bool operator>(
const _T_& _lhs,
const BigNumber& _rhs)
260 template<
typename _T_>
261 requires(std::is_arithmetic_v<_T_>)
262 static inline bool operator>=(
const _T_& _lhs,
const BigNumber& _rhs)
266 template<
typename _T_>
267 requires(std::is_arithmetic_v<_T_>)
268 static inline bool operator==(
const _T_& _lhs,
const BigNumber& _rhs)
275KNOWCORE_DECLARE_FULL_METATYPE(knowCore,
BigNumber);
277#include "Formatter.h"
281 return std::format_to(ctx.out(),
"{}", p.toString());
284namespace Cyqlops::Crypto::Hash
Class that can contains large numeric value.
Definition BigNumber.h:51
bool isFloating() const
Definition BigNumber.cpp:248
cres_qresult< qint64 > toInt64(bool _truncate=false) const
Definition BigNumber.cpp:288
void hash(QCryptographicHash *_hash) const
Definition BigNumber.cpp:560
knowCore::Value toValue() const
return an optimal value representation This function try to return a variant with an optimal represen...
Definition BigNumber.cpp:540
QVariant toVariant() const
return an optimal variant representation This function try to return a variant with an optimal repres...
Definition BigNumber.cpp:538