HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
iso_3166.hpp
1// Copyright Take Vos 2021.
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt)
4
5#pragma once
6
7#include <cctype>
8#include "../assert.hpp"
9#include "../strings.hpp"
10
11namespace tt {
12
17class iso_3166 {
18public:
19 constexpr iso_3166(iso_3166 const &) noexcept = default;
20 constexpr iso_3166(iso_3166 &&) noexcept = default;
21 constexpr iso_3166 &operator=(iso_3166 const &) noexcept = default;
22 constexpr iso_3166 &operator=(iso_3166 &&) noexcept = default;
23
24 constexpr iso_3166() noexcept : v0(0), v1(0) {}
25
26 constexpr iso_3166(std::string_view str) noexcept
27 {
28 if (std::size(str) == 0) {
29 _v0 = 0;
30 _v1 = 0;
31 } else if (std::size(str) == 2) {
32 _v0 = to_upper(str[0]);
33 _v1 = to_upper(str[1]);
34 } else {
35 tt_no_default();
36 }
37 }
38
39 constexpr explicit operator bool () const noexcept
40 {
41 return _v0 == 0 and _v1 == 0;
42 }
43
44 constexpr explicit operator std::string() const noexcept
45 {
46 auto r = std::string{};
47 if (_v0 == 0) {
48 return r;
49 }
50
51 r += _v0;
52 if (_v1 == 0) {
53 return r;
54 }
55
56 r += _v1;
57 return r;
58 }
59
60 [[nodiscard]] constexpr friend operator==(iso_3166 const &lhs, iso_3166 const &rhs) noexcept = default;
61 [[nodiscard]] constexpr friend operator<=>(iso_3166 const &lhs, iso_3166 const &rhs) noexcept = default;
62
63private:
64 char _v0;
65 char _v1;
66};
67
68}
69
ISO-3166 country code.
Definition iso_3166.hpp:17