Vuo 2.4.4
Loading...
Searching...
No Matches
VuoNodeAndPortIdentifierCache.cc
Go to the documentation of this file.
1
12#include "VuoComposition.hh"
13#include "VuoCompilerNode.hh"
14
19{
20 std::lock_guard<std::mutex> lock(mapMutex);
21
22 for (VuoNode *node : composition->getNodes())
23 addNodeToCache_internal(node);
24
25 for (VuoPublishedPort *publishedPort : composition->getPublishedInputPorts())
26 addPortToCache_internal(publishedPort);
27
28 for (VuoPublishedPort *publishedPort : composition->getPublishedOutputPorts())
29 addPortToCache_internal(publishedPort);
30}
31
36{
37 std::lock_guard<std::mutex> lock(mapMutex);
38
39 addNodeToCache_internal(node);
40}
41
45void VuoNodeAndPortIdentifierCache::addNodeToCache_internal(VuoNode *node)
46{
47 if (node && node->hasCompiler())
48 nodeWithGraphvizIdentifier[node->getCompiler()->getGraphvizIdentifier()] = node;
49
50 for (VuoPort *port : node->getInputPorts())
51 addPortToCache_internal(port, node);
52
53 for (VuoPort *port : node->getOutputPorts())
54 addPortToCache_internal(port, node);
55}
56
61{
62 std::lock_guard<std::mutex> lock(mapMutex);
63
64 addPortToCache_internal(publishedPort);
65}
66
70void VuoNodeAndPortIdentifierCache::addPortToCache_internal(VuoPort *port, VuoNode *node)
71{
72 string staticPortIdentifier = VuoEditorComposition::getIdentifierForStaticPort(port, node);
73 portWithStaticIdentifier[staticPortIdentifier] = port;
74 staticIdentifierForPort[port] = staticPortIdentifier;
75}
76
81{
82 std::lock_guard<std::mutex> lock(mapMutex);
83
84 nodeWithGraphvizIdentifier.clear();
85 portWithStaticIdentifier.clear();
86 staticIdentifierForPort.clear();
87}
88
100bool VuoNodeAndPortIdentifierCache::doForNodeWithIdentifier(const string &identifier, std::function<void(VuoNode *)> callback)
101{
102 std::lock_guard<std::mutex> lock(mapMutex);
103
104 auto foundIter = nodeWithGraphvizIdentifier.find(identifier);
105 if (foundIter != nodeWithGraphvizIdentifier.end())
106 {
107 callback(foundIter->second);
108 return true;
109 }
110
111 return false;
112}
113
125bool VuoNodeAndPortIdentifierCache::doForPortWithIdentifier(const string &identifier, std::function<void(VuoPort *)> callback)
126{
127 std::lock_guard<std::mutex> lock(mapMutex);
128
129 auto foundIter = portWithStaticIdentifier.find(identifier);
130 if (foundIter != portWithStaticIdentifier.end())
131 {
132 callback(foundIter->second);
133 return true;
134 }
135
136 return false;
137}
138
143{
144 std::lock_guard<std::mutex> lock(mapMutex);
145
146 auto foundIter = staticIdentifierForPort.find(port);
147 if (foundIter != staticIdentifierForPort.end())
148 return foundIter->second;
149
150 return "";
151}