diff options
author | 2025-02-10 18:38:51 -0800 | |
---|---|---|
committer | 2025-02-10 18:42:25 -0800 | |
commit | 287f99863b4147caa933d6bed86697dc2c605b45 (patch) | |
tree | f98959c37e4b6d5be3008d2154f07f1e13e2964e | |
parent | 4dcf2fa35aa37cfa0a9de99bd56662ed149bfd0a (diff) |
Add empty, dump methods to BlockingQueue
BlockingQueue can now be dumped (since the user can't access its internal
state, and it's too clunky to be making a copy just so that we can
destructively print it). Also, "empty" method is useful when converting
code from std containers to the BlockingQueue.
At the same time, mark the "size" method as const.
Bug: 376713684
Test: used in another CL in frameworks/base. build only here
Flag: EXEMPT refactor
Change-Id: I3fda00b793b512bdba4c85dbf561dfc5e9724601
-rw-r--r-- | include/input/BlockingQueue.h | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/include/input/BlockingQueue.h b/include/input/BlockingQueue.h index f848c82c42..6e32de6d86 100644 --- a/include/input/BlockingQueue.h +++ b/include/input/BlockingQueue.h @@ -16,6 +16,7 @@ #pragma once +#include <input/PrintTools.h> #include <condition_variable> #include <functional> #include <list> @@ -126,11 +127,21 @@ public: * Primary used for debugging. * Does not block. */ - size_t size() { + size_t size() const { std::scoped_lock lock(mLock); return mQueue.size(); } + bool empty() const { + std::scoped_lock lock(mLock); + return mQueue.empty(); + } + + std::string dump(std::string (*toString)(const T&) = constToString) const { + std::scoped_lock lock(mLock); + return dumpContainer(mQueue, toString); + } + private: const std::optional<size_t> mCapacity; /** @@ -140,7 +151,7 @@ private: /** * Lock for accessing and waiting on elements. */ - std::mutex mLock; + mutable std::mutex mLock; std::list<T> mQueue GUARDED_BY(mLock); }; |