37template <
typename ValueType,
typename... Args>
40 size_t size =
sizeof(
typename std::remove_pointer<typename std::remove_reference<ValueType>::type>
::type);
41 if constexpr (
sizeof...(Args) > 0) {
53template <
typename TargetType,
typename ValueType,
typename... Args>
54static size_t copy_to(TargetType& wrtptr,
size_t count, ValueType*
array, Args&&... args)
56 static_assert(std::is_pointer<TargetType>::value ==
true,
"need reference to pointer");
57 static_assert(
sizeof(
typename std::remove_pointer<TargetType>::type) == 1,
"need char-like pointer");
60 if (
array !=
nullptr) {
62 memcpy(wrtptr,
array, copySize);
64 }
else if (
count > 0) {
65 throw std::runtime_error(
"invalid nullptr to array of " +
std::to_string(
count) +
" element(s)");
67 if constexpr (
sizeof...(Args) > 0) {
68 copySize += copy_to(wrtptr,
count, std::forward<Args>(args)...);
81template <
typename BufferType,
typename ValueType,
typename... Args>
82static size_t set_from(BufferType& readptr,
size_t count, ValueType&
array, Args&&... args)
84 static_assert(std::is_pointer<typename std::remove_reference<ValueType>::type>
::value ==
true,
"need reference to pointer");
85 array =
reinterpret_cast<typename std::remove_reference<ValueType>::type
>(readptr);
88 if constexpr (
sizeof...(Args) > 0) {
89 readSize += set_from(readptr,
count, std::forward<Args>(args)...);
101template <
typename BufferType,
typename... Args>
102static size_t calc_size(BufferType
const& dummyptr,
size_t count, Args&&... args)