cpp

Coverage Report

Created: 2024-07-28 06:14

/home/uke/oil/mycpp/gc_mops.h
Line
Count
Source (jump to first uncovered line)
1
// gc_mops.h - corresponds to mycpp/mops.py
2
3
#ifndef MYCPP_GC_MOPS_H
4
#define MYCPP_GC_MOPS_H
5
6
#include <stdint.h>
7
8
#include "mycpp/common.h"  // DCHECK
9
10
class BigStr;
11
12
namespace mops {
13
14
// BigInt library
15
// TODO: Make it arbitrary size.  Right now it's int64_t, which is distinct
16
// from int.
17
18
typedef int64_t BigInt;
19
20
// For convenience
21
extern const BigInt ZERO;
22
extern const BigInt ONE;
23
extern const BigInt MINUS_ONE;
24
extern const BigInt MINUS_TWO;
25
26
BigStr* ToStr(BigInt b);
27
BigStr* ToOctal(BigInt b);
28
BigStr* ToHexUpper(BigInt b);
29
BigStr* ToHexLower(BigInt b);
30
31
BigInt FromStr(BigStr* s, int base = 10);
32
33
0
inline int BigTruncate(BigInt b) {
34
0
  return static_cast<int>(b);
35
0
}
36
37
0
inline BigInt IntWiden(int b) {
38
0
  return static_cast<BigInt>(b);
39
0
}
40
41
0
inline BigInt FromC(int64_t i) {
42
0
  return i;
43
0
}
44
45
0
inline BigInt FromBool(bool b) {
46
0
  return b ? BigInt(1) : BigInt(0);
47
0
}
48
49
0
inline double ToFloat(BigInt b) {
50
0
  return static_cast<double>(b);
51
0
}
52
53
0
inline BigInt FromFloat(double f) {
54
0
  return static_cast<BigInt>(f);
55
0
}
56
57
0
inline BigInt Negate(BigInt b) {
58
0
  return -b;
59
0
}
60
61
0
inline BigInt Add(BigInt a, BigInt b) {
62
0
  return a + b;
63
0
}
64
65
0
inline BigInt Sub(BigInt a, BigInt b) {
66
0
  return a - b;
67
0
}
68
69
0
inline BigInt Mul(BigInt a, BigInt b) {
70
0
  return a * b;
71
0
}
72
73
0
inline BigInt Div(BigInt a, BigInt b) {
74
  // Is the behavior of negative values defined in C++?  Avoid difference with
75
  // Python.
76
0
  DCHECK(a >= 0);
77
0
  DCHECK(b >= 0);
78
0
  return a / b;
79
0
}
Unexecuted instantiation: _ZN4mops3DivEll
Unexecuted instantiation: _ZN4mops3DivEll
80
81
0
inline BigInt Rem(BigInt a, BigInt b) {
82
  // Is the behavior of negative values defined in C++?  Avoid difference with
83
  // Python.
84
0
  DCHECK(a >= 0);
85
0
  DCHECK(b >= 0);
86
0
  return a % b;
87
0
}
Unexecuted instantiation: _ZN4mops3RemEll
Unexecuted instantiation: _ZN4mops3RemEll
88
89
0
inline bool Equal(BigInt a, BigInt b) {
90
0
  return a == b;
91
0
}
92
93
0
inline bool Greater(BigInt a, BigInt b) {
94
0
  return a > b;
95
0
}
96
97
0
inline BigInt LShift(BigInt a, BigInt b) {
98
0
  return a << b;
99
0
}
100
101
0
inline BigInt RShift(BigInt a, BigInt b) {
102
0
  return a >> b;
103
0
}
104
105
0
inline BigInt BitAnd(BigInt a, BigInt b) {
106
0
  return a & b;
107
0
}
108
109
0
inline BigInt BitOr(BigInt a, BigInt b) {
110
0
  return a | b;
111
0
}
112
113
0
inline BigInt BitXor(BigInt a, BigInt b) {
114
0
  return a ^ b;
115
0
}
116
117
0
inline BigInt BitNot(BigInt a) {
118
0
  return ~a;
119
0
}
120
121
}  // namespace mops
122
123
#endif  // MYCPP_GC_MOPS_H