46 template <
class... Args>
48 : m_value(
std::forward<Args>(args)...)
52 [[nodiscard]]
constexpr const T&
get() const noexcept
57 [[nodiscard]]
constexpr T&
get() noexcept
72 template <
class T,
class KEY_TYPE = std::u
int64_t>
79 using base_type::base_type;
87 template <
class T,
class LENGTH_TYPE = std::u
int64_t>
94 using base_type::base_type;
131 template <
class F, std::size_t... Is>
135 (f(std::integral_constant<std::size_t, Is>{}), ...);
138 template <std::
size_t SIZE,
class F>
144 template <
class F, std::size_t... Is>
147 return (f(std::integral_constant<std::size_t, Is>{}) && ...);
150 template <std::
size_t SIZE,
class F>
156 template <
class T, std::
size_t N>
158 typename std::tuple_element_t<N, std::remove_const_t<T>>;
159 { get<N>(t) } -> std::convertible_to<const std::tuple_element_t<N, T>&>;
162 template <
typename T, std::size_t... N>
168 template <
typename T>
174 template <
typename T>
177 !std::is_reference_v<T> &&
180 requires(
const T& v) {
181 { v.index() } -> std::convertible_to<std::size_t>;
186 std::visit([](
auto&&) {}, v);
196 { std::get<typename std::variant_alternative<0, T>::type>(v) };
199 template <
typename T>
200 concept tuple_like = !std::is_reference_v<T> &&
requires(T t) {
201 typename std::tuple_size<T>::type;
202 requires std::derived_from<std::tuple_size<T>, std::integral_constant<std::size_t, std::tuple_size_v<T>>>;
205 template <
typename Tuple,
size_t... Is>
208 return sizeof...(Is) == 0
209 || ((std::is_same_v<std::tuple_element_t<0, Tuple>, std::tuple_element_t<Is, Tuple>>) && ...);
212 template <
typename T>
215 std::make_index_sequence<std::tuple_size_v<T>>{}
224 template <is_nullable_like T>
227 using type =
typename T::value_type;
240 template <is_express_layout_desire T>
243 using type =
typename T::value_type;
273 using decayed = std::decay_t<T>;
291 return static_cast<std::size_t
>(t.size());
298 using decayed = std::decay_t<T>;
305 return std::forward<T>(t);
309 template <std::ranges::range T>
310 requires(is_nullable_like<std::ranges::range_value_t<T>>)
311 [[nodiscard]]
constexpr std::vector<std::size_t>
where_null(T&& t)
313 std::vector<std::size_t> result;
314 for (std::size_t i = 0; i < t.size(); ++i)
316 if (!t[i].has_value())
326 is_express_layout_desire<std::ranges::range_value_t<T>>
327 && is_nullable_like<typename std::ranges::range_value_t<T>::value_type>
329 [[nodiscard]]
constexpr std::vector<std::size_t>
where_null(T&& t)
331 std::vector<std::size_t> result;
332 for (std::size_t i = 0; i < t.size(); ++i)
334 if (!(t[i].get().has_value()))
343 [[nodiscard]]
constexpr std::array<std::size_t, 0>
where_null(T&&) noexcept
349 requires(is_plain_value_type<std::ranges::range_value_t<T>>)
352 return std::forward<T>(t);
356 requires(!is_plain_value_type<std::ranges::range_value_t<T>>)
360 | std::views::transform(
constexpr const T & get() const noexcept
constexpr express_layout_desire()=default
express_layout_desire< T > self_type
express_layout_desire(Args &&... args)
constexpr T & get() noexcept
bool exitable_for_each_index_impl(F &&f, std::index_sequence< Is... >)
std::conditional_t< is_dict_encode< mnv_t< T > >, enforce_dict_encoded_layout, std::conditional_t< is_run_end_encode< mnv_t< T > >, enforce_run_end_encoded_layout, dont_enforce_layout > > layout_flag_t
typename maybe_nullable_value_type< T >::type mnv_t
constexpr decltype(auto) ensure_value_range(T &&t) noexcept
look_trough_t< std::ranges::range_value_t< T > > ensured_range_value_t
meldv_t< mnv_t< meldv_t< T > > > look_trough_t
ensured_range_value_t< ensured_range_value_t< T > > nested_ensured_range_inner_value_t
constexpr bool check_tuple_elements(std::index_sequence< N... >)
constexpr std::size_t get_size_save(T &&t)
constexpr bool is_tuple_like()
std::decay_t< std::ranges::range_value_t< T > > decayed_range_value_t
constexpr bool all_elements_same_impl(std::index_sequence< Is... >)
constexpr std::vector< std::size_t > where_null(T &&t)
constexpr decltype(auto) ensure_value(T &&t)
typename maybe_express_layout_desire_value_type< T >::type meldv_t
bool exitable_for_each_index(F &&f)
void for_each_index(F &&f)
void for_each_index_impl(F &&f, std::index_sequence< Is... >)
constexpr bool is_type_instance_of_v
Variable template for convenient access to is_type_instance_of.
constexpr bool is_nullable_v
typename T::value_type type
typename T::value_type type