Vuo  2.3.2
VuoNodeAndPortIdentifierCache.cc
Go to the documentation of this file.
1 
11 #include "VuoEditorComposition.hh"
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 
45 void 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 
70 void 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 
100 bool 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 
125 bool 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 }