8#ifndef COLUMNAR_CORE_VECTOR_COLUMN_H
9#define COLUMNAR_CORE_VECTOR_COLUMN_H
33 template<
typename CT,ColumnarMode CM>
34 requires (CM::useNestedVectors)
42 static_assert (
BaseAccessor::isDefined,
"Element type for std::vector has no accessor defined. Please check includes and whether the type is supported.");
58 return [] (
const MemoryType& value) {
return std::span<const ElementType> (value);};
61 return [viewer = BaseAccessor::makeViewer(dataArea)] (
const MemoryType& value) {
return VectorConvertView (viewer, std::span<const ElementType> (value));};
92 std::string offsetColumn;
94 offsetColumn = optionsArray.baseName +
".offset";
97 if (optionsArray.numOffsets == 0u)
98 offsetColumn = optionsArray.baseName +
".outerOffset";
100 offsetColumn = optionsArray.baseName +
".innerOffset";
103 offsetColumn = optionsArray.baseName +
".offset" + std::to_string(optionsArray.numOffsets);
106 auto offsetInfo = options.makeColumnInfo();
107 offsetInfo.offsetName = optionsArray.offsetName;
108 offsetInfo.isOffset =
true;
110 columnarTool.addColumn (offsetColumn,
m_offsetData.get(), std::move (offsetInfo));
111 auto dataOptions = optionsArray;
112 dataOptions.offsetName = offsetColumn;
113 dataOptions.dataSuffix =
".data";
114 dataOptions.numOffsets += 1u;
134 auto operator () (
void** dataArea, std::size_t
index)
const noexcept
140 auto operator () (
void** dataArea, std::size_t beginIndex, std::size_t endIndex)
const noexcept
145 return dataAccessor (dataArea, internalIndex, thisEndIndex);},
146 std::span<const ColumnarOffsetType> (offset + beginIndex, offset + endIndex));
ContainerFreeAccessor< CT, ColumnAccessMode::input, ColumnarModeArray > m_dataAccessor
static constexpr bool isDefined
static constexpr unsigned internalOffsetColumns
static constexpr ColumnAccessMode CAM
ContainerFreeAccessor()=default
bool isAvailable(void **dataArea) const noexcept
ContainerFreeAccessor(ColumnarTool< CM > &columnarTool, ColumnAccessorOptions &&options, ColumnAccessorOptionsArray &&optionsArray)
std::unique_ptr< ColumnAccessorDataArray > m_offsetData
ContainerFreeAccessor(ContainerFreeAccessor &&that)
static constexpr bool isDefined
static constexpr bool viewIsReference
static constexpr bool isDefined
static constexpr bool viewIsReference
static constexpr ColumnAccessMode CAM
static void updateColumnInfo(ColumnInfo &)
static constexpr bool hasSetter
static auto makeViewer(void **dataArea)
std::vector< ElementType > MemoryType
typename BaseAccessor::MemoryType ElementType
MemoryAccessor< CT, CM > BaseAccessor
static constexpr bool isDefined
a help implementation of AccessorTemplate that handles type conversions
VectorConvertView(FunctionType &&, ViewType &&) -> VectorConvertView< std::decay_t< FunctionType >, std::decay_t< ViewType > >
void moveAccessor(unsigned &dataIndex, std::unique_ptr< ColumnAccessorDataArray > &accessorData, unsigned &sourceIndex, std::unique_ptr< ColumnAccessorDataArray > &sourceData)
ColumnAccessMode
an enum for the different access modes for a column
std::size_t ColumnarOffsetType
the type used for the size and offsets in the columnar data
a struct that contains meta-information about each column that's needed to interface the column with ...