Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions src/SharpArena/Collections/ArenaUtf8String.cs
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,34 @@ public static ArenaUtf8String Clone(string? src, ArenaAllocator arena)
return new ArenaUtf8String(arena, dest, byteCount);
}

/// <summary>
/// Clones the provided span into arena-managed memory.
/// </summary>
/// <param name="src">The source string to copy</param>
/// <param name="arena">Allocator providing unmanaged storage.</param>
/// <returns>An <see cref="ArenaUtf8String"/> referencing the cloned bytes.</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static ArenaUtf8String Clone(ReadOnlySpan<char> src, ArenaAllocator arena)
{
if (src.IsEmpty)
{
return default;
}

var byteCount = Encoding.UTF8.GetByteCount(src);
if (byteCount == 0)
{
return default;
}

var dest = (byte*)arena.Alloc((uint)byteCount, align: 1);
Encoding.UTF8.GetBytes(
src,
new Span<byte>(dest, byteCount));

return new ArenaUtf8String(arena, dest, byteCount);
}

/// <summary>
/// Clones the provided span into arena-managed memory.
/// </summary>
Expand Down
Loading