From b24e1b0eb83fea6ca558e3ab02286d42da8a27ce Mon Sep 17 00:00:00 2001 From: doylet Date: Tue, 14 Jul 2026 16:33:10 +1000 Subject: [PATCH] Add str8 truncate --- Single-Header/dn_single_header.cpp | 14 +++++++++++++- Single-Header/dn_single_header.h | 3 ++- Source/dn.cpp | 12 ++++++++++++ Source/dn.h | 1 + 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/Single-Header/dn_single_header.cpp b/Single-Header/dn_single_header.cpp index 0da731d..f482fed 100644 --- a/Single-Header/dn_single_header.cpp +++ b/Single-Header/dn_single_header.cpp @@ -1,4 +1,4 @@ -// Generated by the DN single header generator 2026-07-12 23:15:45 +// Generated by the DN single header generator 2026-07-14 16:32:48 // DN: Single header generator commented out => #if defined(_CLANGD) // #define DN_WITH_TESTS 1 @@ -3817,6 +3817,18 @@ DN_API void DN_Str8Remove(DN_Str8 *string, DN_USize offset, DN_USize count) string->count -= bytes_to_move; } +DN_API DN_Str8 DN_Str8TruncateArena(DN_Str8 string, DN_USize max_count, DN_Str8 truncator, DN_Arena *arena) +{ + DN_Str8 result = {}; + if (string.count > max_count) { + DN_Str8 string_trunc = DN_Str8Subset(string, 0, max_count); + result = DN_Str8FromFmtArena(arena, "%.*s%.*s", DN_Str8PrintFmt(string_trunc), DN_Str8PrintFmt(truncator)); + } else { + result = DN_Str8FromStr8Arena(string, arena); + } + return result; +} + DN_API DN_Str8TruncResult DN_Str8TruncMiddlePtr(DN_Str8 str8, DN_USize side_size, DN_Str8 truncator, char *dest, DN_USize dest_max) { DN_Assert(side_size <= DN_USIZE_MAX / 2); diff --git a/Single-Header/dn_single_header.h b/Single-Header/dn_single_header.h index 2571152..c0fe5b2 100644 --- a/Single-Header/dn_single_header.h +++ b/Single-Header/dn_single_header.h @@ -1,4 +1,4 @@ -// Generated by the DN single header generator 2026-07-12 23:15:45 +// Generated by the DN single header generator 2026-07-14 16:32:48 #if !defined(DN_H) #define DN_H @@ -5061,6 +5061,7 @@ DN_API DN_Str8 DN_Str8AppendFV DN_API DN_Str8 DN_Str8FillF (DN_Arena *arena, DN_USize count, char const *fmt, ...); DN_API DN_Str8 DN_Str8FillFV (DN_Arena *arena, DN_USize count, char const *fmt, va_list args); DN_API void DN_Str8Remove (DN_Str8 *string, DN_USize offset, DN_USize count); +DN_API DN_Str8 DN_Str8TruncateArena (DN_Str8 string, DN_USize max_count, DN_Str8 truncator, DN_Arena *arena); DN_API DN_Str8TruncResult DN_Str8TruncMiddlePtr (DN_Str8 str8, DN_USize side_size, DN_Str8 truncator, char *dest, DN_USize dest_max); DN_API DN_Str8TruncResult DN_Str8TruncMiddle (DN_Str8 str8, DN_USize side_size, DN_Str8 truncator, DN_Arena *arena); DN_API DN_Str8 DN_Str8Lower (DN_Str8 string, DN_Arena *arena); diff --git a/Source/dn.cpp b/Source/dn.cpp index c26ffe9..1983ae8 100644 --- a/Source/dn.cpp +++ b/Source/dn.cpp @@ -3815,6 +3815,18 @@ DN_API void DN_Str8Remove(DN_Str8 *string, DN_USize offset, DN_USize count) string->count -= bytes_to_move; } +DN_API DN_Str8 DN_Str8TruncateArena(DN_Str8 string, DN_USize max_count, DN_Str8 truncator, DN_Arena *arena) +{ + DN_Str8 result = {}; + if (string.count > max_count) { + DN_Str8 string_trunc = DN_Str8Subset(string, 0, max_count); + result = DN_Str8FromFmtArena(arena, "%.*s%.*s", DN_Str8PrintFmt(string_trunc), DN_Str8PrintFmt(truncator)); + } else { + result = DN_Str8FromStr8Arena(string, arena); + } + return result; +} + DN_API DN_Str8TruncResult DN_Str8TruncMiddlePtr(DN_Str8 str8, DN_USize side_size, DN_Str8 truncator, char *dest, DN_USize dest_max) { DN_Assert(side_size <= DN_USIZE_MAX / 2); diff --git a/Source/dn.h b/Source/dn.h index fcaa880..3ec0be6 100644 --- a/Source/dn.h +++ b/Source/dn.h @@ -3131,6 +3131,7 @@ DN_API DN_Str8 DN_Str8AppendFV DN_API DN_Str8 DN_Str8FillF (DN_Arena *arena, DN_USize count, char const *fmt, ...); DN_API DN_Str8 DN_Str8FillFV (DN_Arena *arena, DN_USize count, char const *fmt, va_list args); DN_API void DN_Str8Remove (DN_Str8 *string, DN_USize offset, DN_USize count); +DN_API DN_Str8 DN_Str8TruncateArena (DN_Str8 string, DN_USize max_count, DN_Str8 truncator, DN_Arena *arena); DN_API DN_Str8TruncResult DN_Str8TruncMiddlePtr (DN_Str8 str8, DN_USize side_size, DN_Str8 truncator, char *dest, DN_USize dest_max); DN_API DN_Str8TruncResult DN_Str8TruncMiddle (DN_Str8 str8, DN_USize side_size, DN_Str8 truncator, DN_Arena *arena); DN_API DN_Str8 DN_Str8Lower (DN_Str8 string, DN_Arena *arena);