3434#include < nil/marshalling/status_type.hpp>
3535#include < nil/crypto3/marshalling/multiprecision/types/bitfield.hpp>
3636
37-
3837namespace nil {
3938 namespace blueprint {
4039 namespace detail {
@@ -50,8 +49,10 @@ namespace nil {
5049 using native_field_t = BlueprintFieldType;
5150 using var_t = crypto3::zk::snark::plonk_variable<typename native_field_t ::value_type>;
5251
53- static constexpr std::size_t chopped_elements_amount = sizeof (chopped_lengths_storage::values)/sizeof (std::size_t );
54- static_assert (chopped_elements_amount != 0 , " native_bit_lengths must be specialized for the field types" );
52+ static constexpr std::size_t chopped_elements_amount =
53+ sizeof (chopped_lengths_storage::values) / sizeof (std::size_t );
54+ static_assert (chopped_elements_amount != 0 ,
55+ " native_bit_lengths must be specialized for the field types" );
5556
5657 using chopped_value_type = std::array<typename native_field_t ::value_type, chopped_elements_amount>;
5758 using non_native_var_t = std::array<var_t , chopped_elements_amount>;
@@ -69,41 +70,44 @@ namespace nil {
6970 // TODO: Check status here?
7071
7172 auto &members = chopping_field_instance.value ();
72- return convert_to_chopped_value_type (members, std::make_index_sequence<chopped_elements_amount>{});
73+ return convert_to_chopped_value_type (members, std::make_index_sequence<chopped_elements_amount> {});
74+ }
75+
76+ private:
77+ using be_field_base_t = marshalling::field_type<marshalling::option::big_endian>;
78+
79+ template <std::size_t bit_length>
80+ using intermediate_t =
81+ crypto3::marshalling::types::pure_field_element<be_field_base_t ,
82+ typename native_field_t ::value_type,
83+ marshalling::option::fixed_bit_length<bit_length>>;
84+
85+ // We need to reverse the lengths, because that's how the serialization works. Fields are written from
86+ // right to left
87+ template <std::size_t Index>
88+ using intermediate_for_index_t =
89+ intermediate_t <chopped_lengths_storage::values[chopped_elements_amount - Index - 1 ]>;
90+
91+ template <std::size_t ... Indices>
92+ static constexpr std::tuple<intermediate_for_index_t <Indices>...>
93+ generate_bitfield_tuple (std::index_sequence<Indices...>) {
94+ return {};
7395 }
7496
75- private:
76- using be_field_base_t = marshalling::field_type<marshalling::option::big_endian>;
77-
78- template <std::size_t bit_length>
79- using intermediate_t = crypto3::marshalling::types::pure_field_element<
80- be_field_base_t ,
81- typename native_field_t ::value_type,
82- marshalling::option::fixed_bit_length<bit_length>
83- >;
84-
85- // We need to reverse the lengths, because that's how the serialization works. Fields are written from right to left
86- template <std::size_t Index>
87- using intermediate_for_index_t = intermediate_t <chopped_lengths_storage::values[chopped_elements_amount-Index-1 ]>;
88-
89- template <std::size_t ... Indices>
90- static constexpr std::tuple<intermediate_for_index_t <Indices>...> generate_bitfield_tuple (std::index_sequence<Indices...>) {
91- return {};
92- }
93-
94- using chopping_field = nil::crypto3::marshalling::types::bitfield<
95- be_field_base_t ,
96- decltype (generate_bitfield_tuple(std::make_index_sequence<chopped_elements_amount>{}))
97- >;
98-
99- template <std::size_t ... Indices>
100- static chopped_value_type convert_to_chopped_value_type (const typename chopping_field::value_type& members, std::index_sequence<Indices...>) {
101- return {std::get<Indices>(members).value ()...};
102- }
97+ using chopping_field = nil::crypto3::marshalling::types::bitfield<
98+ be_field_base_t ,
99+ decltype (generate_bitfield_tuple(std::make_index_sequence<chopped_elements_amount> {}))>;
100+
101+ template <std::size_t ... Indices>
102+ static chopped_value_type
103+ convert_to_chopped_value_type (const typename chopping_field::value_type &members,
104+ std::index_sequence<Indices...>) {
105+ return {std::get<Indices>(members).value ()...};
106+ }
103107 };
104108
105109 } // namespace detail
106- } // namespace blueprint
110+ } // namespace blueprint
107111} // namespace nil
108112
109113#endif // CRYPTO3_BLUEPRINT_BASIC_NON_NATIVE_POLICY_DETAIL_HPP
0 commit comments