// // Created by kj16609 on 3/21/25. // #pragma once #include #include 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