Flex
Flex exchange system
RationalValue.hpp
Go to the documentation of this file.
1 
7 #pragma once
8 
9 namespace tvm {
10 
12 struct RationalValue {
13  uint128 numerator() const { return num; }
14  uint128 denominator() const { return denum; }
15  uint128 num;
16  uint128 denum;
17 };
18 using price_t = RationalValue;
19 
20 __always_inline
21 uint128 mul(uint128 amount, RationalValue price) {
22  unsigned cost = __builtin_tvm_muldivr(amount.get(), price.numerator().get(), price.denominator().get());
23  require((cost >> 128) == 0, error_code::integer_overflow);
24  return uint128{cost};
25 }
26 
27 __always_inline
28 uint128 operator*(uint128 l, RationalValue r) {
29  return mul(l, r);
30 }
31 
32 __always_inline
33 uint128 operator*(RationalValue l, uint128 r) {
34  return mul(r, l);
35 }
36 
37 } // namespace tvm
38 
Rational value - numerator/denominator.
Definition: RationalValue.hpp:12
uint128 denominator() const
Denominator part of rational number.
Definition: RationalValue.hpp:14
uint128 numerator() const
Numerator part of rational number.
Definition: RationalValue.hpp:13