author | Mathieu Lacage <mathieu.lacage@sophia.inria.fr> |
Wed, 13 Apr 2011 09:08:05 +0200 | |
changeset 7048 | a6d78cb50f6e |
parent 7045 | d13fa06886ce |
child 7169 | 358f71a624d8 |
permissions | -rw-r--r-- |
7048
a6d78cb50f6e
early work to make python bindings work again with ns-3-time
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
7045
diff
changeset
|
1 |
#include "ns3/core-config.h" |
a6d78cb50f6e
early work to make python bindings work again with ns-3-time
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
7045
diff
changeset
|
2 |
#if !defined(INT64X64_128_H) && defined (INT64X64_USE_128) && !defined(PYTHON_SCAN) |
7039 | 3 |
#define INT64X64_128_H |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
4 |
|
7042
bf5596b0f127
get 64bit build running again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
7041
diff
changeset
|
5 |
#include "ns3/core-config.h" |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
6 |
#include <stdint.h> |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
7 |
#include <math.h> |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
8 |
|
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
9 |
#if defined(HAVE___UINT128_T) and !defined(HAVE_UINT128_T) |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
10 |
typedef __uint128_t uint128_t; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
11 |
typedef __int128_t int128_t; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
12 |
#endif |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
13 |
|
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
14 |
namespace ns3 { |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
15 |
|
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
16 |
#define HP128_MAX_64 18446744073709551615.0 |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
17 |
#define HP128_MASK_LO ((((int128_t)1)<<64)-1) |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
18 |
|
7039 | 19 |
class int64x64_t |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
20 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
21 |
public: |
7039 | 22 |
inline int64x64_t () |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
23 |
: _v (0) |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
24 |
{} |
7042
bf5596b0f127
get 64bit build running again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
7041
diff
changeset
|
25 |
inline int64x64_t (double value) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
26 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
27 |
bool is_negative = value < 0; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
28 |
value = is_negative?-value:value; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
29 |
double hi = floor (value); |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
30 |
double lo = (value - hi) * HP128_MAX_64; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
31 |
_v = (int128_t)hi; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
32 |
_v <<= 64; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
33 |
_v += (int128_t)lo; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
34 |
_v = is_negative?-_v:_v; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
35 |
} |
7042
bf5596b0f127
get 64bit build running again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
7041
diff
changeset
|
36 |
inline int64x64_t (int v) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
37 |
: _v (v) |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
38 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
39 |
_v <<= 64; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
40 |
} |
7042
bf5596b0f127
get 64bit build running again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
7041
diff
changeset
|
41 |
inline int64x64_t (long int v) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
42 |
: _v (v) |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
43 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
44 |
_v <<= 64; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
45 |
} |
7042
bf5596b0f127
get 64bit build running again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
7041
diff
changeset
|
46 |
inline int64x64_t (long long int v) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
47 |
: _v (v) |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
48 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
49 |
_v <<= 64; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
50 |
} |
7042
bf5596b0f127
get 64bit build running again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
7041
diff
changeset
|
51 |
inline int64x64_t (unsigned int v) |
7035
8446ae042275
add missing constructors
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
7032
diff
changeset
|
52 |
: _v (v) |
8446ae042275
add missing constructors
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
7032
diff
changeset
|
53 |
{ |
8446ae042275
add missing constructors
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
7032
diff
changeset
|
54 |
_v <<= 64; |
8446ae042275
add missing constructors
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
7032
diff
changeset
|
55 |
} |
7042
bf5596b0f127
get 64bit build running again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
7041
diff
changeset
|
56 |
inline int64x64_t (unsigned long int v) |
7035
8446ae042275
add missing constructors
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
7032
diff
changeset
|
57 |
: _v (v) |
8446ae042275
add missing constructors
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
7032
diff
changeset
|
58 |
{ |
8446ae042275
add missing constructors
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
7032
diff
changeset
|
59 |
_v <<= 64; |
8446ae042275
add missing constructors
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
7032
diff
changeset
|
60 |
} |
7042
bf5596b0f127
get 64bit build running again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
7041
diff
changeset
|
61 |
inline int64x64_t (unsigned long long int v) |
7035
8446ae042275
add missing constructors
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
7032
diff
changeset
|
62 |
: _v (v) |
8446ae042275
add missing constructors
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
7032
diff
changeset
|
63 |
{ |
8446ae042275
add missing constructors
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
7032
diff
changeset
|
64 |
_v <<= 64; |
8446ae042275
add missing constructors
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
7032
diff
changeset
|
65 |
} |
7039 | 66 |
explicit inline int64x64_t (int64_t hi, uint64_t lo) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
67 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
68 |
bool is_negative = hi<0; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
69 |
_v = is_negative?-hi:hi; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
70 |
_v <<= 64; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
71 |
_v += lo; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
72 |
_v = is_negative?-_v:_v; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
73 |
} |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
74 |
|
7039 | 75 |
inline int64x64_t (const int64x64_t &o) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
76 |
: _v (o._v) {} |
7039 | 77 |
inline int64x64_t &operator = (const int64x64_t &o) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
78 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
79 |
_v = o._v; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
80 |
return *this; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
81 |
} |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
82 |
|
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
83 |
inline double GetDouble (void) const |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
84 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
85 |
bool is_negative = _v < 0; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
86 |
uint128_t value = is_negative ? -_v:_v; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
87 |
uint64_t hi = value >> 64; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
88 |
uint64_t lo = value; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
89 |
double flo = lo; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
90 |
flo /= HP128_MAX_64; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
91 |
double retval = hi; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
92 |
retval += flo; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
93 |
retval = is_negative ? -retval : retval; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
94 |
return retval; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
95 |
} |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
96 |
inline int64_t GetHigh (void) const |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
97 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
98 |
bool negative = _v < 0; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
99 |
int128_t v = negative?-_v:_v; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
100 |
v >>= 64; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
101 |
int64_t retval = v; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
102 |
return negative?-retval:retval; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
103 |
} |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
104 |
inline uint64_t GetLow (void) const |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
105 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
106 |
bool negative = _v < 0; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
107 |
int128_t v = negative?-_v:_v; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
108 |
int128_t low = v & HP128_MASK_LO; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
109 |
uint64_t retval = low; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
110 |
return retval; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
111 |
} |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
112 |
#undef HP128_MAX_64 |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
113 |
#undef HP128_MASK_LO |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
114 |
|
7039 | 115 |
void MulByInvert (const int64x64_t &o); |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
116 |
|
7039 | 117 |
static int64x64_t Invert (uint64_t v); |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
118 |
|
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
119 |
private: |
7039 | 120 |
friend bool operator == (const int64x64_t &lhs, const int64x64_t &rhs); |
121 |
friend bool operator != (const int64x64_t &lhs, const int64x64_t &rhs); |
|
122 |
friend bool operator <= (const int64x64_t &lhs, const int64x64_t &rhs); |
|
123 |
friend bool operator >= (const int64x64_t &lhs, const int64x64_t &rhs); |
|
124 |
friend bool operator < (const int64x64_t &lhs, const int64x64_t &rhs); |
|
125 |
friend bool operator > (const int64x64_t &lhs, const int64x64_t &rhs); |
|
126 |
friend int64x64_t &operator += (int64x64_t &lhs, const int64x64_t &rhs); |
|
127 |
friend int64x64_t &operator -= (int64x64_t &lhs, const int64x64_t &rhs); |
|
128 |
friend int64x64_t &operator *= (int64x64_t &lhs, const int64x64_t &rhs); |
|
129 |
friend int64x64_t &operator /= (int64x64_t &lhs, const int64x64_t &rhs); |
|
130 |
friend int64x64_t operator + (const int64x64_t &lhs, const int64x64_t &rhs); |
|
131 |
friend int64x64_t operator - (const int64x64_t &lhs, const int64x64_t &rhs); |
|
132 |
friend int64x64_t operator * (const int64x64_t &lhs, const int64x64_t &rhs); |
|
133 |
friend int64x64_t operator / (const int64x64_t &lhs, const int64x64_t &rhs); |
|
134 |
friend int64x64_t operator + (const int64x64_t &lhs); |
|
135 |
friend int64x64_t operator - (const int64x64_t &lhs); |
|
136 |
friend int64x64_t operator ! (const int64x64_t &lhs); |
|
137 |
void Mul (const int64x64_t &o); |
|
138 |
void Div (const int64x64_t &o); |
|
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
139 |
static uint128_t UmulByInvert (uint128_t a, uint128_t b); |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
140 |
static uint128_t Umul (uint128_t a, uint128_t b); |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
141 |
static uint128_t Divu (uint128_t a, uint128_t b); |
7039 | 142 |
inline int64x64_t (int128_t v) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
143 |
: _v (v) {} |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
144 |
|
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
145 |
int128_t _v; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
146 |
}; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
147 |
|
7039 | 148 |
inline bool operator == (const int64x64_t &lhs, const int64x64_t &rhs) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
149 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
150 |
return lhs._v == rhs._v; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
151 |
} |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
152 |
|
7039 | 153 |
inline bool operator != (const int64x64_t &lhs, const int64x64_t &rhs) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
154 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
155 |
return lhs._v != rhs._v; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
156 |
} |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
157 |
|
7039 | 158 |
inline bool operator < (const int64x64_t &lhs, const int64x64_t &rhs) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
159 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
160 |
return lhs._v < rhs._v; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
161 |
} |
7039 | 162 |
inline bool operator <= (const int64x64_t &lhs, const int64x64_t &rhs) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
163 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
164 |
return lhs._v <= rhs._v; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
165 |
} |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
166 |
|
7039 | 167 |
inline bool operator >= (const int64x64_t &lhs, const int64x64_t &rhs) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
168 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
169 |
return lhs._v >= rhs._v; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
170 |
} |
7039 | 171 |
inline bool operator > (const int64x64_t &lhs, const int64x64_t &rhs) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
172 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
173 |
return lhs._v > rhs._v; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
174 |
} |
7039 | 175 |
inline int64x64_t &operator += (int64x64_t &lhs, const int64x64_t &rhs) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
176 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
177 |
lhs._v += rhs._v; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
178 |
return lhs; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
179 |
} |
7039 | 180 |
inline int64x64_t &operator -= (int64x64_t &lhs, const int64x64_t &rhs) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
181 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
182 |
lhs._v -= rhs._v; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
183 |
return lhs; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
184 |
} |
7039 | 185 |
inline int64x64_t &operator *= (int64x64_t &lhs, const int64x64_t &rhs) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
186 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
187 |
lhs.Mul (rhs); |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
188 |
return lhs; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
189 |
} |
7039 | 190 |
inline int64x64_t &operator /= (int64x64_t &lhs, const int64x64_t &rhs) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
191 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
192 |
lhs.Div (rhs); |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
193 |
return lhs; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
194 |
} |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
195 |
|
7039 | 196 |
inline int64x64_t operator + (const int64x64_t &lhs) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
197 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
198 |
return lhs; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
199 |
} |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
200 |
|
7039 | 201 |
inline int64x64_t operator - (const int64x64_t &lhs) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
202 |
{ |
7039 | 203 |
return int64x64_t (-lhs._v); |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
204 |
} |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
205 |
|
7039 | 206 |
inline int64x64_t operator ! (const int64x64_t &lhs) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
207 |
{ |
7039 | 208 |
return int64x64_t (!lhs._v); |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
209 |
} |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
210 |
|
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
211 |
} // namespace ns3 |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
212 |
|
7039 | 213 |
#endif /* INT64X64_128_H */ |