aboutsummaryrefslogtreecommitdiffstats
path: root/searchcore/src/vespa/searchcore/proton/common/hw_info.h
blob: 6856f9924ecd3dd41e3890e26860be207c460425 (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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.

#pragma once

#include <cstdint>
#include <algorithm>

namespace proton {

/*
 * Class describing some hardware on the machine.
 */
class HwInfo
{
public:
    class Disk {
    private:
        uint64_t _sizeBytes;
        bool _slow;
        bool _shared;
    public:
        Disk(uint64_t sizeBytes_, bool slow_, bool shared_)
            : _sizeBytes(sizeBytes_), _slow(slow_), _shared(shared_) {}
        uint64_t sizeBytes() const { return _sizeBytes; }
        bool slow() const { return _slow; }
        bool shared() const { return _shared; }
        bool operator == (const Disk & rhs) const {
            return (_sizeBytes == rhs._sizeBytes) && (_slow == rhs._slow) && (_shared == rhs._shared);
        }
    };

    class Memory {
    private:
        uint64_t _sizeBytes;
    public:
        Memory(uint64_t sizeBytes_) : _sizeBytes(sizeBytes_) {}
        uint64_t sizeBytes() const { return _sizeBytes; }
        bool operator == (const Memory & rhs) const { return _sizeBytes == rhs._sizeBytes; }
    };

    class Cpu {
    private:
        uint32_t _cores;
    public:
        Cpu(uint32_t cores_) : _cores(std::max(1u, cores_)) { }
        uint32_t cores() const { return _cores; }
        bool operator == (const Cpu & rhs) const { return _cores == rhs._cores; }
    };

private:
    Disk _disk;
    Memory _memory;
    Cpu _cpu;

public:
    HwInfo()
        : _disk(0, false, false),
          _memory(0),
          _cpu(1)
    {
    }

    HwInfo(const Disk &disk_,
           const Memory &memory_,
           const Cpu &cpu_)
        : _disk(disk_),
          _memory(memory_),
          _cpu(cpu_)
    {
    }

    const Disk &disk() const { return _disk; }
    const Memory &memory() const { return _memory; }
    const Cpu &cpu() const { return _cpu; }
    bool operator == (const HwInfo & rhs) const {
        return (_cpu == rhs._cpu) && (_disk == rhs._disk) && (_memory == rhs._memory);
    }
};

}