56 lines
1.6 KiB
C++
56 lines
1.6 KiB
C++
//
|
|
// Created by kj16609 on 3/21/25.
|
|
//
|
|
#pragma once
|
|
|
|
#include <format>
|
|
#include <string>
|
|
|
|
namespace fgl::size
|
|
{
|
|
std::string toHuman( std::size_t size )
|
|
{
|
|
constexpr std::size_t mod { 1024 };
|
|
if ( size < mod ) return std::format( "{}B", size );
|
|
if ( size < mod * mod ) return std::format( "{}KiB", static_cast< int >( size / mod ) );
|
|
if ( size < mod * mod * mod ) return std::format( "{}MiB", static_cast< int >( size / ( mod * mod ) ) );
|
|
if ( size < mod * mod * mod * mod )
|
|
return std::format( "{}GiB", static_cast< int >( size / ( mod * mod * mod ) ) );
|
|
return std::format( "{}TiB", static_cast< int >( size / ( mod * mod * mod * mod ) ) );
|
|
}
|
|
|
|
namespace literals
|
|
{
|
|
|
|
constexpr unsigned long long int operator""_B( const unsigned long long int size )
|
|
{
|
|
return size;
|
|
}
|
|
|
|
constexpr unsigned long long int operator""_KiB( const unsigned long long int size )
|
|
{
|
|
return size * 1024;
|
|
}
|
|
|
|
constexpr unsigned long long int operator""_MiB( const unsigned long long int size )
|
|
{
|
|
return size * 1024_KiB;
|
|
}
|
|
|
|
constexpr unsigned long long int operator""_GiB( const unsigned long long int size )
|
|
{
|
|
return size * 1024_MiB;
|
|
}
|
|
|
|
inline std::string toString( const unsigned long long int size )
|
|
{
|
|
if ( size < 1024_B ) return std::to_string( size ) + " B";
|
|
if ( size < 1024_KiB ) return std::to_string( size / 1024 ) + " KiB";
|
|
if ( size < 1024_MiB ) return std::to_string( size / 1024_KiB ) + " MiB";
|
|
if ( size < 1024_GiB ) return std::to_string( size / 1024_MiB ) + " GiB";
|
|
return std::to_string( size / 1024_GiB ) + " TiB";
|
|
}
|
|
|
|
} // namespace literals
|
|
|
|
} // namespace fgl::size
|