1// Licensed to the Apache Software Foundation (ASF) under one
2// or more contributor license agreements. See the NOTICE file
3// distributed with this work for additional information
4// regarding copyright ownership. The ASF licenses this file
5// to you under the Apache License, Version 2.0 (the
6// "License"); you may not use this file except in compliance
7// with the License. You may obtain a copy of the License at
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing,
12// software distributed under the License is distributed on an
13// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14// KIND, either express or implied. See the License for the
15// specific language governing permissions and limitations
16// under the License.
17
18#ifndef ARROW_TYPE_FWD_H
19#define ARROW_TYPE_FWD_H
20
21#include <memory>
22
23#include "arrow/util/visibility.h"
24
25namespace arrow {
26
27class Status;
28
29class DataType;
30class Array;
31struct ArrayData;
32class ArrayBuilder;
33class Field;
34class Tensor;
35
36class ChunkedArray;
37class Column;
38class RecordBatch;
39class Table;
40
41class Buffer;
42class MemoryPool;
43class RecordBatch;
44class Schema;
45
46class DictionaryType;
47class DictionaryArray;
48
49class NullType;
50class NullArray;
51class NullBuilder;
52
53class BooleanType;
54class BooleanArray;
55class BooleanBuilder;
56
57class BinaryType;
58class BinaryArray;
59class BinaryBuilder;
60
61class FixedSizeBinaryType;
62class FixedSizeBinaryArray;
63class FixedSizeBinaryBuilder;
64
65class StringType;
66class StringArray;
67class StringBuilder;
68
69class ListType;
70class ListArray;
71class ListBuilder;
72
73class StructType;
74class StructArray;
75class StructBuilder;
76
77class Decimal128Type;
78class Decimal128Array;
79class Decimal128Builder;
80
81class UnionType;
82class UnionArray;
83
84template <typename TypeClass>
85class NumericArray;
86
87template <typename TypeClass>
88class NumericBuilder;
89
90template <typename TypeClass>
91class NumericTensor;
92
93#define _NUMERIC_TYPE_DECL(KLASS) \
94 class KLASS##Type; \
95 using KLASS##Array = NumericArray<KLASS##Type>; \
96 using KLASS##Builder = NumericBuilder<KLASS##Type>; \
97 using KLASS##Tensor = NumericTensor<KLASS##Type>;
98
99_NUMERIC_TYPE_DECL(Int8)
100_NUMERIC_TYPE_DECL(Int16)
101_NUMERIC_TYPE_DECL(Int32)
102_NUMERIC_TYPE_DECL(Int64)
103_NUMERIC_TYPE_DECL(UInt8)
104_NUMERIC_TYPE_DECL(UInt16)
105_NUMERIC_TYPE_DECL(UInt32)
106_NUMERIC_TYPE_DECL(UInt64)
107_NUMERIC_TYPE_DECL(HalfFloat)
108_NUMERIC_TYPE_DECL(Float)
109_NUMERIC_TYPE_DECL(Double)
110
111#undef _NUMERIC_TYPE_DECL
112
113class Date64Type;
114using Date64Array = NumericArray<Date64Type>;
115using Date64Builder = NumericBuilder<Date64Type>;
116
117class Date32Type;
118using Date32Array = NumericArray<Date32Type>;
119using Date32Builder = NumericBuilder<Date32Type>;
120
121class Time32Type;
122using Time32Array = NumericArray<Time32Type>;
123using Time32Builder = NumericBuilder<Time32Type>;
124
125class Time64Type;
126using Time64Array = NumericArray<Time64Type>;
127using Time64Builder = NumericBuilder<Time64Type>;
128
129class TimestampType;
130using TimestampArray = NumericArray<TimestampType>;
131using TimestampBuilder = NumericBuilder<TimestampType>;
132
133class IntervalType;
134using IntervalArray = NumericArray<IntervalType>;
135
136// ----------------------------------------------------------------------
137// (parameter-free) Factory functions
138// Other factory functions are in type.h
139
140/// \defgroup type-factories Factory functions for creating data types
141///
142/// Factory functions for creating data types
143/// @{
144
145/// \brief Return a NullType instance
146std::shared_ptr<DataType> ARROW_EXPORT null();
147/// \brief Return a BooleanType instance
148std::shared_ptr<DataType> ARROW_EXPORT boolean();
149/// \brief Return a Int8Type instance
150std::shared_ptr<DataType> ARROW_EXPORT int8();
151/// \brief Return a Int16Type instance
152std::shared_ptr<DataType> ARROW_EXPORT int16();
153/// \brief Return a Int32Type instance
154std::shared_ptr<DataType> ARROW_EXPORT int32();
155/// \brief Return a Int64Type instance
156std::shared_ptr<DataType> ARROW_EXPORT int64();
157/// \brief Return a UInt8Type instance
158std::shared_ptr<DataType> ARROW_EXPORT uint8();
159/// \brief Return a UInt16Type instance
160std::shared_ptr<DataType> ARROW_EXPORT uint16();
161/// \brief Return a UInt32Type instance
162std::shared_ptr<DataType> ARROW_EXPORT uint32();
163/// \brief Return a UInt64Type instance
164std::shared_ptr<DataType> ARROW_EXPORT uint64();
165/// \brief Return a HalfFloatType instance
166std::shared_ptr<DataType> ARROW_EXPORT float16();
167/// \brief Return a FloatType instance
168std::shared_ptr<DataType> ARROW_EXPORT float32();
169/// \brief Return a DoubleType instance
170std::shared_ptr<DataType> ARROW_EXPORT float64();
171/// \brief Return a StringType instance
172std::shared_ptr<DataType> ARROW_EXPORT utf8();
173/// \brief Return a BinaryType instance
174std::shared_ptr<DataType> ARROW_EXPORT binary();
175/// \brief Return a Date32Type instance
176std::shared_ptr<DataType> ARROW_EXPORT date32();
177/// \brief Return a Date64Type instance
178std::shared_ptr<DataType> ARROW_EXPORT date64();
179
180/// @}
181
182} // namespace arrow
183
184#endif // ARROW_TYPE_FWD_H
185