1 #ifndef DALI_INTERNAL_SCENE_GRAPH_TRAVELER_H
2 #define DALI_INTERNAL_SCENE_GRAPH_TRAVELER_H
5 * Copyright (c) 2024 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
22 #if defined(LOW_SPEC_MEMORY_MANAGEMENT_ENABLED)
23 #include <dali/devel-api/common/map-wrapper.h>
25 #include <unordered_map>
29 #include <dali/internal/update/manager/scene-graph-traveler-interface.h>
35 class SceneGraphTraveler;
36 using SceneGraphTravelerPtr = IntrusivePtr<SceneGraphTraveler>;
39 * @brief Helper class to travel scene graph under root node.
41 class SceneGraphTraveler : public SceneGraphTravelerInterface, public SceneGraph::PropertyOwner::Observer
46 * @param[in] updateManager The update manager.
47 * @param[in] rootNode The root node of this traveler. The traveler will find only under this rootNode.
49 SceneGraphTraveler(SceneGraph::UpdateManager& updateManager, SceneGraph::Node& rootNode);
54 ~SceneGraphTraveler() override;
58 * @brief Call this method if hierarchy was changed under root node.
60 void NodeHierarchyChanged()
66 * @brief Whether root node is invalidated or not.
68 * @return True if root node is invalidated.
70 bool IsInvalidated() const
75 public: // From SceneGraphTravelerInterface
77 * @copydoc Dali::Internal::SceneGraphTravelerInterface::FindNode()
79 SceneGraph::Node* FindNode(uint32_t id) override;
81 private: // From SceneGraph::PropertyOwner::Observer
83 * @copydoc SceneGraph::PropertyOwner::Observer::PropertyOwnerConnected()
85 void PropertyOwnerConnected(SceneGraph::PropertyOwner& owner) override
90 * @copydoc SceneGraph::PropertyOwner::Observer::PropertyOwnerDisconnected()
92 NotifyReturnType PropertyOwnerDisconnected(BufferIndex updateBufferIndex, SceneGraph::PropertyOwner& owner) override
94 return NotifyReturnType::KEEP_OBSERVING;
98 * @copydoc SceneGraph::PropertyOwner::Observer::PropertyOwnerDisconnected()
100 void PropertyOwnerDestroyed(SceneGraph::PropertyOwner& owner) override
102 // Invalidate this traveler
111 SceneGraph::Node& mRootNode;
113 #if defined(LOW_SPEC_MEMORY_MANAGEMENT_ENABLED)
114 using TraveledNodeMap = std::map<uint32_t, SceneGraph::Node*>;
116 using TraveledNodeMap = std::unordered_map<uint32_t, SceneGraph::Node*>;
118 TraveledNodeMap mTravledNodeMap; ///< Used to store cached pointers to already searched for Nodes.
120 bool mInvalidated : 1; ///< True if root node was destroyed.
123 } // namespace Internal
127 #endif // DALI_INTERNAL_UPDATE_PROXY_SCENE_GRAPH_TRAVELER_H