From 2b4ae7fde370bc3316ab30cc38b74d23e785b360 Mon Sep 17 00:00:00 2001 From: Kenji Hosokawa Date: Mon, 24 Aug 2020 21:58:42 +0900 Subject: First commit Signed-off-by: Kenji Hosokawa Change-Id: I381abb0a6521f5349768a76ef7ceecbce4b2d701 --- src/core/expression/RBAExpression.hpp | 91 +++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 src/core/expression/RBAExpression.hpp (limited to 'src/core/expression/RBAExpression.hpp') diff --git a/src/core/expression/RBAExpression.hpp b/src/core/expression/RBAExpression.hpp new file mode 100644 index 0000000..9cd14e5 --- /dev/null +++ b/src/core/expression/RBAExpression.hpp @@ -0,0 +1,91 @@ +/** + * Copyright (c) 2019 DENSO CORPORATION. + * + * Licensed 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. + */ + +/** + * Expression class header file + */ + +#ifndef RBAEXPRESSION_HPP +#define RBAEXPRESSION_HPP + +#include +#include +#include +#include "RBAModelElement.hpp" + +namespace rba +{ + +class RBAExpressionVisitor; +class RBALetStatement; +class RBAArbitrator; +class RBARuleObject; +class RBAConstraintInfo; +#ifdef RBA_USE_LOG +enum class RBAExpressionType : std::uint8_t; +#endif + +class DLL_EXPORT RBAExpression : public RBAModelElement +{ +protected: + RBAExpression()=default; + RBAExpression(const RBAExpression&)=delete; + RBAExpression(const RBAExpression&&)=delete; + RBAExpression& operator=(const RBAExpression&)=delete; + RBAExpression& operator=(const RBAExpression&&)=delete; + +public: + virtual ~RBAExpression()=default; + void addLetStatement(RBALetStatement* const letStatement); + virtual void accept(RBAExpressionVisitor& visitor); + bool execute(RBAConstraintInfo* const info, RBAArbitrator* const arb) const; + const RBARuleObject* getReferenceObject(RBAConstraintInfo* const info, + RBAArbitrator* const arb) const; + std::int32_t getValue(RBAConstraintInfo* const info, RBAArbitrator* const arb) const; + void doAction(RBAConstraintInfo* const info, RBAArbitrator* const arb); + const std::vector& getLetStatements() const; + + // Log +#ifdef RBA_USE_LOG + virtual const std::string getExpressionText() const; + virtual const std::string getCoverageExpressionText() const; + virtual void createHierarchy(); + virtual RBAExpressionType getUnderlyingType() const; +#endif + +protected: + virtual bool executeCore(RBAConstraintInfo* info, RBAArbitrator* arb) const; + virtual const RBARuleObject* getReferenceObjectCore(RBAConstraintInfo* info, + RBAArbitrator* arb) const; + virtual std::int32_t getValueCore(RBAConstraintInfo* info, + RBAArbitrator* arb) const; + virtual void doActionCore(RBAConstraintInfo* info, RBAArbitrator* arb); + +private: +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable:4251) +#endif + std::vector letStatements_; +#ifdef _MSC_VER +#pragma warning(pop) +#endif + +}; + +} + +#endif -- cgit 1.2.3-korg