aboutsummaryrefslogtreecommitdiffstats
path: root/vespalib/src/vespa/vespalib/util/address_space.h
blob: d9a112b1a13500ade7e1e60640f897f2134d5218 (plain) (blame)
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
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.

#pragma once

#include <cstddef>
#include <iosfwd>

namespace vespalib {

/**
 * Represents an address space with number of bytes/entries used
 * and the limit number of bytes/entries this address space can represent.
 */
class AddressSpace
{
private:
    size_t _used;
    size_t _dead;
    size_t _limit;

public:
    AddressSpace();
    AddressSpace(size_t used_, size_t dead_, size_t limit_);
    size_t used() const { return _used; }
    size_t dead() const { return _dead; }
    size_t limit() const  { return _limit; }
    double usage() const {
        if (_limit > 0) {
            return (double)(_used - _dead) / (double)_limit;
        }
        return 0;
    }
    bool operator==(const AddressSpace &rhs) const {
        return _used == rhs._used && _dead == rhs._dead && _limit == rhs._limit;
    }
};

std::ostream &operator << (std::ostream &out, const AddressSpace &rhs);

}