1#ifndef NEFORCE_CORE_UTILITY_BYTE_SIZE_HPP__
2#define NEFORCE_CORE_UTILITY_BYTE_SIZE_HPP__
15NEFORCE_BEGIN_NAMESPACE__
237 NEFORCE_NODISCARD
string to_string(
unit u,
int precision = 2,
bool binary =
true)
const;
243 NEFORCE_NODISCARD
constexpr bool is_zero() const noexcept {
return bytes_ == 0; }
246 bytes_ += rhs.bytes_;
250 byte_size& operator-=(
const byte_size& rhs) {
251 if (bytes_ < rhs.bytes_) {
252 NEFORCE_THROW_EXCEPTION(value_exception(
"Memory size subtraction underflow"));
254 bytes_ -= rhs.bytes_;
258 byte_size& operator*=(
uint64_t factor) {
263 byte_size& operator/=(
uint64_t divisor) {
265 NEFORCE_THROW_EXCEPTION(value_exception(
"Division by zero"));
271 NEFORCE_NODISCARD
constexpr byte_size
operator+(
const byte_size& rhs)
const noexcept {
272 return byte_size(bytes_ + rhs.bytes_);
275 NEFORCE_NODISCARD byte_size
operator-(
const byte_size& rhs)
const {
276 if (bytes_ < rhs.bytes_) {
277 NEFORCE_THROW_EXCEPTION(value_exception(
"Memory size subtraction underflow"));
279 return byte_size(bytes_ - rhs.bytes_);
284 NEFORCE_THROW_EXCEPTION(value_exception(
"Memory size multiplication overflow"));
286 return byte_size(bytes_ * factor);
291 NEFORCE_THROW_EXCEPTION(value_exception(
"Division by zero"));
293 return byte_size(bytes_ / divisor);
298 NEFORCE_NODISCARD
bool operator==(
const byte_size& rhs)
const {
return bytes_ == rhs.bytes_; }
299 NEFORCE_NODISCARD
bool operator<(
const byte_size& rhs)
const {
return bytes_ < rhs.bytes_; }
315NEFORCE_BEGIN_LITERALS__
449NEFORCE_END_LITERALS__
451NEFORCE_END_NAMESPACE__
NEFORCE_NODISCARD decimal_t as(unit u, bool binary=true) const
转换为指定单位的值
byte_size(decimal_t value, unit u, bool binary=true)
从值和单位构造
constexpr byte_size(uint64_t bytes)
从字节数构造
static NEFORCE_NODISCARD byte_size parse(string_view str)
从字符串解析字节大小
NEFORCE_NODISCARD size_t to_hash() const noexcept
计算哈希值
NEFORCE_NODISCARD constexpr uint64_t bytes() const
获取字节数
NEFORCE_NODISCARD constexpr bool is_zero() const noexcept
检查是否为零
static NEFORCE_NODISCARD byte_size parse(string_view str, bool binary)
从字符串解析字节大小(指定进制)
NEFORCE_NODISCARD string to_string(unit u, int precision=2, bool binary=true) const
转换为指定单位的字符串
constexpr byte_size()=default
默认构造函数
NEFORCE_NODISCARD string to_string() const
转换为可读字符串
static NEFORCE_NODISCARD constexpr T max() noexcept
获取类型的最大值
long double decimal_t
扩展精度浮点数类型
unsigned long long uint64_t
64位无符号整数类型
constexpr duration< inner::__common_rep_t< Rep1, Rep2 >, Period > operator*(const duration< Rep1, Period > &value, const Rep2 &scalar)
乘法运算符(持续时间 * 标量)
constexpr duration< inner::__common_rep_t< Rep1, enable_if_t<!is_duration_v< Rep2 >, Rep2 > >, Period > operator/(const duration< Rep1, Period > &value, const Rep2 &scalar)
除法运算符(持续时间 / 标量)
bool operator==(const function< Res(Args...)> &f, nullptr_t np) noexcept
等于空指针比较
NEFORCE_NODISCARD constexpr bool operator<(const normal_iterator< LeftIter > &lhs, const normal_iterator< RightIter > &rhs) noexcept
小于比较运算符
NEFORCE_NODISCARD constexpr auto operator-(const normal_iterator< LeftIter > &lhs, const normal_iterator< RightIter > &rhs) noexcept -> decltype(lhs.base() - rhs.base())
减法运算符
NEFORCE_NODISCARD constexpr normal_iterator< Iterator > operator+(iter_difference_t< normal_iterator< Iterator > > n, const normal_iterator< Iterator > &iter) noexcept
加法运算符
basic_string_view< char > string_view
字符字符串视图
NEFORCE_NODISCARD NEFORCE_ALWAYS_INLINE constexpr decltype(auto) size(const Container &cont) noexcept(noexcept(cont.size()))
获取容器的大小