mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu.git
				synced 2025-05-12 00:45:25 +00:00 
			
		
		
		
	ipc_helpers: Add PushEnum() member function to ResponseBuilder
Allows pushing strongly-typed enum members without the need to always
cast them at the call sites.
Note that we *only* allow strongly-typed enums in this case. The reason
for this is that strongly typed enums have a guaranteed defined size, so
the size of the data being pushed is always deterministic. With regular
enums this can be a little more error-prone, so we disallow them.
This function simply uses the underlying type of the enum to determine
the size of the data. For example, if an enum is defined as:
enum class SomeEnum : u16 {
  SomeEntry
};
if PushEnum(SomeEnum::SomeEntry); is called, then it will push a
u16-size amount of data.
			
			
This commit is contained in:
		
							parent
							
								
									c1c9ab31e8
								
							
						
					
					
						commit
						0a0b3c4b9f
					
				| @ -174,6 +174,25 @@ public: | |||||||
|     template <typename First, typename... Other> |     template <typename First, typename... Other> | ||||||
|     void Push(const First& first_value, const Other&... other_values); |     void Push(const First& first_value, const Other&... other_values); | ||||||
| 
 | 
 | ||||||
|  |     /**
 | ||||||
|  |      * Helper function for pushing strongly-typed enumeration values. | ||||||
|  |      * | ||||||
|  |      * @tparam Enum The enumeration type to be pushed | ||||||
|  |      * | ||||||
|  |      * @param value The value to push. | ||||||
|  |      * | ||||||
|  |      * @note The underlying size of the enumeration type is the size of the | ||||||
|  |      *       data that gets pushed. e.g. "enum class SomeEnum : u16" will | ||||||
|  |      *       push a u16-sized amount of data. | ||||||
|  |      */ | ||||||
|  |     template <typename Enum> | ||||||
|  |     void PushEnum(Enum value) { | ||||||
|  |         static_assert(std::is_enum_v<Enum>, "T must be an enum type within a PushEnum call."); | ||||||
|  |         static_assert(!std::is_convertible_v<Enum, int>, | ||||||
|  |                       "enum type in PushEnum must be a strongly typed enum."); | ||||||
|  |         Push(static_cast<std::underlying_type_t<Enum>>(value)); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     /**
 |     /**
 | ||||||
|      * @brief Copies the content of the given trivially copyable class to the buffer as a normal |      * @brief Copies the content of the given trivially copyable class to the buffer as a normal | ||||||
|      * param |      * param | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Lioncash
						Lioncash