24 #if !defined(BUILD_FEATURE_DETECTORGRAPH_CONFIG_LITE) 25 : mNeedsSorting(
false)
28 DG_LOG(
"Graph Initialized");
33 #if !defined(BUILD_FEATURE_DETECTORGRAPH_CONFIG_LITE) 37 std::list<Vertex*>::iterator vertexIt = mVertices.begin();
38 while (vertexIt != mVertices.end())
48 vertexIt = mVertices.begin();
49 while (vertexIt != mVertices.end())
60 mVertices.push_back(aVertex);
61 #if !defined(BUILD_FEATURE_DETECTORGRAPH_CONFIG_LITE) 64 #if defined(BUILD_FEATURE_DETECTORGRAPH_CONFIG_INSTRUMENT_RESOURCE_USAGE) 65 DG_LOG(
"Added Vertex (total=%u)", mVertices.size());
71 #if defined(BUILD_FEATURE_DETECTORGRAPH_CONFIG_LITE) 73 DG_LOG(
"dummy RemoveVertex called for %p.", (
void*)aVertex);
75 mVertices.remove(aVertex);
88 DG_LOG(
"Evaluation failed with %d.", (
int)r);
99 return !mGraphInputQueue.
IsEmpty();
104 return mTopicRegistry;
110 for (VertexPtrContainer::iterator vertexIt = mVertices.begin();
111 vertexIt != mVertices.end();
123 for (VertexPtrContainer::iterator it = mVertices.begin();
124 it != mVertices.end();
127 (*it)->ProcessVertex();
137 #if !defined(BUILD_FEATURE_DETECTORGRAPH_CONFIG_LITE) 143 DG_LOG(
"Graph::TopoSortGraph() failed");
149 ClearTraverseContexts();
153 r = TraverseVertices();
156 DG_LOG(
"Graph::TraverseVertices() failed");
160 #if !defined(BUILD_FEATURE_DETECTORGRAPH_CONFIG_LITE) 161 r = ComposeOutputList();
164 DG_LOG(
"Graph::ComposeOutputList() failed");
172 #if defined(BUILD_FEATURE_DETECTORGRAPH_CONFIG_LITE) 173 bool Graph::IsGraphSorted()
175 ClearTraverseContexts();
176 int processingNodes = 0;
177 for (VertexPtrContainer::iterator vertexIt = mVertices.begin();
178 vertexIt != mVertices.end();
191 for (VertexPtrContainer::iterator outEdgeIt = v->
GetOutEdges().begin();
195 Vertex* outVertex = *outEdgeIt;
211 if (processingNodes != 0)
213 DG_LOG(
"---------%d Out of Bounds edge --------", processingNodes);
228 ClearTraverseContexts();
230 std::list<Vertex*> sorted;
232 size_t numVertices = mVertices.size();
237 for (std::list<Vertex*>::iterator vertexIt = mVertices.begin();
238 vertexIt != mVertices.end();
244 r = DFS_visit(*vertexIt, sorted);
253 if (sorted.size() != numVertices)
259 DG_LOG(
"--------------------------------------");
260 DG_LOG(
"------------- BAD GRAPH --------------");
261 DG_LOG(
"---------- Out of Bounds edge --------");
262 DG_LOG(
"--------------------------------------");
269 mNeedsSorting =
false;
280 for (std::list<Vertex*>::iterator vIt = v->
GetOutEdges().begin();
287 r = DFS_visit(*vIt, sorted);
295 DG_LOG(
"--------------------------------------");
296 DG_LOG(
"------------CYCLE DETECTED------------");
297 DG_LOG(
"---------- Will Ignore edge ----------");
298 DG_LOG(
"--------------------------------------");
299 DG_LOG(
"Cycle at: %s", (*vIt)->GetName());
310 sorted.push_front(v);
321 for (std::list< Vertex* >::iterator it = mVertices.begin();
322 it != mVertices.end();
331 mOutputList.insert(mOutputList.end(), tTopicStates.begin(), tTopicStates.end());
TopicRegistry & GetTopicRegistry()
Internal - A limited-size Container for Topic<T>s
virtual ~Graph()
Destructor.
void DG_LOG(const char *aLogString,...)
ErrorType TopoSortGraph()
Determine the right order to process the vertices by topological sort.
bool EvaluateIfHasDataPending()
Evaluates Graph if data is pending and returns true if so.
VertexPtrContainer & GetOutEdges()
VertexSearchState GetState() const
Provide interface for a topic.
virtual VertexType GetVertexType() const =0
void AddVertex(Vertex *aVertex)
bool HasDataPending()
Returns true if there is data pending evaluation.
const std::list< ptr::shared_ptr< const TopicState > > & GetOutputList() const
Returns the list of topicstates published in the last Evaluation.
void SetState(VertexSearchState aNewState)
void RemoveVertex(Vertex *aVertex)
ErrorType EvaluateGraph()
Evaluate the whole graph.
#define DG_ASSERT(condition)
virtual std::list< ptr::shared_ptr< const TopicState > > GetCurrentTopicStates() const =0
Define behaviors of a vertex in a graph.