// Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The ASF licenses this file // to you under the Apache License, Version 2.0 (the // "License"); you may not use this file except in compliance // with the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. #pragma once #include #include "arrow/util/macros.h" #include "arrow/util/logging.h" #include "gandiva/llvm_includes.h" namespace gandiva { /// \brief Tracks validity/value builders in LLVM. class GANDIVA_EXPORT LValue { public: explicit LValue(llvm::Value* data, llvm::Value* length = NULLPTR, llvm::Value* validity = NULLPTR) : data_(data), length_(length), validity_(validity) {} virtual ~LValue() = default; llvm::Value* data() { return data_; } llvm::Value* length() { return length_; } llvm::Value* validity() { return validity_; } void set_data(llvm::Value* data) { data_ = data; } // Append the params required when passing this as a function parameter. virtual void AppendFunctionParams(std::vector* params) { params->push_back(data_); if (length_ != NULLPTR) { params->push_back(length_); } } private: llvm::Value* data_; llvm::Value* length_; llvm::Value* validity_; }; class GANDIVA_EXPORT DecimalLValue : public LValue { public: DecimalLValue(llvm::Value* data, llvm::Value* validity, llvm::Value* precision, llvm::Value* scale) : LValue(data, NULLPTR, validity), precision_(precision), scale_(scale) {} llvm::Value* precision() { return precision_; } llvm::Value* scale() { return scale_; } void AppendFunctionParams(std::vector* params) override { LValue::AppendFunctionParams(params); params->push_back(precision_); params->push_back(scale_); } private: llvm::Value* precision_; llvm::Value* scale_; }; } // namespace gandiva