Melon
A C++ library designed for RadishOS.
Loading...
Searching...
No Matches
Conversion.hpp
1#pragma once
2
3#include "String.hpp"
4
5#include <type_traits>
6#include <utility>
7
10{
12 enum class Base
13 {
14 Binary = 2,
15 Octal = 8,
16 Decimal = 10,
17 Hexadecimal = 16
18 };
19
21 template<typename T>
23 {
24 T value;
25 static constexpr Base base = Base::Binary;
26 };
27
29 template<typename T>
31 {
32 T value;
33 static constexpr Base base = Base::Octal;
34 };
35
37 template<typename T>
39 {
40 T value;
41 static constexpr Base base = Base::Hexadecimal;
42 };
43
45 template<typename T>
47 {
48 return {value};
49 }
50
52 template<typename T>
54 {
55 return {value};
56 }
57
59 template<typename T>
61 {
62 return {value};
63 }
64
68 const char *baseToString(Base base);
69
74 template<typename T>
75 requires std::is_signed_v<T>
77 {
79 String::String digits = "0123456789abcdef";
80
81 bool is_negative = false;
82
83 if (value < 0) {
84 is_negative = true;
85 value = -value;
86 }
87
88 if (value == 0) {
89 str.appendChar('0');
90 return str;
91 }
92
93 while (value != 0) {
94 T remaining = value % std::to_underlying(base);
95 str.appendChar(digits[remaining]);
96 value = value / std::to_underlying(base);
97 }
98
99 if (is_negative)
100 str.appendChar('-');
101
102 return str.reverse();
103 }
104
108 template<typename T>
109 requires std::is_unsigned_v<T>
111 {
112 String::String str;
113 String::String digits = "0123456789abcdef";
114
115 if (value == 0) {
116 str.appendChar('0');
117 return str;
118 }
119
120 while (value != 0) {
121 T remaining = value % std::to_underlying(base);
122 str.appendChar(digits[remaining]);
123 value = value / std::to_underlying(base);
124 }
125
126 return str.reverse();
127 }
128} // namespace Melon::Conversion
A dynamic string.
Definition String.hpp:11
String reverse(this String &self)
Reverse the string.
Definition String.cpp:69
void appendChar(this String &self, char ch)
Appends a character to the string.
Definition String.cpp:62
Contains functions to convert types into other types.
Definition Conversion.hpp:10
OctalValue< T > oct(T value)
Convert a value to an OctalValue.
Definition Conversion.hpp:53
HexadecimalValue< T > hex(T value)
Convert a value to a HexadecimalValue.
Definition Conversion.hpp:60
String::String intToString(T value, Base base)
Convert an integer to a String::String.
Definition Conversion.hpp:76
const char * baseToString(Base base)
Convert a base to a raw string.
Definition Conversion.cpp:15
Base
All conversion functions that take integers should support these bases.
Definition Conversion.hpp:13
String::String uintToString(T value, Base base)
Convert an unsigned integer to a String::String.
Definition Conversion.hpp:110
BinaryValue< T > bin(T value)
Convert a value to a BinaryValue.
Definition Conversion.hpp:46
Used to treat values as binary values.
Definition Conversion.hpp:23
Used to treat values as hexadecimal values.
Definition Conversion.hpp:39
Used to treat values as octal values.
Definition Conversion.hpp:31