98 lines
5.1 KiB
C
98 lines
5.1 KiB
C
#if !defined(DN_BASE_CONVERT_H)
|
|
#define DN_BASE_CONVERT_H
|
|
|
|
#include "../dn_base_inc.h"
|
|
|
|
struct DN_CVTU64Str8
|
|
{
|
|
char data[27 + 1]; // NOTE(dn): 27 is the maximum size of DN_U64 including a separator
|
|
DN_U8 size;
|
|
};
|
|
|
|
enum DN_CVTBytesType
|
|
{
|
|
DN_CVTBytesType_B,
|
|
DN_CVTBytesType_KiB,
|
|
DN_CVTBytesType_MiB,
|
|
DN_CVTBytesType_GiB,
|
|
DN_CVTBytesType_TiB,
|
|
DN_CVTBytesType_Count,
|
|
DN_CVTBytesType_Auto,
|
|
};
|
|
|
|
struct DN_CVTU64Bytes
|
|
{
|
|
DN_CVTBytesType type;
|
|
DN_Str8 suffix; // "KiB", "MiB", "GiB" .. e.t.c
|
|
DN_F64 bytes;
|
|
};
|
|
|
|
struct DN_CVTU64HexStr
|
|
{
|
|
char data[2 /*0x*/ + 16 /*hex*/ + 1 /*null-terminator*/];
|
|
DN_U8 size;
|
|
};
|
|
|
|
typedef DN_U32 DN_CVTU64HexStrFlags;
|
|
enum DN_CVTU64HexStrFlags_
|
|
{
|
|
DN_CVTU64HexStrFlags_Nil = 0,
|
|
DN_CVTU64HexStrFlags_0xPrefix = 1 << 0, /// Add the '0x' prefix from the string
|
|
DN_CVTU64HexStrFlags_UppercaseHex = 1 << 1, /// Use uppercase ascii characters for hex
|
|
};
|
|
|
|
typedef DN_U32 DN_CVTU64AgeUnit;
|
|
enum DN_CVTU64AgeUnit_
|
|
{
|
|
DN_CVTU64AgeUnit_Sec = 1 << 0,
|
|
DN_CVTU64AgeUnit_Min = 1 << 1,
|
|
DN_CVTU64AgeUnit_Hr = 1 << 2,
|
|
DN_CVTU64AgeUnit_Day = 1 << 3,
|
|
DN_CVTU64AgeUnit_Week = 1 << 4,
|
|
DN_CVTU64AgeUnit_Year = 1 << 5,
|
|
DN_CVTU64AgeUnit_HMS = DN_CVTU64AgeUnit_Sec | DN_CVTU64AgeUnit_Min | DN_CVTU64AgeUnit_Hr,
|
|
DN_CVTU64AgeUnit_All = DN_CVTU64AgeUnit_HMS | DN_CVTU64AgeUnit_Day | DN_CVTU64AgeUnit_Week | DN_CVTU64AgeUnit_Year,
|
|
};
|
|
|
|
struct DN_NibbleFromU8Result
|
|
{
|
|
char nibble0;
|
|
char nibble1;
|
|
};
|
|
|
|
DN_API DN_NibbleFromU8Result DN_CVT_NibbleFromU8 (DN_U8 u8);
|
|
DN_API DN_U8 DN_CVT_U8FromHexNibble (char hex);
|
|
|
|
DN_API int DN_CVT_FmtBuffer3DotTruncate (char *buffer, int size, DN_FMT_ATTRIB char const *fmt, ...);
|
|
DN_API DN_CVTU64Str8 DN_CVT_Str8FromU64 (DN_U64 val, char separator);
|
|
DN_API DN_CVTU64Bytes DN_CVT_BytesFromU64 (DN_U64 bytes, DN_CVTBytesType type);
|
|
#define DN_CVT_BytesFromU64Auto(bytes) DN_CVT_BytesFromU64(bytes, DN_CVTBytesType_Auto)
|
|
DN_API DN_Str8 DN_CVT_BytesStr8FromU64 (DN_Arena *arena, DN_U64 bytes, DN_CVTBytesType type);
|
|
#define DN_CVT_BytesStr8FromU64Auto(arena, bytes) DN_CVT_BytesStr8FromU64(arena, bytes, DN_CVTBytesType_Auto)
|
|
#define DN_CVT_BytesStr8FromTLS(bytes, type) DN_CVT_BytesStr8FromU64(DN_OS_TLSTopArena(), bytes, type)
|
|
#define DN_CVT_BytesStr8FromU64AutoTLS(bytes) DN_CVT_BytesStr8FromU64(DN_OS_TLSTopArena(), bytes, DN_CVTBytesType_Auto)
|
|
#define DN_CVT_BytesStr8FromU64Frame(bytes, type) DN_CVT_BytesStr8FromU64(DN_OS_TLSFrameArena(), bytes, type)
|
|
#define DN_CVT_BytesStr8FromU64AutoFrame(bytes) DN_CVT_BytesStr8FromU64(DN_OS_TLSFrameArena(), bytes, DN_CVTBytesType_Auto)
|
|
DN_API DN_Str8 DN_CVT_BytesTypeToStr8 (DN_CVTBytesType type);
|
|
DN_API DN_Str8 DN_CVT_AgeFromU64 (DN_Arena *arena, DN_U64 age_s, DN_CVTU64AgeUnit unit);
|
|
DN_API DN_Str8 DN_CVT_AgeFromF64 (DN_Arena *arena, DN_F64 age_s, DN_CVTU64AgeUnit unit);
|
|
|
|
DN_API DN_U64 DN_CVT_U64FromHex (DN_Str8 hex);
|
|
DN_API DN_Str8 DN_CVT_HexFromU64 (DN_Arena *arena, DN_U64 number, DN_CVTU64HexStrFlags flags);
|
|
#define DN_CVT_HexFromU64Frame(number, flags) DN_CVT_HexFromU64(DN_OS_TLSFrameArena(), number, flags)
|
|
DN_API DN_CVTU64HexStr DN_CVT_HexFromU64Str (DN_U64 number, DN_CVTU64HexStrFlags flags);
|
|
|
|
DN_API bool DN_CVT_HexFromBytesPtr (void const *src, DN_USize src_size, char *dest, DN_USize dest_size);
|
|
DN_API DN_Str8 DN_CVT_HexFromBytes (DN_Arena *arena, void const *src, DN_USize size);
|
|
#define DN_CVT_HexFromBytesTLS(...) DN_CVT_HexFromBytes(DN_OS_TLSTopArena(), __VA_ARGS__)
|
|
#define DN_CVT_HexFromBytesFrame(...) DN_CVT_HexFromBytes(DN_OS_TLSFrameArena(), __VA_ARGS__)
|
|
|
|
DN_API DN_USize DN_CVT_BytesFromHexPtrUnchecked (DN_Str8 hex, void *dest, DN_USize dest_size);
|
|
DN_API DN_USize DN_CVT_BytesFromHexPtr (DN_Str8 hex, void *dest, DN_USize dest_size);
|
|
DN_API DN_Str8 DN_CVT_BytesFromHexUnchecked (DN_Arena *arena, DN_Str8 hex);
|
|
#define DN_CVT_BytesFromHexUncheckedFromTLS(...) DN_CVT_BytesFromHexUnchecked(DN_OS_TLSTopArena(), __VA_ARGS__)
|
|
DN_API DN_Str8 DN_CVT_BytesFromHex (DN_Arena *arena, DN_Str8 hex);
|
|
#define DN_CVT_BytesFromHexFrame(...) DN_CVT_BytesFromHex(DN_OS_TLSFrameArena(), __VA_ARGS__)
|
|
#define DN_CVT_BytesFromHexTLS(...) DN_CVT_BytesFromHex(DN_OS_TLSTopArena(), __VA_ARGS__)
|
|
#endif // defined(DN_BASE_CONVERT_H)
|