includes/type: Added templates for number types with specific base

This commit is contained in:
Nik
2022-10-10 22:36:46 +02:00
committed by GitHub
parent 9c0bf1433c
commit 8e70a5524d

31
includes/type/base.pat Normal file
View File

@@ -0,0 +1,31 @@
#pragma once
#include <std/io.pat>
#include <std/math.pat>
namespace type {
using Hex<T> = T [[format("type::impl::format_hex")]];
using Oct<T> = T [[format("type::impl::format_oct")]];
using Dec<T> = T [[format("type::impl::format_dec")]];
using Bin<T> = T [[format("type::impl::format_bin")]];
namespace impl {
fn format_number(auto value, str fmt) {
bool negative = value < 0;
if (negative)
return std::format("-" + fmt, std::math::abs(value));
else
return std::format(fmt, value);
};
fn format_hex(auto value) { return format_number(value, "0x{:02X}"); };
fn format_oct(auto value) { return format_number(value, "0o{:03o}"); };
fn format_dec(auto value) { return format_number(value, "{}"); };
fn format_bin(auto value) { return format_number(value, "0b{:08b}"); };
}
}