HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
iso_639.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
20class iso_639 {
21public:
22 constexpr iso_639(iso_639 const &) noexcept = default;
23 constexpr iso_639(iso_639 &&) noexcept = default;
24 constexpr iso_639 &operator=(iso_639 const &) noexcept = default;
25 constexpr iso_639 &operator=(iso_639 &&) noexcept = default;
26
27 constexpr iso_639() noexcept : v0(0), v1(0), v2(0) {}
28
29 constexpr iso_639(std::string_view str) noexcept
30 {
31 if (std::size(str) == 0) {
32 _v0 = 0;
33 _v1 = 0;
34 _v2 = 0;
35 } else if (std::size(str) == 2) {
36 _v0 = to_lower(str[0]);
37 _v1 = to_lower(str[1]);
38 _v2 = 0;
39 } else if (std::size(str) == 3) {
40 _v0 = to_lower(str[0]);
41 _v1 = to_lower(str[1]);
42 _v2 = to_lower(str[2]);
43 } else {
44 tt_no_default();
45 }
46 }
47
48 constexpr explicit operator bool () const noexcept
49 {
50 return _v0 == 0 and _v1 == 0 and _v2 == 0;
51 }
52
53 constexpr explicit operator std::string() const noexcept
54 {
55 auto r = std::string{};
56 if (_v0 == 0) {
57 return r;
58 }
59
60 r += _v0;
61 if (_v1 == 0) {
62 return r;
63 }
64
65 r += _v1;
66 if (_v2 == 0) {
67 return r;
68 }
69
70 r += _v2;
71 return r;
72 }
73
74 [[nodiscard]] constexpr friend operator==(iso_639 const &lhs, iso_639 const &rhs) noexcept = default;
75 [[nodiscard]] constexpr friend operator<=>(iso_639 const &lhs, iso_639 const &rhs) noexcept = default;
76
77private:
78 char _v0;
79 char _v1;
80 char _v2;
81};
82
83}
84
ISO-639 language code.
Definition iso_639.hpp:20