#pragma once #include #include namespace floormat::entities::erased_constraints { struct range final { using U = std::size_t; using I = std::make_signed_t; enum type_ : unsigned char { type_none, type_float, type_uint, type_int, type_float4, type_uint4, type_int4, }; union element { float f; U u; I i; Math::Vector4 f4; Math::Vector4 u4; Math::Vector4 i4; }; element min {.i = 0}, max {.i = 0}; type_ type = type_none; template std::pair convert() const; friend bool operator==(const range& a, const range& b); }; struct max_length final { std::size_t value = std::size_t(-1); constexpr operator std::size_t() const { return value; } }; struct group final { StringView group_name; constexpr operator StringView() const { return group_name; } constexpr group() = default; constexpr group(StringView name) : group_name{name} {} }; } // namespace floormat::entities::erased_constraints