Bash++
Bash++ compiler internal documentation
BashVersion.h
Go to the documentation of this file.
1
7#pragma once
8
9#include <cstdint>
10#include <string>
11#include <stdexcept>
12
23 uint16_t major = 5;
24 uint16_t minor = 2;
25
26 constexpr operator uint32_t() const {
27 return (static_cast<uint32_t>(major) << 16) | static_cast<uint32_t>(minor);
28 }
29
30 constexpr bool operator>=(const BashVersion& other) const {
31 return static_cast<uint32_t>(*this) >= static_cast<uint32_t>(other);
32 }
33
34 constexpr bool operator<=(const BashVersion& other) const {
35 return static_cast<uint32_t>(*this) <= static_cast<uint32_t>(other);
36 }
37
38 constexpr bool operator>(const BashVersion& other) const {
39 return static_cast<uint32_t>(*this) > static_cast<uint32_t>(other);
40 }
41
42 constexpr bool operator<(const BashVersion& other) const {
43 return static_cast<uint32_t>(*this) < static_cast<uint32_t>(other);
44 }
45
46 constexpr bool operator==(const BashVersion& other) const {
47 return static_cast<uint32_t>(*this) == static_cast<uint32_t>(other);
48 }
49
50 constexpr bool operator!=(const BashVersion& other) const {
51 return static_cast<uint32_t>(*this) != static_cast<uint32_t>(other);
52 }
53
54 constexpr std::string to_string() const {
55 return std::to_string(major) + "." + std::to_string(minor);
56 }
57
58 constexpr operator std::string() const {
59 return to_string();
60 }
61
62 constexpr BashVersion() = default;
63 constexpr ~BashVersion() = default;
64 constexpr BashVersion(const BashVersion&) = default;
65 constexpr BashVersion& operator=(const BashVersion&) = default;
66 constexpr BashVersion(BashVersion&&) = default;
67 constexpr BashVersion& operator=(BashVersion&&) = default;
68
69 constexpr BashVersion(uint16_t major, uint16_t minor) : major(major), minor(minor) {}
70
79 explicit constexpr BashVersion(std::string_view version_string) {
80 uint16_t* current = &major;
81 uint16_t value = 0;
82
83 for (const auto& c : version_string) {
84 switch (c) {
85 case '0' ... '9':
86 value = (value * 10) + (c - '0');
87 break;
88 case '.':
89 if (current == &minor)
90 throw std::invalid_argument("Invalid Bash version: " + std::string(version_string));
91 *current = value;
92 current = &minor;
93 value = 0;
94 break;
95 default:
96 throw std::invalid_argument("Invalid Bash version: " + std::string(version_string));
97 }
98 }
99 *current = value;
100
101 // If we never encountered a dot, the entire string was the major version
102 if (current == &major) minor = 0;
103 }
104};
Represents a Bash version to target for code generation.
Definition BashVersion.h:22
constexpr BashVersion & operator=(const BashVersion &)=default
uint16_t minor
Definition BashVersion.h:24
constexpr BashVersion(BashVersion &&)=default
uint16_t major
Definition BashVersion.h:23
constexpr bool operator<=(const BashVersion &other) const
Definition BashVersion.h:34
constexpr ~BashVersion()=default
constexpr std::string to_string() const
Definition BashVersion.h:54
constexpr bool operator==(const BashVersion &other) const
Definition BashVersion.h:46
constexpr BashVersion & operator=(BashVersion &&)=default
constexpr bool operator<(const BashVersion &other) const
Definition BashVersion.h:42
constexpr bool operator!=(const BashVersion &other) const
Definition BashVersion.h:50
constexpr BashVersion(uint16_t major, uint16_t minor)
Definition BashVersion.h:69
constexpr bool operator>(const BashVersion &other) const
Definition BashVersion.h:38
constexpr BashVersion()=default
constexpr BashVersion(std::string_view version_string)
Constructs a BashVersion from a string in the format "major.minor" (e.g., "5.2")
Definition BashVersion.h:79
constexpr BashVersion(const BashVersion &)=default
constexpr bool operator>=(const BashVersion &other) const
Definition BashVersion.h:30