mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu.git
				synced 2025-05-12 00:45:25 +00:00 
			
		
		
		
	Merge pull request #726 from lioncash/overload
hle_ipc: Introduce generic WriteBuffer overload for multiple container types
This commit is contained in:
		
						commit
						d3cfaf95c8
					
				| @ -301,10 +301,6 @@ size_t HLERequestContext::WriteBuffer(const void* buffer, size_t size, int buffe | |||||||
|     return size; |     return size; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| size_t HLERequestContext::WriteBuffer(const std::vector<u8>& buffer, int buffer_index) const { |  | ||||||
|     return WriteBuffer(buffer.data(), buffer.size(), buffer_index); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| size_t HLERequestContext::GetReadBufferSize(int buffer_index) const { | size_t HLERequestContext::GetReadBufferSize(int buffer_index) const { | ||||||
|     const bool is_buffer_a{BufferDescriptorA().size() && BufferDescriptorA()[buffer_index].Size()}; |     const bool is_buffer_a{BufferDescriptorA().size() && BufferDescriptorA()[buffer_index].Size()}; | ||||||
|     return is_buffer_a ? BufferDescriptorA()[buffer_index].Size() |     return is_buffer_a ? BufferDescriptorA()[buffer_index].Size() | ||||||
|  | |||||||
| @ -5,8 +5,10 @@ | |||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
| #include <array> | #include <array> | ||||||
|  | #include <iterator> | ||||||
| #include <memory> | #include <memory> | ||||||
| #include <string> | #include <string> | ||||||
|  | #include <type_traits> | ||||||
| #include <vector> | #include <vector> | ||||||
| #include <boost/container/small_vector.hpp> | #include <boost/container/small_vector.hpp> | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| @ -171,8 +173,25 @@ public: | |||||||
|     /// Helper function to write a buffer using the appropriate buffer descriptor
 |     /// Helper function to write a buffer using the appropriate buffer descriptor
 | ||||||
|     size_t WriteBuffer(const void* buffer, size_t size, int buffer_index = 0) const; |     size_t WriteBuffer(const void* buffer, size_t size, int buffer_index = 0) const; | ||||||
| 
 | 
 | ||||||
|     /// Helper function to write a buffer using the appropriate buffer descriptor
 |     /* Helper function to write a buffer using the appropriate buffer descriptor
 | ||||||
|     size_t WriteBuffer(const std::vector<u8>& buffer, int buffer_index = 0) const; |      * | ||||||
|  |      * @tparam ContiguousContainer an arbitrary container that satisfies the | ||||||
|  |      *         ContiguousContainer concept in the C++ standard library. | ||||||
|  |      * | ||||||
|  |      * @param container    The container to write the data of into a buffer. | ||||||
|  |      * @param buffer_index The buffer in particular to write to. | ||||||
|  |      */ | ||||||
|  |     template <typename ContiguousContainer, | ||||||
|  |               typename = std::enable_if_t<!std::is_pointer_v<ContiguousContainer>>> | ||||||
|  |     size_t WriteBuffer(const ContiguousContainer& container, int buffer_index = 0) const { | ||||||
|  |         using ContiguousType = typename ContiguousContainer::value_type; | ||||||
|  | 
 | ||||||
|  |         static_assert(std::is_trivially_copyable_v<ContiguousType>, | ||||||
|  |                       "Container to WriteBuffer must contain trivially copyable objects"); | ||||||
|  | 
 | ||||||
|  |         return WriteBuffer(std::data(container), std::size(container) * sizeof(ContiguousType), | ||||||
|  |                            buffer_index); | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     /// Helper function to get the size of the input buffer
 |     /// Helper function to get the size of the input buffer
 | ||||||
|     size_t GetReadBufferSize(int buffer_index = 0) const; |     size_t GetReadBufferSize(int buffer_index = 0) const; | ||||||
|  | |||||||
| @ -168,7 +168,7 @@ void AudOutU::ListAudioOutsImpl(Kernel::HLERequestContext& ctx) { | |||||||
|     IPC::RequestParser rp{ctx}; |     IPC::RequestParser rp{ctx}; | ||||||
| 
 | 
 | ||||||
|     const std::string audio_interface = "AudioInterface"; |     const std::string audio_interface = "AudioInterface"; | ||||||
|     ctx.WriteBuffer(audio_interface.c_str(), audio_interface.size()); |     ctx.WriteBuffer(audio_interface); | ||||||
| 
 | 
 | ||||||
|     IPC::ResponseBuilder rb = rp.MakeBuilder(3, 0, 0); |     IPC::ResponseBuilder rb = rp.MakeBuilder(3, 0, 0); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -299,7 +299,7 @@ private: | |||||||
|         IPC::RequestParser rp{ctx}; |         IPC::RequestParser rp{ctx}; | ||||||
| 
 | 
 | ||||||
|         const std::string audio_interface = "AudioInterface"; |         const std::string audio_interface = "AudioInterface"; | ||||||
|         ctx.WriteBuffer(audio_interface.c_str(), audio_interface.size()); |         ctx.WriteBuffer(audio_interface); | ||||||
| 
 | 
 | ||||||
|         IPC::ResponseBuilder rb = rp.MakeBuilder(3, 0, 0); |         IPC::ResponseBuilder rb = rp.MakeBuilder(3, 0, 0); | ||||||
|         rb.Push(RESULT_SUCCESS); |         rb.Push(RESULT_SUCCESS); | ||||||
| @ -324,7 +324,7 @@ private: | |||||||
|         IPC::RequestParser rp{ctx}; |         IPC::RequestParser rp{ctx}; | ||||||
| 
 | 
 | ||||||
|         const std::string audio_interface = "AudioDevice"; |         const std::string audio_interface = "AudioDevice"; | ||||||
|         ctx.WriteBuffer(audio_interface.c_str(), audio_interface.size()); |         ctx.WriteBuffer(audio_interface); | ||||||
| 
 | 
 | ||||||
|         IPC::ResponseBuilder rb = rp.MakeBuilder(3, 0, 0); |         IPC::ResponseBuilder rb = rp.MakeBuilder(3, 0, 0); | ||||||
|         rb.Push(RESULT_SUCCESS); |         rb.Push(RESULT_SUCCESS); | ||||||
|  | |||||||
| @ -31,7 +31,7 @@ void SET::GetAvailableLanguageCodes(Kernel::HLERequestContext& ctx) { | |||||||
|         LanguageCode::ZH_HANS, |         LanguageCode::ZH_HANS, | ||||||
|         LanguageCode::ZH_HANT, |         LanguageCode::ZH_HANT, | ||||||
|     }}; |     }}; | ||||||
|     ctx.WriteBuffer(available_language_codes.data(), available_language_codes.size()); |     ctx.WriteBuffer(available_language_codes); | ||||||
| 
 | 
 | ||||||
|     IPC::ResponseBuilder rb{ctx, 4}; |     IPC::ResponseBuilder rb{ctx, 4}; | ||||||
|     rb.Push(RESULT_SUCCESS); |     rb.Push(RESULT_SUCCESS); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 bunnei
						bunnei