Project
Loading...
Searching...
No Matches
IndexBuilderHelpers.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
12#ifndef O2_FRAMEWORK_INDEXBUILDERHELPERS_H_
13#define O2_FRAMEWORK_INDEXBUILDERHELPERS_H_
14#include <arrow/chunked_array.h>
15#include <arrow/builder.h>
16#include <arrow/memory_pool.h>
17#include <memory>
18
19namespace o2::soa
20{
21enum struct IndexKind : int {
22 IdxInvalid = -1,
23 IdxSelf = 0,
24 IdxSingle = 1,
25 IdxSlice = 2,
26 IdxArray = 3
27};
28} // namespace o2::soa
29
30namespace o2::framework
31{
34
36 ChunkedArrayIterator(std::shared_ptr<arrow::ChunkedArray> source);
37 void reset(std::shared_ptr<arrow::ChunkedArray>& source);
38
39 std::shared_ptr<arrow::ChunkedArray> mSource = nullptr;
40 size_t mPosition = 0;
41 int mChunk = 0;
42 size_t mOffset = 0;
43 std::shared_ptr<arrow::Int32Array> mCurrentArray = nullptr;
44 int const* mCurrent = nullptr;
45 int const* mLast = nullptr;
46 size_t mFirstIndex = 0;
47 size_t mSourceSize = 0;
48
49 std::shared_ptr<arrow::Int32Array> getCurrentArray();
50 void nextChunk();
51 void prevChunk();
52 int valueAt(size_t pos);
53};
54
56 std::unique_ptr<arrow::ArrayBuilder> mBuilder = nullptr;
57 std::unique_ptr<framework::ChunkedArrayIterator> keyIndex = nullptr;
58 SelfBuilder(arrow::MemoryPool* pool);
59 void reset(std::shared_ptr<arrow::ChunkedArray>);
60
61 inline bool find(int) const
62 {
63 return true;
64 }
65 void fill(int idx);
66 std::shared_ptr<arrow::ChunkedArray> result() const;
67};
68
70 std::unique_ptr<arrow::ArrayBuilder> mBuilder = nullptr;
71 SingleBuilder(std::shared_ptr<arrow::ChunkedArray> source, arrow::MemoryPool* pool);
72 void reset(std::shared_ptr<arrow::ChunkedArray> source);
73
74 bool find(int idx);
75 void fill(int idx);
76 std::shared_ptr<arrow::ChunkedArray> result() const;
77};
78
80 arrow::ArrayBuilder* mValueBuilder = nullptr;
81 std::unique_ptr<arrow::ArrayBuilder> mListBuilder = nullptr;
82 std::shared_ptr<arrow::NumericArray<arrow::Int32Type>> mValues = nullptr;
83 std::shared_ptr<arrow::NumericArray<arrow::Int64Type>> mCounts = nullptr;
84 int mValuePos = 0;
85 SliceBuilder(std::shared_ptr<arrow::ChunkedArray> source, arrow::MemoryPool* pool);
86 void reset(std::shared_ptr<arrow::ChunkedArray> source);
87
88 bool find(int idx);
89 void fill(int idx);
90 std::shared_ptr<arrow::ChunkedArray> result() const;
91
92 arrow::Status preSlice();
93};
94
96 arrow::ArrayBuilder* mValueBuilder = nullptr;
97 std::vector<int> mValues;
98 std::vector<std::vector<int>> mIndices;
99 std::unique_ptr<arrow::ArrayBuilder> mListBuilder = nullptr;
100 ArrayBuilder(std::shared_ptr<arrow::ChunkedArray> source, arrow::MemoryPool* pool);
101 void reset(std::shared_ptr<arrow::ChunkedArray> source);
102
103 bool find(int idx);
104 void fill(int idx);
105 std::shared_ptr<arrow::ChunkedArray> result() const;
106
107 arrow::Status preFind();
108};
109
111 std::variant<std::monostate, SelfBuilder, SingleBuilder, SliceBuilder, ArrayBuilder> builder;
112 size_t mResultSize = 0;
113 int mColumnPos = -1;
114 IndexColumnBuilder(soa::IndexKind kind, int pos, arrow::MemoryPool* pool, std::shared_ptr<arrow::ChunkedArray> source = nullptr);
115 void reset(std::shared_ptr<arrow::ChunkedArray> source = nullptr);
116
117 bool find(int idx);
118 void fill(int idx);
119 std::shared_ptr<arrow::ChunkedArray> result() const;
120};
121} // namespace o2::framework
122
123#endif // O2_FRAMEWORK_INDEXBUILDERHELPERS_H_
uint16_t pos
Definition RawData.h:3
GLsizei GLsizei GLchar * source
Definition glcorearb.h:798
Defining PrimaryVertex explicitly as messageable.
arrow::ArrayBuilder * mValueBuilder
std::shared_ptr< arrow::ChunkedArray > result() const
std::vector< std::vector< int > > mIndices
std::unique_ptr< arrow::ArrayBuilder > mListBuilder
void reset(std::shared_ptr< arrow::ChunkedArray > source)
std::shared_ptr< arrow::Int32Array > getCurrentArray()
std::shared_ptr< arrow::Int32Array > mCurrentArray
void reset(std::shared_ptr< arrow::ChunkedArray > &source)
std::shared_ptr< arrow::ChunkedArray > mSource
std::shared_ptr< arrow::ChunkedArray > result() const
void reset(std::shared_ptr< arrow::ChunkedArray > source=nullptr)
std::variant< std::monostate, SelfBuilder, SingleBuilder, SliceBuilder, ArrayBuilder > builder
std::shared_ptr< arrow::ChunkedArray > result() const
std::unique_ptr< arrow::ArrayBuilder > mBuilder
std::unique_ptr< framework::ChunkedArrayIterator > keyIndex
void reset(std::shared_ptr< arrow::ChunkedArray >)
std::unique_ptr< arrow::ArrayBuilder > mBuilder
std::shared_ptr< arrow::ChunkedArray > result() const
void reset(std::shared_ptr< arrow::ChunkedArray > source)
std::shared_ptr< arrow::NumericArray< arrow::Int32Type > > mValues
std::unique_ptr< arrow::ArrayBuilder > mListBuilder
std::shared_ptr< arrow::ChunkedArray > result() const
void reset(std::shared_ptr< arrow::ChunkedArray > source)
arrow::ArrayBuilder * mValueBuilder
std::shared_ptr< arrow::NumericArray< arrow::Int64Type > > mCounts