18 std::vector<uint8_t> limbs;
20 limbs.reserve(
std::max(num_limbs, num_p_limbs));
23 while (value_integer != 0) {
24 auto [quotient, remainder] = value_integer.
divmod(radix);
25 limbs.push_back(
static_cast<uint8_t
>(remainder));
26 value_integer = quotient;
29 if (num_limbs > limbs.size()) {
30 limbs.insert(limbs.end(), num_limbs - limbs.size(), 0);
40 bool truncated = num_limbs < limbs.size();
42 limbs.erase(limbs.begin() + num_limbs, limbs.end());
45 return { limbs, truncated };
69 uint16_t space_id =
memory.get_space_id();
76 uint64_t max_write_address =
static_cast<uint64_t
>(
dst_addr) + num_limbs - 1;
82 bool radix_is_lt_2 =
gt.gt(2, radix);
83 bool radix_is_gt_256 =
gt.gt(radix, 256);
86 bool invalid_bitwise_radix = is_output_bits && (radix != 2);
88 bool invalid_num_limbs = (num_limbs == 0) && (
value !=
FF(0));
93 .num_limbs = num_limbs,
97 .is_output_bits = is_output_bits,
101 if (dst_out_of_range || radix_is_lt_2 || radix_is_gt_256 || invalid_bitwise_radix || invalid_num_limbs) {
103 throw ToRadixException(
"Error during BE conversion: Invalid parameters for ToRadix");
106 bool truncated =
false;
109 event.limbs.reserve(num_limbs);
110 if (is_output_bits) {
111 const auto [limbs, truncated_decomposition] =
to_le_bits(
value, num_limbs);
112 truncated = truncated_decomposition;
113 std::ranges::for_each(limbs.rbegin(), limbs.rend(), [&](
bool bit) {
114 event.limbs.push_back(MemoryValue::from<uint1_t>(bit));
117 const auto [limbs, truncated_decomposition] =
to_le_radix(
value, num_limbs, radix);
118 truncated = truncated_decomposition;
119 std::ranges::for_each(limbs.rbegin(), limbs.rend(), [&](uint8_t limb) {
120 event.limbs.push_back(MemoryValue::from<uint8_t>(limb));
131 for (uint32_t i = 0; i < num_limbs; i++) {