[/
    Copyright (c) 2013-2016 Vinnie Falco (vinnie dot falco at gmail dot com)

    Distributed under the Boost Software License, Version 1.0. (See accompanying
    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
]

[section:Progress Progress]

A [*Progress] object provides feedback to callers on the progress of
long running operations such as calls to [link nudb.ref.nudb__verify verify] or
[link nudb.ref.nudb__rekey rekey] which can take days or weeks for database that
measure in the terabytes. These objects are used by passing them as parameters
to the appropriate functions, where the will be called periodically with
numbers that indicate the amount of work completed, versus the total amount
of work required.

In the table below:

* `X` denotes a progress class
* `a` denotes a value of type `X`
* `p` and `q` denote values of type `std::uint64_t`

[table Progress requirements
[[operation] [type] [semantics, pre/post-conditions]]
[
    [`a(p, q)`]
    [ ]
    [
        Indicates to the progress object that work has been performed and
        intermediate results calculated. `p` represents the amount of work
        completed from the beginning of the operation. `q` represents the
        total amount of work required. The fraction of completed work is
        therefore `p/q`, with zero representing no work complete, and one
        represents all work complete. `p` and `q` are unitless.
    ]
]
]

[endsect]
