diff options
author | Zach Hilman <zachhilman@gmail.com> | 2018-11-18 23:44:19 -0500 |
---|---|---|
committer | Zach Hilman <zachhilman@gmail.com> | 2018-11-18 23:44:19 -0500 |
commit | 409dcf0e0aecfdb676fd3b64223a25e47c1b1c1a (patch) | |
tree | ccb9eae7c7e8b93760f3087fb6e67a13cbb24f2c /src/common/thread_queue_list.h | |
parent | f02b125ac8903db5d2dad351a9c68b2a062c4467 (diff) |
svc: Implement yield types 0 and -1
Diffstat (limited to 'src/common/thread_queue_list.h')
-rw-r--r-- | src/common/thread_queue_list.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/common/thread_queue_list.h b/src/common/thread_queue_list.h index 133122c5f4..323eab97c1 100644 --- a/src/common/thread_queue_list.h +++ b/src/common/thread_queue_list.h @@ -6,6 +6,7 @@ #include <array> #include <deque> +#include <functional> #include <boost/range/algorithm_ext/erase.hpp> namespace Common { @@ -49,6 +50,21 @@ struct ThreadQueueList { return T(); } + T get_first_filter(std::function<bool(T)> filter) const { + const Queue* cur = first; + while (cur != nullptr) { + if (!cur->data.empty()) { + for (const auto& item : cur->data) { + if (filter(item)) + return item; + } + } + cur = cur->next_nonempty; + } + + return T(); + } + T pop_first() { Queue* cur = first; while (cur != nullptr) { |