https://mooseframework.inl.gov
Functions
RayTracingPackingUtils::detail Namespace Reference

Functions

template<typename BufferType >
constexpr std::size_t mixedPackSizeHelper (const std::size_t offset, const std::size_t size)
 Helper for mixedPackSize(). More...
 
template<typename BufferType , typename InputType , typename... Rest>
constexpr std::size_t mixedPackSizeHelper (std::size_t offset, std::size_t size)
 Recursive helper for mixedPackSize(). More...
 
template<typename BufferType , typename BufferIter , typename ValueType >
void mixedUnpackHelper (BufferIter &in, const BufferType *&src, std::size_t &src_offset, ValueType &output)
 Helper for mixedUnpack() More...
 
template<typename BufferIter , typename BufferType , typename ValueType >
void mixedPackHelper (BufferIter &out, BufferType &dest, std::size_t &dest_offset, const ValueType &input)
 Helper for mixedPack() More...
 

Function Documentation

◆ mixedPackHelper()

template<typename BufferIter , typename BufferType , typename ValueType >
void RayTracingPackingUtils::detail::mixedPackHelper ( BufferIter &  out,
BufferType &  dest,
std::size_t &  dest_offset,
const ValueType &  input 
)

Helper for mixedPack()

Definition at line 161 of file RayTracingPackingUtils.h.

Referenced by RayTracingPackingUtils::mixedPack().

165 {
166  static_assert(sizeof(ValueType) <= sizeof(BufferType), "ValueType will not fit into BufferType");
167 
168  if (dest_offset + sizeof(ValueType) > sizeof(BufferType))
169  {
170  out++ = dest;
171  dest_offset = 0;
172  }
173 
174  std::memcpy((char *)&dest + dest_offset, &input, sizeof(ValueType));
175  dest_offset += sizeof(ValueType);
176 }
OStreamProxy out

◆ mixedPackSizeHelper() [1/2]

template<typename BufferType >
constexpr std::size_t RayTracingPackingUtils::detail::mixedPackSizeHelper ( const std::size_t  offset,
const std::size_t  size 
)

Helper for mixedPackSize().

Called after evaluating the last InputType, and increases the size if any offset remains

Definition at line 114 of file RayTracingPackingUtils.h.

Referenced by RayTracingPackingUtils::mixedPackSize(), and mixedPackSizeHelper().

115 {
116  return offset ? size + 1 : size;
117 }

◆ mixedPackSizeHelper() [2/2]

template<typename BufferType , typename InputType , typename... Rest>
constexpr std::size_t RayTracingPackingUtils::detail::mixedPackSizeHelper ( std::size_t  offset,
std::size_t  size 
)

Recursive helper for mixedPackSize().

Recurses through the types (in InputType and rest), and increments the offset and size as needed

Definition at line 127 of file RayTracingPackingUtils.h.

128 {
129  return offset + sizeof(InputType) > sizeof(BufferType)
130  ? mixedPackSizeHelper<BufferType, Rest...>(sizeof(InputType), ++size)
131  : mixedPackSizeHelper<BufferType, Rest...>(offset + sizeof(InputType), size);
132 }
constexpr std::size_t mixedPackSizeHelper(std::size_t offset, std::size_t size)
Recursive helper for mixedPackSize().

◆ mixedUnpackHelper()

template<typename BufferType , typename BufferIter , typename ValueType >
void RayTracingPackingUtils::detail::mixedUnpackHelper ( BufferIter &  in,
const BufferType *&  src,
std::size_t &  src_offset,
ValueType &  output 
)

Helper for mixedUnpack()

Definition at line 139 of file RayTracingPackingUtils.h.

Referenced by RayTracingPackingUtils::mixedUnpack().

143 {
144  static_assert(sizeof(ValueType) <= sizeof(BufferType), "ValueType will not fit into BufferType");
145 
146  if (src_offset + sizeof(ValueType) > sizeof(BufferType))
147  {
148  src = &(*in++);
149  src_offset = 0;
150  }
151 
152  std::memcpy(&output, (char *)src + src_offset, sizeof(ValueType));
153  src_offset += sizeof(ValueType);
154 }