File: reporter.cpp

package info (click to toggle)
openmw 0.49.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 33,992 kB
  • sloc: cpp: 372,479; xml: 2,149; sh: 1,403; python: 797; makefile: 26
file content (41 lines) | stat: -rw-r--r-- 880 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include "reporter.hpp"
#include "loadinglistener.hpp"

#include <condition_variable>
#include <cstddef>
#include <mutex>

namespace Loading
{
    void Reporter::addTotal(std::size_t value)
    {
        const std::lock_guard lock(mMutex);
        mTotal += value;
        mUpdated.notify_all();
    }

    void Reporter::addProgress(std::size_t value)
    {
        const std::lock_guard lock(mMutex);
        mProgress += value;
        mUpdated.notify_all();
    }

    void Reporter::complete()
    {
        const std::lock_guard lock(mMutex);
        mDone = true;
        mUpdated.notify_all();
    }

    void Reporter::wait(Listener& listener) const
    {
        std::unique_lock lock(mMutex);
        while (!mDone)
        {
            listener.setProgressRange(mTotal);
            listener.setProgress(mProgress);
            mUpdated.wait(lock);
        }
    }
}