#pragma once #include #include namespace floormat::entities::erased_constraints { struct range final { using U = 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 = 0; Math::Vector4 f4; Math::Vector4 u4; Math::Vector4 i4; }; element min, max; type_ type = type_none; template std::pair convert() const; friend bool operator==(const range& a, const range& b); }; struct max_length final { size_t value = size_t(-1); constexpr operator size_t() const { return value; } }; } // namespace floormat::entities::erased_constraints