-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProcessTraverserCallback.cpp
More file actions
executable file
·70 lines (53 loc) · 2.29 KB
/
ProcessTraverserCallback.cpp
File metadata and controls
executable file
·70 lines (53 loc) · 2.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// Copyright 2006-12 HumaNature Studios Inc.
#include "CorePch.h"
#include "ProcessTraverserCallback.h"
DEFINE_TYPE_NS(core, ProcessTraverserCallback);
namespace core {
ProcessTraverserCallback::~ProcessTraverserCallback()
{
for(auto i = mNodeMap.begin(); i != mNodeMap.end(); ++i)
{
const Process* process = i->first;
SafeDelete(process);
}
mNodeMap.clear();
mStringProcessMap.clear();
mProcessStringMap.clear();
}
void ProcessTraverserCallback::registerProcess(const CompactString& processName, Process* process)
{
mStringProcessMap[processName] = process;
mProcessStringMap[process] = processName;
}
void ProcessTraverserCallback::traverseNode(DependencyGraphNode* node)
{
CompactString processId = node->mId;
StringProcessMap::iterator processIterator = mStringProcessMap.find(processId);
Process* process;
if(processIterator != mStringProcessMap.end())
{
process = processIterator->second;
}
else
{
logWarn("Dependecy Graph", "Unknown node '%s'. Defaulting to DummyProcess", processId.c_str());
process = HNS_NEW(DummyProcess)(processId.c_str());
registerProcess(processId, process);
}
logInfo("ProcessTraverserCallback", "Started Dependency Process '%s'", processId.c_str());
mNodeMap[process] = node;
process->addEventListener(ProcessEvent::PROCESS_ENDED, this, &ProcessTraverserCallback::handleProcessEnded, true);
process->begin();
}
void ProcessTraverserCallback::handleProcessEnded(const Event* event)
{
const ProcessEvent* processEvent = static_cast<const ProcessEvent*>(event);
const Process* process = &processEvent->mProcess;
NodeMap::const_iterator iter = mNodeMap.find(process);
assertThatW(iter != mNodeMap.end(), isTrue, "Can't find process!");
DependencyGraphNode* node = iter->second;
const char* processId = mProcessStringMap[process].c_str();
logInfo("ProcessTraverserCallback", "Cleared Dependency Process '%s'", processId);
mTraverser->clearDependecy(node);
}
} // namespace core