diff options
author | Kenji Hosokawa <khosokawa@jp.adit-jv.com> | 2020-08-24 21:58:42 +0900 |
---|---|---|
committer | Kenji Hosokawa <khosokawa@jp.adit-jv.com> | 2020-08-24 21:58:42 +0900 |
commit | 2b4ae7fde370bc3316ab30cc38b74d23e785b360 (patch) | |
tree | 41b6eb70b3419c2fbd192ed133c5890a985eddec /src/core/logic/RBAConstraintInfo.hpp | |
parent | 6694a4d2952ebd171564932200cac00d6e5792f4 (diff) |
First commitjellyfish_9.99.4jellyfish/9.99.49.99.4
Signed-off-by: Kenji Hosokawa <khosokawa@jp.adit-jv.com>
Change-Id: I381abb0a6521f5349768a76ef7ceecbce4b2d701
Diffstat (limited to 'src/core/logic/RBAConstraintInfo.hpp')
-rw-r--r-- | src/core/logic/RBAConstraintInfo.hpp | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/src/core/logic/RBAConstraintInfo.hpp b/src/core/logic/RBAConstraintInfo.hpp new file mode 100644 index 0000000..8ab88dd --- /dev/null +++ b/src/core/logic/RBAConstraintInfo.hpp @@ -0,0 +1,119 @@ +/** + * 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. + */ + +/// ConstraintInfo (Constraint expression Information) class header + +#ifndef RBACONSTRAINTINFO_HPP +#define RBACONSTRAINTINFO_HPP + +#include <cstdint> +#include <memory> +#include <set> +#include <vector> +#include "RBAExecuteResult.hpp" +#include "RBADllExport.hpp" + +namespace rba { + +class RBAAllocatable; +class RBAExpression; + +class DLL_EXPORT RBAConstraintInfo +{ +public: + RBAConstraintInfo()=default; + RBAConstraintInfo(const RBAConstraintInfo&)=delete; + RBAConstraintInfo(const RBAConstraintInfo&&)=delete; + RBAConstraintInfo& operator=(const RBAConstraintInfo&)=delete; + RBAConstraintInfo& operator=(const RBAConstraintInfo&&)=delete; + virtual ~RBAConstraintInfo()=default; + +public: + void setExpression(const RBAExpression* const expression); + const RBAExpression* getExpression() const; + void addOperandAllocatable(const RBAAllocatable* const operandAllocatable); + void setResult(const RBAExecuteResult result); + RBAConstraintInfo* getChild(const std::uint32_t index) const; + void setChild(const std::shared_ptr<RBAConstraintInfo> info); + void addTrueAllocatable(const RBAAllocatable* const allocatable); + void addFalseAllocatable(const RBAAllocatable* const allocatable); + void addTrueAllocatableFromOperand(); + void addFalseAllocatableFromOperand(); + void clearFalseAllocatable(); + const bool isImplies() const; + void clear(); + + bool isExceptionBeforeArbitrate() const; + void setExceptionBeforeArbitrate(const bool exceptionBeforeArbitrate); + + /// @brief Determine the need for re-arbitration + /// @param [in] allocatable Allcatable druing arbitration + /// @param [in] isImplies Whether the constraint expression contains + /// implication syntax. + /// @return Necessity of re-arbitration (true: need / false: No need) + bool needsRearbitrationFor(const RBAAllocatable* const allocatable, + bool isImplies = false) const; + + bool needsReRearbitrationFor(const RBAAllocatable* const allocatable) const; + void collectRearbitrationTargetFor(const RBAAllocatable* const allocatable, + std::set<const RBAAllocatable*>& targets, + const bool isNot) const; + void collectTrueAllocatables(std::set<const RBAAllocatable*>& allocatables) const; + void collectFalseAllocatables(std::set<const RBAAllocatable*>& allocatables) const; + bool contains(const RBAAllocatable* const allocatable) const; + bool isTrue() const; + bool isFalse() const; + + /// @brief Extraction of affected Area/Zone + /// @param [in] isRevert Negative context (true: inside / false: outside) + /// @param [out] affectAllocatables List of affected Allcatable + /// @param [out] collecting Collection target context + /// (true: inside / false: outside) + /// @param [out] forObject ReferenceObject context + /// (true: inside / false: outside) + /// @return Necessity of re-arbitration (true: need / false: No need) + void collectAffectedAllocatables( + const bool isRevert, std::set<const RBAAllocatable*>& affectAllocatables, + const bool collecting, + const bool forObject); + +private: + bool isRevert() const; + bool isSizeOperator() const; + +private: + bool exceptionBeforeArbitrate_ {false}; + const RBAExpression* expression_ {nullptr}; + RBAExecuteResult result_ {RBAExecuteResult::SKIP}; + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable:4251) +#endif + std::set<const RBAAllocatable*> trueAllocatables_; + std::set<const RBAAllocatable*> falseAllocatables_; + std::set<const RBAAllocatable*> operandAllocatable_; + // use to respond with an empty set + const std::set<const RBAAllocatable*> emptyAllocatables_; + mutable std::vector<std::shared_ptr<RBAConstraintInfo>> children_; +#ifdef _MSC_VER +#pragma warning(pop) +#endif +}; + +} + +#endif |