|  |  | @ -117,7 +117,7 @@ public: | 
			
		
	
		
			
				
					|  |  |  |     [[nodiscard]] cases::RangesUnion cases() const; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     /// Get the group instance with the specified pattern id.
 | 
			
		
	
		
			
				
					|  |  |  |     [[nodiscard]] constexpr std::optional<Groups> groups(uint_fast16_t pattern_id) const; | 
			
		
	
		
			
				
					|  |  |  |     [[nodiscard]] constexpr std::optional<Groups> groups(uint_least16_t pattern_id) const; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     // ------------------------------------------------------------------------------------- //
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  | @ -156,8 +156,23 @@ private: | 
			
		
	
		
			
				
					|  |  |  |     // ------------------------------------------------------------------------------------- //
 | 
			
		
	
		
			
				
					|  |  |  | }; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | // TODO: using macro for all likely-class
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | static_assert(std::is_standard_layout_v<GroupUnion>); | 
			
		
	
		
			
				
					|  |  |  | static_assert(std::is_trivially_copyable_v<GroupUnion>); | 
			
		
	
		
			
				
					|  |  |  | static_assert(!std::is_default_constructible_v<GroupUnion>); | 
			
		
	
		
			
				
					|  |  |  | static_assert(std::is_trivially_destructible_v<GroupUnion>); | 
			
		
	
		
			
				
					|  |  |  | static_assert(std::is_nothrow_destructible_v<GroupUnion>); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | static_assert(std::is_nothrow_copy_assignable_v<GroupUnion>); | 
			
		
	
		
			
				
					|  |  |  | static_assert(std::is_nothrow_move_assignable_v<GroupUnion>); | 
			
		
	
		
			
				
					|  |  |  | static_assert(std::is_nothrow_copy_constructible_v<GroupUnion>); | 
			
		
	
		
			
				
					|  |  |  | static_assert(std::is_nothrow_move_constructible_v<GroupUnion>); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | static_assert(std::is_trivially_copy_assignable_v<GroupUnion>); | 
			
		
	
		
			
				
					|  |  |  | static_assert(std::is_trivially_move_assignable_v<GroupUnion>); | 
			
		
	
		
			
				
					|  |  |  | static_assert(std::is_trivially_copy_constructible_v<GroupUnion>); | 
			
		
	
		
			
				
					|  |  |  | static_assert(std::is_trivially_move_constructible_v<GroupUnion>); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | class Group { | 
			
		
	
		
			
				
					|  |  |  | public: | 
			
		
	
	
		
			
				
					|  |  | @ -198,11 +213,11 @@ public: | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     /// Create Group without any check.
 | 
			
		
	
		
			
				
					|  |  |  |     static constexpr Group unsafe_create(uint_fast8_t type_id, | 
			
		
	
		
			
				
					|  |  |  |                                          uint_fast16_t pattern_id, Toward toward); | 
			
		
	
		
			
				
					|  |  |  |                                          uint_least16_t pattern_id, Toward toward); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     /// Create Group with validity check.
 | 
			
		
	
		
			
				
					|  |  |  |     static constexpr std::optional<Group> create(uint_fast8_t type_id, | 
			
		
	
		
			
				
					|  |  |  |                                                  uint_fast16_t pattern_id, Toward toward); | 
			
		
	
		
			
				
					|  |  |  |                                                  uint_least16_t pattern_id, Toward toward); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     // ------------------------------------------------------------------------------------- //
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  | @ -258,13 +273,13 @@ public: | 
			
		
	
		
			
				
					|  |  |  | private: | 
			
		
	
		
			
				
					|  |  |  |     Toward toward_; | 
			
		
	
		
			
				
					|  |  |  |     uint_fast8_t type_id_; | 
			
		
	
		
			
				
					|  |  |  |     uint_fast16_t pattern_id_; | 
			
		
	
		
			
				
					|  |  |  |     uint_least16_t pattern_id_; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     /// Tiled merge of type_id and pattern_id.
 | 
			
		
	
		
			
				
					|  |  |  |     [[nodiscard]] constexpr uint32_t flat_id() const; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     /// Hidden constructor called from unsafe_create.
 | 
			
		
	
		
			
				
					|  |  |  |     constexpr Group(Toward toward, uint_fast8_t type_id, uint_fast16_t pattern_id); | 
			
		
	
		
			
				
					|  |  |  |     constexpr Group(Toward toward, uint_fast8_t type_id, uint_least16_t pattern_id); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     // ------------------------------------------------------------------------------------- //
 | 
			
		
	
		
			
				
					|  |  |  | }; | 
			
		
	
	
		
			
				
					|  |  | 
 |