|
|
|
@ -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;
|
|
|
|
|