File indexing completed on 2026-11-07 10:25:44
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 #pragma once
0019
0020 #include <cstdint>
0021 #include <type_traits>
0022 #include <utility>
0023
0024 #include "arrow/util/macros.h"
0025 #include "parquet/exception.h"
0026 #include "parquet/types.h"
0027
0028 namespace parquet {
0029
0030 #define TYPE_VISIT_INLINE(TYPE_VALUE) \
0031 case Type::TYPE_VALUE: { \
0032 const PhysicalType<Type::TYPE_VALUE>* concrete_ptr = NULLPTR; \
0033 return std::forward<VISITOR>(visitor)(concrete_ptr, std::forward<ARGS>(args)...); \
0034 }
0035
0036
0037
0038
0039
0040
0041
0042 template <typename VISITOR, typename... ARGS>
0043 auto VisitType(Type::type type, VISITOR&& visitor, ARGS&&... args)
0044 -> decltype(std::forward<VISITOR>(visitor)(std::declval<PhysicalType<Type::INT32>*>(),
0045 args...)) {
0046 switch (type) {
0047 TYPE_VISIT_INLINE(INT32)
0048 TYPE_VISIT_INLINE(INT64)
0049 TYPE_VISIT_INLINE(INT96)
0050 TYPE_VISIT_INLINE(FLOAT)
0051 TYPE_VISIT_INLINE(DOUBLE)
0052 TYPE_VISIT_INLINE(FIXED_LEN_BYTE_ARRAY)
0053 TYPE_VISIT_INLINE(BYTE_ARRAY)
0054 TYPE_VISIT_INLINE(BOOLEAN)
0055 default:
0056 throw ParquetException("Invalid Type::type");
0057 }
0058 }
0059
0060 #undef TYPE_VISIT_INLINE
0061
0062 }