libdonut  2.3.2
Application framework for cross-platform game development in C++20
Public Types | Public Member Functions | Public Attributes | Static Public Attributes | List of all members
donut::LinearBuffer< Ts > Class Template Reference

#include <donut/LinearBuffer.hpp>

Public Types

using index_type = std::conditional_t< sizeof...(Ts)< 255ull, std::uint8_t, std::conditional_t< sizeof...(Ts)< 65535ull, std::uint16_t, std::conditional_t< sizeof...(Ts)< 4294967295ull, std::uint32_t, std::uint64_t > >>
 

Public Member Functions

 LinearBuffer (LinearMemoryResource *memoryResource, std::size_t nextChunkSize=64) noexcept
 
template<typename T >
void push_back (const T &value) requires(!std
 
template<typename T , typename... Args>
void emplace_back (Args &&... args) requires(!std
 
template<typename T >
std::span< const T > append (std::span< const T > values) requires(linear_buffer_has_alternative_v< T[]
 
 if (remainingMemorySize< minRequiredSize||(!values.empty() &&!std::align(alignof(T), values.size_bytes(), alignedPointer, space)))
 
 std::memcpy (remainingMemoryBegin, &index, sizeof(index_type))
 
 std::memcpy (remainingMemoryBegin+sizeof(index_type), &count, sizeof(std::size_t))
 
 std::memcpy (alignedPointer, values.data(), values.size_bytes())
 
template<typename Visitor >
auto visit (Visitor &&visitor) const
 

Public Attributes

std::span< const T > LinearBuffer
 
const std::size_t remainingMemorySize = static_cast<std::size_t>(remainingMemoryEnd - remainingMemoryBegin)
 
void * alignedPointer = remainingMemoryBegin + HEADER_SIZE
 
const std::size_t minRequiredSize = HEADER_SIZE + sizeof(index_type) + sizeof(std::byte*)
 
std::size_t space = remainingMemorySize - minRequiredSize
 
constexpr index_type index = linear_buffer_index_v<T[], LinearBuffer>
 
const std::size_t count = values.size()
 
 remainingMemoryBegin = static_cast<std::byte*>(alignedPointer) + values.size_bytes()
 

Static Public Attributes

static constexpr index_type npos = sizeof...(Ts)
 

Member Typedef Documentation

◆ index_type

template<typename... Ts>
using donut::LinearBuffer< Ts >::index_type = std::conditional_t<sizeof...(Ts) < 255ull, std::uint8_t, std::conditional_t<sizeof...(Ts) < 65535ull, std::uint16_t, std::conditional_t<sizeof...(Ts) < 4294967295ull, std::uint32_t, std::uint64_t> >>

Constructor & Destructor Documentation

◆ LinearBuffer()

template<typename... Ts>
donut::LinearBuffer< Ts >::LinearBuffer ( LinearMemoryResource memoryResource,
std::size_t  nextChunkSize = 64 
)
inlineexplicitnoexcept

Member Function Documentation

◆ push_back()

template<typename... Ts>
template<typename T >
void donut::LinearBuffer< Ts >::push_back ( const T &  value)
inline

◆ emplace_back()

template<typename... Ts>
template<typename T , typename... Args>
void donut::LinearBuffer< Ts >::emplace_back ( Args &&...  args)
inline

◆ append()

template<typename... Ts>
template<typename T >
std::span<const T> donut::LinearBuffer< Ts >::append ( std::span< const T >  values)

◆ if()

template<typename... Ts>
donut::LinearBuffer< Ts >::if ( )
inline

◆ std::memcpy() [1/3]

template<typename... Ts>
donut::LinearBuffer< Ts >::std::memcpy ( remainingMemoryBegin  ,
index,
sizeof(index_type  
)

◆ std::memcpy() [2/3]

template<typename... Ts>
donut::LinearBuffer< Ts >::std::memcpy ( remainingMemoryBegin sizeofindex_type,
count,
sizeof(std::size_t)   
)

◆ std::memcpy() [3/3]

template<typename... Ts>
donut::LinearBuffer< Ts >::std::memcpy ( alignedPointer  ,
values.  data(),
values.  size_bytes() 
)

◆ visit()

template<typename... Ts>
template<typename Visitor >
auto donut::LinearBuffer< Ts >::visit ( Visitor &&  visitor) const
inline

Member Data Documentation

◆ npos

template<typename... Ts>
constexpr index_type donut::LinearBuffer< Ts >::npos = sizeof...(Ts)
staticconstexpr

◆ LinearBuffer

template<typename... Ts>
std::span<const T> donut::LinearBuffer< Ts >::LinearBuffer
Initial value:
{
constexpr std::size_t HEADER_SIZE = sizeof(index_type) + sizeof(std::size_t)
std::conditional_t< sizeof...(Ts)< 255ull, std::uint8_t, std::conditional_t< sizeof...(Ts)< 65535ull, std::uint16_t, std::conditional_t< sizeof...(Ts)< 4294967295ull, std::uint32_t, std::uint64_t > >> index_type
Definition: LinearBuffer.hpp:119

◆ remainingMemorySize

template<typename... Ts>
const std::size_t donut::LinearBuffer< Ts >::remainingMemorySize = static_cast<std::size_t>(remainingMemoryEnd - remainingMemoryBegin)

◆ alignedPointer

template<typename... Ts>
void* donut::LinearBuffer< Ts >::alignedPointer = remainingMemoryBegin + HEADER_SIZE

◆ minRequiredSize

template<typename... Ts>
const std::size_t donut::LinearBuffer< Ts >::minRequiredSize = HEADER_SIZE + sizeof(index_type) + sizeof(std::byte*)

◆ space

template<typename... Ts>
std::size_t donut::LinearBuffer< Ts >::space = remainingMemorySize - minRequiredSize

◆ index

template<typename... Ts>
constexpr index_type donut::LinearBuffer< Ts >::index = linear_buffer_index_v<T[], LinearBuffer>
constexpr

◆ count

template<typename... Ts>
const std::size_t donut::LinearBuffer< Ts >::count = values.size()

◆ remainingMemoryBegin

template<typename... Ts>
donut::LinearBuffer< Ts >::remainingMemoryBegin = static_cast<std::byte*>(alignedPointer) + values.size_bytes()

The documentation for this class was generated from the following file: