kDB: Knowledge DataBase
Loading...
Searching...
No Matches
Numeric_p.h
1#include <tuple>
2
3#include "Global.h"
4
5#include <clog_qt>
6#include <cres_qt>
7
8namespace knowCore
9{
10 inline std::tuple<bool, quint64> mul_overflow(quint64 _a, quint64 _b)
11 {
12#if __KNOWCORE_HAS_BUILTIN(__builtin_mul_overflow)
13 quint64 result;
14 if(__builtin_mul_overflow(_a, _b, &result))
15 {
16 return {true, NAN};
17 }
18 else
19 {
20 return {false, result};
21 }
22#else
23 quint64 result = _a * _b;
24 if(_a != 0 and _b != result / _a)
25 {
26 return {true, NAN};
27 }
28 return {false, result};
29#endif
30 }
31 std::tuple<bool, quint64> add_overflow(quint64 _a, quint64 _b)
32 {
33#if __KNOWCORE_HAS_BUILTIN(__builtin_add_overflow)
34 quint64 result;
35 if(__builtin_add_overflow(_a, _b, &result))
36 {
37 return {true, NAN};
38 }
39 else
40 {
41 return {false, result};
42 }
43#else
44 quint64 result = _a + _b;
45 if(result < _a)
46 {
47 return {true, NAN};
48 }
49 return {false, result};
50#endif
51 }
52} // namespace knowCore