diff options
author | bunnei <bunneidev@gmail.com> | 2018-07-20 01:18:38 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-07-20 01:18:38 +0200 |
commit | d3cfaf95c883512691df01e90d8ab7e8873c2c3d (patch) | |
tree | 0a9ca7761857f6855ed30f8ef2f99674cd7d119c /src/core/hle/kernel | |
parent | Merge pull request #725 from lioncash/bytes (diff) | |
parent | hle_ipc: Introduce generic WriteBuffer overload for multiple container types (diff) | |
download | yuzu-d3cfaf95c883512691df01e90d8ab7e8873c2c3d.tar yuzu-d3cfaf95c883512691df01e90d8ab7e8873c2c3d.tar.gz yuzu-d3cfaf95c883512691df01e90d8ab7e8873c2c3d.tar.bz2 yuzu-d3cfaf95c883512691df01e90d8ab7e8873c2c3d.tar.lz yuzu-d3cfaf95c883512691df01e90d8ab7e8873c2c3d.tar.xz yuzu-d3cfaf95c883512691df01e90d8ab7e8873c2c3d.tar.zst yuzu-d3cfaf95c883512691df01e90d8ab7e8873c2c3d.zip |
Diffstat (limited to 'src/core/hle/kernel')
-rw-r--r-- | src/core/hle/kernel/hle_ipc.cpp | 4 | ||||
-rw-r--r-- | src/core/hle/kernel/hle_ipc.h | 23 |
2 files changed, 21 insertions, 6 deletions
diff --git a/src/core/hle/kernel/hle_ipc.cpp b/src/core/hle/kernel/hle_ipc.cpp index 911e6fbc1..8f40bdd5a 100644 --- a/src/core/hle/kernel/hle_ipc.cpp +++ b/src/core/hle/kernel/hle_ipc.cpp @@ -301,10 +301,6 @@ size_t HLERequestContext::WriteBuffer(const void* buffer, size_t size, int buffe 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 { const bool is_buffer_a{BufferDescriptorA().size() && BufferDescriptorA()[buffer_index].Size()}; return is_buffer_a ? BufferDescriptorA()[buffer_index].Size() diff --git a/src/core/hle/kernel/hle_ipc.h b/src/core/hle/kernel/hle_ipc.h index 88f93ad22..01b805df8 100644 --- a/src/core/hle/kernel/hle_ipc.h +++ b/src/core/hle/kernel/hle_ipc.h @@ -5,8 +5,10 @@ #pragma once #include <array> +#include <iterator> #include <memory> #include <string> +#include <type_traits> #include <vector> #include <boost/container/small_vector.hpp> #include "common/common_types.h" @@ -171,8 +173,25 @@ public: /// 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; - /// Helper function to write a buffer using the appropriate buffer descriptor - size_t WriteBuffer(const std::vector<u8>& buffer, int buffer_index = 0) const; + /* Helper function to write a buffer using the appropriate buffer descriptor + * + * @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 size_t GetReadBufferSize(int buffer_index = 0) const; |