17 auto limbs = std::vector<uint8_t>();
18 size_t radix_index =
static_cast<size_t>(radix);
21 while (value_integer > 0) {
22 limbs.push_back(
static_cast<uint8_t
>(value_integer % radix));
23 value_integer /= radix;
26 if (num_limbs > limbs.size()) {
27 limbs.insert(limbs.end(), num_limbs - limbs.size(), 0);
37 if (num_limbs < limbs.size()) {
38 limbs.erase(limbs.begin() + num_limbs, limbs.end());
64 uint32_t space_id =
memory.get_space_id();
72 uint64_t max_write_address =
static_cast<uint64_t
>(
dst_addr) + num_limbs - 1;
78 bool radix_is_lt_2 =
gt.gt(2, radix);
79 bool radix_is_gt_256 =
gt.gt(radix, 256);
82 bool invalid_bitwise_radix = is_output_bits && (radix != 2);
84 bool invalid_num_limbs = (num_limbs == 0) && (
value !=
FF(0));
86 if (dst_out_of_range || radix_is_lt_2 || radix_is_gt_256 || invalid_bitwise_radix || invalid_num_limbs) {
87 throw std::runtime_error(
"Invalid parameters for ToRadix");
92 be_output_limbs.reserve(num_limbs);
95 std::ranges::for_each(output_bits.rbegin(), output_bits.rend(), [&](
bool bit) {
96 be_output_limbs.push_back(MemoryValue::from<uint1_t>(bit));
100 std::ranges::for_each(output_limbs_u8.rbegin(), output_limbs_u8.rend(), [&](uint8_t limb) {
101 be_output_limbs.push_back(MemoryValue::from<uint8_t>(limb));
105 for (uint32_t i = 0; i < num_limbs; i++) {
110 .execution_clk = execution_clk,
111 .space_id = space_id,
115 .is_output_bits = is_output_bits,
116 .limbs = be_output_limbs,
119 }
catch (
const std::exception& e) {
121 .execution_clk = execution_clk,
122 .space_id = space_id,
126 .is_output_bits = is_output_bits,
129 throw ToRadixException(
"Error during BE conversion, " + std::string(e.what()));