diff options
Diffstat (limited to 'src/sound/RBAOutputtingSound.cpp')
-rw-r--r-- | src/sound/RBAOutputtingSound.cpp | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/src/sound/RBAOutputtingSound.cpp b/src/sound/RBAOutputtingSound.cpp new file mode 100644 index 0000000..14d1567 --- /dev/null +++ b/src/sound/RBAOutputtingSound.cpp @@ -0,0 +1,139 @@ +/** + * 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. + */ + /** + * OutputtingSound class implementation + */ + +#include "RBAOutputtingSound.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 +RBAOutputtingSound::accept(RBAExpressionVisitor& visitor) +{ + // RBASceneAllocatableCollector, the only existing visitor at this time, + // does not accept expression that returns RBARuleObject, so it does not pass + // this path. + // It is implemented because another visitor may accept it in the future. + visitor.visit(*this); +} + +RBAModelElementType +RBAOutputtingSound::getModelElementType() const +{ + return RBAModelElementType::OutputtingSound; +} + +const RBARuleObject* +RBAOutputtingSound::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 Outputted Content"; + } else { + resultText = "is before arbitrate skip"; + } + } else { + resultText = "has Outputted Content[" + object->getElementName() + "]"; + } + LOG_arbitrateConstraintLogicLogLine( + " " + getPreMsg(pre) + "Zone[" + operandName + "] " + resultText); +#endif + return object; +} + +#ifdef RBA_USE_LOG +const std::string +RBAOutputtingSound::getSymbol() const +{ + return ".outputtingSound()"; +} + +void +RBAOutputtingSound::createHierarchy() +{ + getLhsOperand()->createHierarchy(); +} + +RBAExpressionType +RBAOutputtingSound::getUnderlyingType() const +{ + return RBAExpressionType::SOUND; +} +#endif + +} |