12#ifndef O2_FRAMEWORK_INDEXBUILDERHELPERS_H_
13#define O2_FRAMEWORK_INDEXBUILDERHELPERS_H_
14#include "arrow/array.h"
15#include <arrow/chunked_array.h>
16#include <arrow/builder.h>
17#include <arrow/memory_pool.h>
30 std::shared_ptr<arrow::ChunkedArray>
mSource;
50 inline std::shared_ptr<arrow::ChunkedArray>
result()
const
52 std::shared_ptr<arrow::Array>
array;
53 auto status =
static_cast<arrow::Int32Builder*
>(
mBuilder.get())->Finish(&
array);
58 return std::make_shared<arrow::ChunkedArray>(
array);
60 std::shared_ptr<arrow::Field>
field()
const;
70 (
void)
static_cast<arrow::Int32Builder*
>(
mBuilder.get())->Append(idx);
75 std::unique_ptr<arrow::ArrayBuilder>
mBuilder =
nullptr;
85 inline std::shared_ptr<arrow::ChunkedArray>
result()
const
87 if constexpr (std::same_as<typename C::type, std::vector<int>>) {
89 }
else if constexpr (std::same_as<typename C::type, int[2]>) {
92 return resultSingle();
99 if constexpr (std::same_as<typename C::type, std::vector<int>>) {
100 return findMulti(idx);
101 }
else if constexpr (std::same_as<typename C::type, int[2]>) {
102 return findSlice(idx);
104 return findSingle(idx);
108 template <
typename C>
112 if constexpr (std::same_as<typename C::type, std::vector<int>>) {
114 }
else if constexpr (std::same_as<typename C::type, int[2]>) {
122 arrow::Status preSlice();
123 arrow::Status preFind();
125 bool findSingle(
int idx);
126 bool findSlice(
int idx);
127 bool findMulti(
int idx);
129 void fillSingle(
int idx);
130 void fillSlice(
int idx);
131 void fillMulti(
int idx);
133 std::shared_ptr<arrow::ChunkedArray> resultSingle()
const;
134 std::shared_ptr<arrow::ChunkedArray> resultSlice()
const;
135 std::shared_ptr<arrow::ChunkedArray> resultMulti()
const;
138 arrow::ArrayBuilder* mValueBuilder =
nullptr;
139 std::unique_ptr<arrow::ArrayBuilder> mListBuilder =
nullptr;
141 size_t mSourceSize = 0;
142 size_t mResultSize = 0;
144 std::shared_ptr<arrow::NumericArray<arrow::Int32Type>> mValuesArrow =
nullptr;
145 std::shared_ptr<arrow::NumericArray<arrow::Int64Type>> mCounts =
nullptr;
146 std::vector<int> mValues;
147 std::vector<std::vector<int>> mIndices;
152std::shared_ptr<arrow::Table>
makeArrowTable(
const char*
label, std::vector<std::shared_ptr<arrow::ChunkedArray>>&& columns, std::vector<std::shared_ptr<arrow::Field>>&& fields);
std::shared_ptr< arrow::ChunkedArray > result() const
~IndexColumnBuilder() override=default
GLuint const GLchar * name
GLsizei GLsizei GLchar * source
GLuint GLsizei const GLchar * label
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
Defining PrimaryVertex explicitly as messageable.
void cannotBuildAnArray()
std::shared_ptr< arrow::Table > makeArrowTable(const char *label, std::vector< std::shared_ptr< arrow::ChunkedArray > > &&columns, std::vector< std::shared_ptr< arrow::Field > > &&fields)
std::shared_ptr< arrow::Int32Array > getCurrentArray()
std::shared_ptr< arrow::Int32Array > mCurrentArray
virtual ~ChunkedArrayIterator()=default
std::shared_ptr< arrow::ChunkedArray > mSource
std::unique_ptr< arrow::ArrayBuilder > mBuilder
std::shared_ptr< arrow::DataType > mArrowType
std::shared_ptr< arrow::Field > field() const
std::shared_ptr< arrow::ChunkedArray > result() const
virtual ~SelfIndexColumnBuilder()=default