diff options
Diffstat (limited to 'src/view/RBADisplayingContent.cpp')
-rw-r--r-- | src/view/RBADisplayingContent.cpp | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/src/view/RBADisplayingContent.cpp b/src/view/RBADisplayingContent.cpp new file mode 100644 index 0000000..003e3c3 --- /dev/null +++ b/src/view/RBADisplayingContent.cpp @@ -0,0 +1,138 @@ +/** + * 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. + */ +/** + * Displaying content class + */ + +#include "RBADisplayingContent.hpp" +#include "RBAAllocatable.hpp" +#include "RBAArbitrator.hpp" +#include "RBAContent.hpp" +#include "RBAContentState.hpp" +#include "RBAExpressionVisitor.hpp" +#include "RBALogManager.hpp" +#include "RBAResultImpl.hpp" +#include "RBAModelElementType.hpp" +#include "RBAExpressionType.hpp" +#include "RBAConstraintInfo.hpp" + +namespace rba +{ + +void +RBADisplayingContent::accept(RBAExpressionVisitor& visitor) +{ + // RBASceneAllocatableCollector, the only existing visitor at this time, + // does not accept Content, so it does not pass this path. + // This is implemented because another visitor may accept it in the future. + visitor.visit(*this); +} + +RBAModelElementType +RBADisplayingContent::getModelElementType() const +{ + return RBAModelElementType::DisplayingContent; +} + +const RBARuleObject* +RBADisplayingContent::getReferenceObjectCore(RBAConstraintInfo* info, + RBAArbitrator* arb) const +{ + const RBARuleObject* object {nullptr}; + const auto leftInfo = info->getChild(0U); + const auto ruleObj = getLhsOperand()->getReferenceObject(leftInfo, arb); + if (!leftInfo->isExceptionBeforeArbitrate()) { + if (ruleObj != nullptr) { + const RBAAllocatable* const alloc {dynamic_cast<const RBAAllocatable*>(ruleObj->getRawObject())}; + if (ruleObj->isPrevious()) { + if (!arb->getResult()->isPreHidden(alloc)) { + const auto contentState = arb->getResult()->getDirectPreContentState(alloc); + if (contentState != nullptr) { + object = contentState->getOwner(); + } + } + } else { + if (!alloc->isChecked()) { + info->setExceptionBeforeArbitrate(true); + } + // When "Hidden" judgment is not executed, or when "Hidden" is already + // judged and "Hidden" is false, contentState assigned to allocatable + // is acquired. + else if (!alloc->isHiddenChecked() || !alloc->isHidden()) { + const auto contentState = alloc->getState(); + if (contentState != nullptr) { + object = contentState->getOwner(); + } + // At this point, it is unknown whether the constraint expression + // will be False or True, so put it in both. + info->addFalseAllocatable(alloc); + info->addTrueAllocatable(alloc); + } else { + ; + } + } + } + } else { + info->setExceptionBeforeArbitrate(true); + } +#ifdef RBA_USE_LOG + bool pre = false; + std::string operandName; + std::string resultText; + if (ruleObj == nullptr) { + operandName = "NULL"; + } else { + pre = ruleObj->isPrevious(); + operandName = ruleObj->getElementName(); + } + if (leftInfo->isExceptionBeforeArbitrate()) { + resultText = "is before arbitrate skip"; + } else if (object == nullptr) { + if((ruleObj != nullptr) && dynamic_cast<const RBAAllocatable*>(ruleObj->getRawObject())->isChecked()) { + resultText = "has no Displayed Content"; + } else { + resultText = "is before arbitrate skip"; + } + } else { + resultText = "has Displayed Content[" + object->getElementName() + "]"; + } + LOG_arbitrateConstraintLogicLogLine( + " " + getPreMsg(pre) + "Area[" + operandName + "] " + resultText); +#endif + return object; +} + +#ifdef RBA_USE_LOG +const std::string +RBADisplayingContent::getSymbol() const +{ + return ".displayingContent()"; +} + +void +RBADisplayingContent::createHierarchy() +{ + getLhsOperand()->createHierarchy(); +} + +RBAExpressionType +RBADisplayingContent::getUnderlyingType() const +{ + return RBAExpressionType::CONTENT; +} +#endif + +} |