12 const int VuoModuleCompilationQueue::maxConcurrentCompilations = 8;
28 return (priority.first != other->
priority.first ?
29 (priority.first < other->
priority.first) :
30 (priority.second < other->
priority.second));
45 std::unique_lock<std::mutex> lock(queueMutex);
47 queue[item->
sourcePath].push_back({item,
false});
59 std::unique_lock<std::mutex> lock(queueMutex);
60 queueChanged.wait(lock, [
this, &item]()
62 int concurrentCompilations = 0;
65 auto selectedIter = queue.end();
66 for (
auto i = queue.begin(); i != queue.end(); ++i)
68 if (! ripeItemIsCompiling(i) &&
69 (selectedIter == queue.end() || ripeItem(i)->hasHigherPriority(ripeItem(selectedIter))))
72 if (ripeItemIsCompiling(i))
73 ++concurrentCompilations;
77 if (selectedIter != queue.end() && concurrentCompilations < maxConcurrentCompilations)
79 item = ripeItem(selectedIter);
80 ripeItemIsCompiling(selectedIter) = true;
95 std::unique_lock<std::mutex> lock(queueMutex);
100 queueChanged.notify_one();
109 return iter->second.front().first;
116 bool& VuoModuleCompilationQueue::ripeItemIsCompiling(map<
string, list< pair<Item *, bool> > >::iterator iter)
118 return iter->second.front().second;
124 void VuoModuleCompilationQueue::pluckRipeItem(map<
string, list< pair<Item *, bool> > >::iterator iter)
126 delete iter->second.front().first;
127 iter->second.pop_front();
129 if (iter->second.empty())