Cthulhu  0.2.10
Cthulhu compiler collection
memory.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <string>
4 
5 struct Memory {
6  enum Unit {
12  eLimit
13  };
14 
15  static constexpr size_t kByte = 1;
16  static constexpr size_t kKilobyte = kByte * 1024;
17  static constexpr size_t kMegabyte = kKilobyte * 1024;
18  static constexpr size_t kGigabyte = kMegabyte * 1024;
19  static constexpr size_t kTerabyte = kGigabyte * 1024;
20 
21  static constexpr size_t kSizes[eLimit] = {
22  kByte,
23  kKilobyte,
24  kMegabyte,
25  kGigabyte,
26  kTerabyte
27  };
28 
29  static constexpr const char *kNames[eLimit] = {
30  "b", "kb", "mb", "gb", "tb"
31  };
32 
33  constexpr Memory(size_t memory = 0, Unit unit = eBytes)
34  : mBytes(memory * kSizes[unit])
35  { }
36 
37  constexpr static Memory bytes(size_t bytes) { return Memory(bytes, eBytes); }
38  constexpr static Memory kilobytes(size_t kilobytes) { return Memory(kilobytes, eKilobytes); }
39  constexpr static Memory megabytes(size_t megabytes) { return Memory(megabytes, eMegabytes); }
40  constexpr static Memory gigabytes(size_t gigabytes) { return Memory(gigabytes, eGigabytes); }
41  constexpr static Memory terabytes(size_t terabytes) { return Memory(terabytes, eTerabytes); }
42 
43  constexpr size_t b() const { return mBytes; }
44  constexpr size_t kb() const { return mBytes / kKilobyte; }
45  constexpr size_t mb() const { return mBytes / kMegabyte; }
46  constexpr size_t gb() const { return mBytes / kGigabyte; }
47  constexpr size_t tb() const { return mBytes / kTerabyte; }
48 
49  constexpr size_t as_bytes() const { return mBytes; }
50  constexpr size_t as_kilobytes() const { return mBytes / kKilobyte; }
51  constexpr size_t as_megabytes() const { return mBytes / kMegabyte; }
52  constexpr size_t as_gigabytes() const { return mBytes / kGigabyte; }
53  constexpr size_t as_terabytes() const { return mBytes / kTerabyte; }
54 
55  friend constexpr auto operator<=>(const Memory& lhs, const Memory& rhs) = default;
56 
57  constexpr Memory operator+(const Memory& rhs) const { return Memory(mBytes + rhs.mBytes); }
58  constexpr Memory operator-(const Memory& rhs) const { return Memory(mBytes - rhs.mBytes); }
59 
60  constexpr Memory& operator+=(const Memory& rhs) { mBytes += rhs.mBytes; return *this; }
61  constexpr Memory& operator-=(const Memory& rhs) { mBytes -= rhs.mBytes; return *this; }
62 
63  std::string to_string() const;
64 
65 private:
66  size_t mBytes;
67 };
Definition: memory.hpp:5
constexpr friend auto operator<=>(const Memory &lhs, const Memory &rhs)=default
constexpr size_t mb() const
Definition: memory.hpp:45
constexpr size_t as_gigabytes() const
Definition: memory.hpp:52
constexpr size_t gb() const
Definition: memory.hpp:46
static constexpr size_t kGigabyte
Definition: memory.hpp:18
static constexpr size_t kKilobyte
Definition: memory.hpp:16
constexpr Memory & operator+=(const Memory &rhs)
Definition: memory.hpp:60
Unit
Definition: memory.hpp:6
@ eKilobytes
Definition: memory.hpp:8
@ eGigabytes
Definition: memory.hpp:10
@ eMegabytes
Definition: memory.hpp:9
@ eBytes
Definition: memory.hpp:7
@ eTerabytes
Definition: memory.hpp:11
@ eLimit
Definition: memory.hpp:12
constexpr static Memory gigabytes(size_t gigabytes)
Definition: memory.hpp:40
constexpr size_t kb() const
Definition: memory.hpp:44
constexpr Memory operator+(const Memory &rhs) const
Definition: memory.hpp:57
constexpr size_t tb() const
Definition: memory.hpp:47
std::string to_string() const
Definition: memory.cpp:5
constexpr Memory operator-(const Memory &rhs) const
Definition: memory.hpp:58
constexpr size_t as_megabytes() const
Definition: memory.hpp:51
constexpr Memory(size_t memory=0, Unit unit=eBytes)
Definition: memory.hpp:33
static constexpr size_t kMegabyte
Definition: memory.hpp:17
constexpr static Memory kilobytes(size_t kilobytes)
Definition: memory.hpp:38
static constexpr const char * kNames[eLimit]
Definition: memory.hpp:29
constexpr static Memory terabytes(size_t terabytes)
Definition: memory.hpp:41
constexpr size_t as_bytes() const
Definition: memory.hpp:49
static constexpr size_t kSizes[eLimit]
Definition: memory.hpp:21
constexpr static Memory megabytes(size_t megabytes)
Definition: memory.hpp:39
constexpr Memory & operator-=(const Memory &rhs)
Definition: memory.hpp:61
static constexpr size_t kByte
Definition: memory.hpp:15
constexpr size_t as_kilobytes() const
Definition: memory.hpp:50
static constexpr size_t kTerabyte
Definition: memory.hpp:19
constexpr size_t b() const
Definition: memory.hpp:43
constexpr size_t as_terabytes() const
Definition: memory.hpp:53
constexpr static Memory bytes(size_t bytes)
Definition: memory.hpp:37