Home | History | Annotate | Download | only in source

Lines Matching refs:arg1

21 // Returns the result of adding arg1 and arg2 if it will fit in a T (where T is
25 T SafeAdd(T arg1, T arg2) {
32 if ((arg1 >= 0 && arg2 <= std::numeric_limits<T>::max() - arg1) ||
33 (arg1 < 0 && arg2 >= std::numeric_limits<T>::min() - arg1)) {
34 return arg1 + arg2;
41 // Returns the result of multiplying arg1 and arg2 if it will fit in a T (where
45 T SafeUnsignedMult(T arg1, T arg2) {
46 if (arg1 == 0 || arg2 <= std::numeric_limits<T>::max() / arg1) {
47 return arg1 * arg2;
56 bool SafeInt32Add(std::int32_t arg1, std::int32_t arg2, std::int32_t *result) {
58 *result = SafeInt32Add(arg1, arg2);
65 std::int32_t SafeInt32Add(std::int32_t arg1, std::int32_t arg2) {
66 return SafeAdd<std::int32_t>(arg1, arg2);
69 std::int64_t SafeInt64Add(std::int64_t arg1, std::int64_t arg2) {
70 return SafeAdd<std::int64_t>(arg1, arg2);
73 bool SafeUint32Add(std::uint32_t arg1, std::uint32_t arg2,
76 *result = SafeUint32Add(arg1, arg2);
83 std::uint32_t SafeUint32Add(std::uint32_t arg1, std::uint32_t arg2) {
84 return SafeAdd<std::uint32_t>(arg1, arg2);
87 std::uint64_t SafeUint64Add(std::uint64_t arg1, std::uint64_t arg2) {
88 return SafeAdd<std::uint64_t>(arg1, arg2);
91 bool SafeInt32Sub(std::int32_t arg1, std::int32_t arg2, std::int32_t *result) {
92 if ((arg2 >= 0 && arg1 >= std::numeric_limits<int32_t>::min() + arg2) ||
93 (arg2 < 0 && arg1 <= std::numeric_limits<int32_t>::max() + arg2)) {
94 *result = arg1 - arg2;
101 std::int32_t SafeInt32Sub(std::int32_t arg1, std::int32_t arg2) {
104 if (!SafeInt32Sub(arg1, arg2, &result)) {
111 std::uint32_t SafeUint32Sub(std::uint32_t arg1, std::uint32_t arg2) {
112 if (arg1 >= arg2) {
113 return arg1 - arg2;
120 bool SafeUint32Mult(std::uint32_t arg1, std::uint32_t arg2,
123 *result = SafeUint32Mult(arg1, arg2);
130 bool SafeUint32Mult(std::uint32_t arg1, std::uint32_t arg2, std::uint32_t arg3,
133 *result = SafeUint32Mult(arg1, arg2, arg3);
140 bool SafeUint32Mult(std::uint32_t arg1, std::uint32_t arg2, std::uint32_t arg3,
143 *result = SafeUint32Mult(arg1, arg2, arg3, arg4);
150 std::uint32_t SafeUint32Mult(std::uint32_t arg1, std::uint32_t arg2) {
151 return SafeUnsignedMult<std::uint32_t>(arg1, arg2);
154 std::uint32_t SafeUint32Mult(std::uint32_t arg1, std::uint32_t arg2,
156 return SafeUint32Mult(SafeUint32Mult(arg1, arg2), arg3);
159 std::uint32_t SafeUint32Mult(std::uint32_t arg1, std::uint32_t arg2,
161 return SafeUint32Mult(SafeUint32Mult(arg1, arg2, arg3), arg4);
164 std::int32_t SafeInt32Mult(std::int32_t arg1, std::int32_t arg2) {
166 static_cast<std::int64_t>(arg1) * static_cast<std::int64_t>(arg2);
176 std::size_t SafeSizetMult(std::size_t arg1, std::size_t arg2) {
177 return SafeUnsignedMult<std::size_t>(arg1, arg2);
182 std::int64_t SafeInt64MultSlow(std::int64_t arg1, std::int64_t arg2) {
185 if (arg1 > 0) {
187 overflow = (arg1 > std::numeric_limits<std::int64_t>::max() / arg2);
189 overflow = (arg2 < std::numeric_limits<std::int64_t>::min() / arg1);
193 overflow = (arg1 < std::numeric_limits<std::int64_t>::min() / arg2);
195 overflow = (arg1 != 0 &&
196 arg2 < std::numeric_limits<std::int64_t>::max() / arg1);
204 return arg1 * arg2;
210 std::uint32_t SafeUint32DivideUp(std::uint32_t arg1, std::uint32_t arg2) {
213 // return arg2 == 0 ? 0 : (arg1 + arg2 - 1) / arg2;
215 // but the expression "arg1 + arg2" can wrap around.
220 } else if (arg1 == 0) {
221 // If arg1 is zero, return zero to avoid wraparound in the expression
222 // "arg1 - 1" below.
225 return (arg1 - 1) / arg2 + 1;