mycpp

Coverage Report

Created: 2024-07-09 17:10

/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
1
inline int BigTruncate(BigInt b) {
34
1
  return static_cast<int>(b);
35
1
}
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
1
inline float ToFloat(BigInt b) {
50
  // TODO: test this
51
1
  return static_cast<float>(b);
52
1
}
53
54
2
inline BigInt FromFloat(float f) {
55
  // TODO: test this
56
2
  return static_cast<BigInt>(f);
57
2
}
58
59
0
inline BigInt Negate(BigInt b) {
60
0
  return -b;
61
0
}
62
63
0
inline BigInt Add(BigInt a, BigInt b) {
64
0
  return a + b;
65
0
}
66
67
0
inline BigInt Sub(BigInt a, BigInt b) {
68
0
  return a - b;
69
0
}
70
71
0
inline BigInt Mul(BigInt a, BigInt b) {
72
0
  return a * b;
73
0
}
74
75
0
inline BigInt Div(BigInt a, BigInt b) {
76
0
  // Is the behavior of negative values defined in C++?  Avoid difference with
77
0
  // Python.
78
0
  DCHECK(a >= 0);
79
0
  DCHECK(b >= 0);
80
0
  return a / b;
81
0
}
82
83
0
inline BigInt Rem(BigInt a, BigInt b) {
84
0
  // Is the behavior of negative values defined in C++?  Avoid difference with
85
0
  // Python.
86
0
  DCHECK(a >= 0);
87
0
  DCHECK(b >= 0);
88
0
  return a % b;
89
0
}
90
91
0
inline bool Equal(BigInt a, BigInt b) {
92
0
  return a == b;
93
0
}
94
95
0
inline bool Greater(BigInt a, BigInt b) {
96
0
  return a > b;
97
0
}
98
99
0
inline BigInt LShift(BigInt a, BigInt b) {
100
0
  return a << b;
101
0
}
102
103
0
inline BigInt RShift(BigInt a, BigInt b) {
104
0
  return a >> b;
105
0
}
106
107
0
inline BigInt BitAnd(BigInt a, BigInt b) {
108
0
  return a & b;
109
0
}
110
111
0
inline BigInt BitOr(BigInt a, BigInt b) {
112
0
  return a | b;
113
0
}
114
115
0
inline BigInt BitXor(BigInt a, BigInt b) {
116
0
  return a ^ b;
117
0
}
118
119
0
inline BigInt BitNot(BigInt a) {
120
0
  return ~a;
121
0
}
122
123
}  // namespace mops
124
125
#endif  // MYCPP_GC_MOPS_H