/usr/include/ns3.17/ns3/int64x64-double.h is in libns3-dev 3.17+dfsg-1build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 | #include "ns3/core-config.h"
#if !defined(INT64X64_DOUBLE_H) && (defined (INT64X64_USE_DOUBLE) || defined(PYTHON_SCAN))
#define INT64X64_DOUBLE_H
#include <iostream>
#include <cmath>
namespace ns3 {
class int64x64_t
{
public:
inline int64x64_t ()
: _v (0) {}
inline int64x64_t (double v)
: _v (v) {}
inline int64x64_t (int v)
: _v (v) {}
inline int64x64_t (long int v)
: _v (v) {}
inline int64x64_t (long long int v)
: _v (v) {}
inline int64x64_t (unsigned int v)
: _v (v) {}
inline int64x64_t (unsigned long int v)
: _v (v) {}
inline int64x64_t (unsigned long long int v)
: _v (v) {}
inline int64x64_t (int64_t hi, uint64_t lo)
: _v (hi) { /* XXX */}
inline int64x64_t (const int64x64_t &o)
: _v (o._v) {}
inline int64x64_t &operator = (const int64x64_t &o)
{
_v = o._v;
return *this;
}
inline double GetDouble (void) const
{
return _v;
}
inline int64_t GetHigh (void) const
{
return (int64_t)std::floor (_v);
}
inline uint64_t GetLow (void) const
{
// XXX
return 0;
}
inline void MulByInvert (const int64x64_t &o)
{
_v *= o._v;
}
static inline int64x64_t Invert (uint64_t v)
{
double d = v;
return int64x64_t (1/d);
}
private:
friend bool operator == (const int64x64_t &lhs, const int64x64_t &rhs);
friend bool operator != (const int64x64_t &lhs, const int64x64_t &rhs);
friend bool operator <= (const int64x64_t &lhs, const int64x64_t &rhs);
friend bool operator >= (const int64x64_t &lhs, const int64x64_t &rhs);
friend bool operator < (const int64x64_t &lhs, const int64x64_t &rhs);
friend bool operator > (const int64x64_t &lhs, const int64x64_t &rhs);
friend int64x64_t &operator += (int64x64_t &lhs, const int64x64_t &rhs);
friend int64x64_t &operator -= (int64x64_t &lhs, const int64x64_t &rhs);
friend int64x64_t &operator *= (int64x64_t &lhs, const int64x64_t &rhs);
friend int64x64_t &operator /= (int64x64_t &lhs, const int64x64_t &rhs);
friend int64x64_t operator + (const int64x64_t &lhs, const int64x64_t &rhs);
friend int64x64_t operator - (const int64x64_t &lhs, const int64x64_t &rhs);
friend int64x64_t operator * (const int64x64_t &lhs, const int64x64_t &rhs);
friend int64x64_t operator / (const int64x64_t &lhs, const int64x64_t &rhs);
friend int64x64_t operator + (const int64x64_t &lhs);
friend int64x64_t operator - (const int64x64_t &lhs);
friend int64x64_t operator ! (const int64x64_t &lhs);
double _v;
};
inline bool operator == (const int64x64_t &lhs, const int64x64_t &rhs)
{
return lhs._v == rhs._v;
}
inline bool operator != (const int64x64_t &lhs, const int64x64_t &rhs)
{
return lhs._v != rhs._v;
}
inline bool operator <= (const int64x64_t &lhs, const int64x64_t &rhs)
{
return lhs._v <= rhs._v;
}
inline bool operator >= (const int64x64_t &lhs, const int64x64_t &rhs)
{
return lhs._v >= rhs._v;
}
inline bool operator < (const int64x64_t &lhs, const int64x64_t &rhs)
{
return lhs._v < rhs._v;
}
inline bool operator > (const int64x64_t &lhs, const int64x64_t &rhs)
{
return lhs._v > rhs._v;
}
inline int64x64_t &operator += (int64x64_t &lhs, const int64x64_t &rhs)
{
double tmp = lhs._v;
tmp += rhs._v;
lhs = int64x64_t (tmp);
return lhs;
}
inline int64x64_t &operator -= (int64x64_t &lhs, const int64x64_t &rhs)
{
double tmp = lhs._v;
tmp -= rhs._v;
lhs = int64x64_t (tmp);
return lhs;
}
inline int64x64_t &operator *= (int64x64_t &lhs, const int64x64_t &rhs)
{
double tmp = lhs._v;
tmp *= rhs._v;
lhs = int64x64_t (tmp);
return lhs;
}
inline int64x64_t &operator /= (int64x64_t &lhs, const int64x64_t &rhs)
{
double tmp = lhs._v;
tmp /= rhs._v;
lhs = int64x64_t (tmp);
return lhs;
}
inline int64x64_t operator + (const int64x64_t &lhs)
{
return lhs;
}
inline int64x64_t operator - (const int64x64_t &lhs)
{
return int64x64_t (-lhs._v);
}
inline int64x64_t operator ! (const int64x64_t &lhs)
{
return int64x64_t (!lhs._v);
}
} // namespace ns3
#endif /* INT64X64_DOUBLE_H */
|