/** * 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. */ /** * ResultSet (set arbitration result) class header */ #ifndef RBARESULTSET_HPP #define RBARESULTSET_HPP #include #include #include #include #include #include #include "RBAContentStatusType.hpp" #include "RBAContentStatus.hpp" namespace rba { class RBADisplay; class RBASize; class RBAAllocatable; class RBAArea; class RBAZone; class RBAContent; class RBAViewContent; class RBASoundContent; class RBAContentState; class RBAViewContentState; class RBASoundContentState; class RBAScene; class RBASceneImpl; class RBAAbstractProperty; class RBAEventProcessing; class RBAConstraint; class RBAResultSet { public: RBAResultSet()=default; RBAResultSet(const RBAResultSet& resultSet); RBAResultSet(const RBAResultSet&&)=delete; RBAResultSet& operator=(const RBAResultSet&)=delete; RBAResultSet& operator=(const RBAResultSet&&)=delete; virtual ~RBAResultSet()=default; public: // Impl [get VisibleArea/SoundingZone] const std::set& getOutputtingAllocatables() const; const std::list& getVisibleAreas() const; const std::list& getSoundingZones() const; // Impl [get Visible/Sounding ContentStates] const std::list& getVisibleContentStates() const; const std::list& getSoundingContentStates() const; // Impl [get Active View/Sound ContentStates] const std::set& getActiveContentStates() const; const std::list& getActiveViewContentStates() const; const std::list& getActiveSoundContentStates() const; // Impl [get Active Scenes] const std::list& getActiveScenes() const; // Impl [get InvisibleAreas/UnsoundingZone] const std::list& getInvisibleAreas() const; const std::list& getUnsoundingZones() const; // Impl [get HiddenAreas/MuteZones] const std::list& getHiddenAreas() const; const std::list& getMuteZones() const; // Impl [get Attenuated] const std::list& getAttenuatedZones() const; // Impl [get Canceled Contents] const std::list& getCanceledViewContents() const; const std::list& getCanceledSoundContents() const; // Impl [get Standby Contents] const std::list& getStandbyViewContents() const; const std::list& getStandbySoundContents() const; // Impl [get ContentStates] const RBAContentState* getContentState(const RBAAllocatable* const alloc) const; const RBAContentState* getDirectContentState(const RBAAllocatable* const alloc) const; // Impl [get Areas/Zones by ConentState] void getAlloc(const RBAContentState* const state, std::list& allocList) const; void getArea(const RBAViewContentState* const state, std::list& areaList) const; void getZone(const RBASoundContentState* const state, std::list& zoneList) const; // Impl [get Areas/Zones by Content] void getArea(const RBAViewContent* const content, std::list& areaList) const; void getZone(const RBASoundContent* const content, std::list& zoneList) const; // Impl [get Size] const RBASize* getSize(const RBAArea* const area) const; // Impl [check Active Scene/Content/ContentState] bool isActive(const RBAScene* const scene) const; bool isActive(const RBAContent* const content) const; bool isActive(const RBAContentState* const state) const; const RBAContentState* getReqestState(const RBAContent* const content) const; // Impl [check Outputting Allocatable/ContentState] bool isOutputting(const RBAAllocatable* const alloc) const; bool isOutputting(const RBAContentState* const state) const; // Impl [check Hidden] bool isHidden(const RBAAllocatable* const alloc) const; // Impl [check Attenuated Zone] bool isAttenuated(const RBAZone* const zone) const; // Impl [check Cancel ContentState] bool isCancel(const RBAContentState* const state) const; // Impl [check Aleady OutPutting] bool isAlreadyOutputting(const RBAContentState* const state) const; // Impl [set Active Scene/ContentState] void setActive(const RBAScene* const scene, const bool newActive); void setActive(const RBAContentState* const state, const bool newActive); // [cancel ContentState] void cancelContentState(const RBAContentState* const state); // Impl [set Cancel ContentState] void setCancel(const RBAContentState* const state, const bool checked); // Impl [set ContentState] void setContentState(const RBAAllocatable* const alloc, const RBAContentState* const state); // Impl [add Outputting ContentState] void addOutputtingContentState(const RBAContentState* const state); // Impl [add Standby Content] void addStandbyContent(const RBAContent* const content); // [activeView] void copyActives(const std::unique_ptr& resultSet); void updateActiveContentStates(); // [Property] void copyProperties(const std::unique_ptr& resultSet); void setSceneProperty(const RBAScene* const scene, const std::string& propertyName, const std::int32_t value); void setSceneProperty(const RBAAbstractProperty* const property, const std::int32_t value); std::int32_t getSceneProperty(const RBAAbstractProperty* const property) const; // [EventProcessing] void setContentOfEventProcessing(const RBAEventProcessing* const eventProcessing, const RBAContent* const content); const RBAContent* getContentOfEventProcessing(const RBAEventProcessing* const eventProcessing) const; // [DisplayContents] bool hasDisplayingArea(const RBADisplay* const display) const; // common bool isLater(const RBAContent* const target, const RBAContent* const comparisonTarget) const; std::set& getDifferentConditionScenes(const RBAResultSet& target); void updateRequestStatus(const RBAContent* const content, const bool isOnRequest); void setStatusType(const RBAContent* const content, const RBAContentStatusType type); RBAContentStatusType getStatusType(const RBAContent* const content) const; bool isOutput(const RBAContent* const content) const; bool isStandby(const RBAContent* const content) const; bool hasBeenCanceled(const RBAContent* const content) const; bool hasBeenDisplayed(const RBAContent* const content) const; std::unordered_map* getStatus() const; #ifdef RBA_USE_LOG void addFailedConstraint(const RBAConstraint* constraint); const std::list& getFailedConstraints(); #endif private: const std::unordered_map& getScenePropertyMap() const; void setOrder(const RBAContentState* const state, const std::int32_t newOrder) const; std::set outputtingAllocs_; std::set hiddenAllocs_; std::set activeContentStates_; std::set canceledContentStates_; std::unordered_map allocToContentState_; // The lists for getList type acquisition function std::list visibleAreas_; std::list soundingZones_; std::list invisibleAreas_; std::list unsoundingZones_; std::list hiddenAreas_; std::list muteZones_; std::list attenuatedZones_; std::list canceledViewContents_; std::list canceledSoundContents_; std::list standbyViewContents_; std::list standbySoundContents_; std::list visibleContentStates_; std::list soundingContentStates_; std::list activeViewContentStates_; std::list activeSoundContentStates_; // common std::int32_t requestOrderView_ {1}; std::int32_t requestOrderSound_ {1}; std::list activeScenes_; std::unordered_map propertyMap_; std::unordered_map event_content_; mutable std::unordered_map contentToStatus_; std::set differentConditionScenes_; mutable std::unordered_map requestContentStateMap_; mutable std::mutex mutex_; #ifdef RBA_USE_LOG std::list failedConstraints_; #endif }; } #endif