Aeon Engine c550894
AeonGames Open Source Game Engine
Loading...
Searching...
No Matches
Worklist.hpp
1//
2// Copyright (C) 2013,2026 LunarG, Inc.
3//
4// All rights reserved.
5//
6// Redistribution and use in source and binary forms, with or without
7// modification, are permitted provided that the following conditions
8// are met:
9//
10// Redistributions of source code must retain the above copyright
11// notice, this list of conditions and the following disclaimer.
12//
13// Redistributions in binary form must reproduce the above
14// copyright notice, this list of conditions and the following
15// disclaimer in the documentation and/or other materials provided
16// with the distribution.
17//
18// Neither the name of 3Dlabs Inc. Ltd. nor the names of its
19// contributors may be used to endorse or promote products derived
20// from this software without specific prior written permission.
21//
22// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33// POSSIBILITY OF SUCH DAMAGE.
34//
35#ifndef WORKLIST_H_INCLUDED
36#define WORKLIST_H_INCLUDED
37
38#include <string>
39#include <list>
40#include <mutex>
41
42namespace glslang
43{
44
46 class TWorkItem
47 {
48 public:
49 TWorkItem() { }
51 explicit TWorkItem ( const std::string& s ) :
52 name ( s ) { }
53 std::string name;
54 std::string results;
55 std::string resultsIndex;
56 };
57
59 class TWorklist
60 {
61 public:
62 TWorklist() { }
63 virtual ~TWorklist() { }
64
66 void add ( TWorkItem* item )
67 {
68 std::lock_guard<std::mutex> hold ( mutex );
69 worklist.push_back ( item );
70 }
71
73 bool remove ( TWorkItem*& item )
74 {
75 std::lock_guard<std::mutex> hold ( mutex );
76 if ( worklist.empty() )
77 {
78 return false;
79 }
80 item = worklist.front();
81 worklist.pop_front();
82 return true;
83 }
84
86 int size()
87 {
88 return ( int ) worklist.size();
89 }
90
92 bool empty()
93 {
94 return worklist.empty();
95 }
96
97 protected:
98 std::mutex mutex;
99 std::list<TWorkItem*> worklist;
100 };
101
102} // end namespace glslang
103
104#endif // WORKLIST_H_INCLUDED
Represents a single work item in the compilation worklist.
Definition Worklist.hpp:47
TWorkItem(const std::string &s)
Construct from a file name.
Definition Worklist.hpp:51
std::string resultsIndex
Index into the results.
Definition Worklist.hpp:55
std::string name
File name of the work item.
Definition Worklist.hpp:53
std::string results
Compilation results.
Definition Worklist.hpp:54
std::list< TWorkItem * > worklist
Queue of pending work items.
Definition Worklist.hpp:99
bool remove(TWorkItem *&item)
Remove and return the next work item. Returns false if empty.
Definition Worklist.hpp:73
int size()
Get the number of remaining work items.
Definition Worklist.hpp:86
bool empty()
Check whether the worklist is empty.
Definition Worklist.hpp:92
void add(TWorkItem *item)
Add a work item to the worklist.
Definition Worklist.hpp:66
std::mutex mutex
Mutex guarding the worklist.
Definition Worklist.hpp:98