Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 287f9986 authored by Siarhei Vishniakou's avatar Siarhei Vishniakou
Browse files

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
parent 4dcf2fa3
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -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);
};