diff --git a/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/Module#FFI.verified.cs b/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/Module#FFI.verified.cs index b2cd9aa15be..9d600796316 100644 --- a/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/Module#FFI.verified.cs +++ b/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/Module#FFI.verified.cs @@ -1001,7 +1001,7 @@ public static void __describe_module__(SpacetimeDB.Internal.BytesSink d) => [UnmanagedCallersOnly(EntryPoint = "__call_reducer__")] public static SpacetimeDB.Internal.Errno __call_reducer__( - uint id, + int id, ulong sender_0, ulong sender_1, ulong sender_2, diff --git a/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#FFI.verified.cs b/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#FFI.verified.cs index 7c8bfb9f93b..e8c1fbcb985 100644 --- a/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#FFI.verified.cs +++ b/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#FFI.verified.cs @@ -1149,7 +1149,7 @@ public static void __describe_module__(SpacetimeDB.Internal.BytesSink d) => [UnmanagedCallersOnly(EntryPoint = "__call_reducer__")] public static SpacetimeDB.Internal.Errno __call_reducer__( - uint id, + int id, ulong sender_0, ulong sender_1, ulong sender_2, diff --git a/crates/bindings-csharp/Codegen/Module.cs b/crates/bindings-csharp/Codegen/Module.cs index 500a36a5406..4608484b6b5 100644 --- a/crates/bindings-csharp/Codegen/Module.cs +++ b/crates/bindings-csharp/Codegen/Module.cs @@ -876,7 +876,7 @@ public static void Main() { [UnmanagedCallersOnly(EntryPoint = "__call_reducer__")] public static SpacetimeDB.Internal.Errno __call_reducer__( - uint id, + int id, ulong sender_0, ulong sender_1, ulong sender_2, diff --git a/crates/bindings-csharp/Runtime/Internal/FFI.cs b/crates/bindings-csharp/Runtime/Internal/FFI.cs index 626883902fa..033ee639553 100644 --- a/crates/bindings-csharp/Runtime/Internal/FFI.cs +++ b/crates/bindings-csharp/Runtime/Internal/FFI.cs @@ -128,15 +128,15 @@ public readonly record struct RowIter(uint Handle) [LibraryImport(StdbNamespace)] public static partial CheckedStatus table_id_from_name( - [In] byte[] name, - uint name_len, + ReadOnlySpan name, + int name_len, out TableId out_ ); [LibraryImport(StdbNamespace)] public static partial CheckedStatus index_id_from_name( - [In] byte[] name, - uint name_len, + ReadOnlySpan name, + int name_len, out IndexId out_ ); @@ -153,20 +153,20 @@ out RowIter out_ public static partial CheckedStatus datastore_btree_scan_bsatn( IndexId index_id, ReadOnlySpan prefix, - uint prefix_len, + int prefix_len, ColId prefix_elems, ReadOnlySpan rstart, - uint rstart_len, + int rstart_len, ReadOnlySpan rend, - uint rend_len, + int rend_len, out RowIter out_ ); [LibraryImport(StdbNamespace)] public static partial Errno row_iter_bsatn_advance( RowIter iter_handle, - [MarshalUsing(CountElementName = nameof(buffer_len))] [Out] byte[] buffer, - ref uint buffer_len + Span buffer, + ref int buffer_len ); [LibraryImport(StdbNamespace)] @@ -176,27 +176,27 @@ ref uint buffer_len public static partial CheckedStatus datastore_insert_bsatn( TableId table_id, Span row, - ref uint row_len + ref int row_len ); [LibraryImport(StdbNamespace)] public static partial CheckedStatus datastore_delete_by_btree_scan_bsatn( IndexId index_id, ReadOnlySpan prefix, - uint prefix_len, + int prefix_len, ColId prefix_elems, ReadOnlySpan rstart, - uint rstart_len, + int rstart_len, ReadOnlySpan rend, - uint rend_len, + int rend_len, out uint out_ ); [LibraryImport(StdbNamespace)] public static partial CheckedStatus datastore_delete_all_by_eq_bsatn( TableId table_id, - [In] byte[] relation, - uint relation_len, + ReadOnlySpan relation, + int relation_len, out uint out_ ); @@ -204,14 +204,14 @@ out uint out_ public static partial Errno bytes_source_read( BytesSource source, Span buffer, - ref uint buffer_len + ref int buffer_len ); [LibraryImport(StdbNamespace)] public static partial CheckedStatus bytes_sink_write( BytesSink sink, ReadOnlySpan buffer, - ref uint buffer_len + ref int buffer_len ); public enum LogLevel : byte @@ -227,13 +227,13 @@ public enum LogLevel : byte [LibraryImport(StdbNamespace)] public static partial void console_log( LogLevel level, - [In] byte[] target, - uint target_len, - [In] byte[] filename, - uint filename_len, + ReadOnlySpan target, + int target_len, + ReadOnlySpan filename, + int filename_len, uint line_number, - [In] byte[] message, - uint message_len + ReadOnlySpan message, + int message_len ); [NativeMarshalling(typeof(ConsoleTimerIdMarshaller))] @@ -262,17 +262,17 @@ internal static class ConsoleTimerIdMarshaller } [LibraryImport(StdbNamespace)] - public static partial ConsoleTimerId console_timer_start([In] byte[] name, uint name_len); + public static partial ConsoleTimerId console_timer_start(ReadOnlySpan name, int name_len); [LibraryImport(StdbNamespace)] public static partial CheckedStatus console_timer_end(ConsoleTimerId stopwatch_id); [LibraryImport(StdbNamespace)] public static partial void volatile_nonatomic_schedule_immediate( - [In] byte[] name, - uint name_len, - [In] byte[] args, - uint args_len + ReadOnlySpan name, + int name_len, + ReadOnlySpan args, + int args_len ); // Note #1: our Identity type has the same layout as a fixed-size 32-byte little-endian buffer, diff --git a/crates/bindings-csharp/Runtime/Internal/IIndex.cs b/crates/bindings-csharp/Runtime/Internal/IIndex.cs index 5abc12620e4..68763795051 100644 --- a/crates/bindings-csharp/Runtime/Internal/IIndex.cs +++ b/crates/bindings-csharp/Runtime/Internal/IIndex.cs @@ -11,7 +11,7 @@ public abstract class IndexBase public IndexBase(string name) { var name_bytes = System.Text.Encoding.UTF8.GetBytes(name); - FFI.index_id_from_name(name_bytes, (uint)name_bytes.Length, out indexId); + FFI.index_id_from_name(name_bytes, name_bytes.Length, out indexId); } private static void ToParams( @@ -50,12 +50,12 @@ protected uint DoDelete(Bounds bounds) FFI.datastore_delete_by_btree_scan_bsatn( indexId, prefix, - (uint)prefix.Length, + prefix.Length, prefixElems, rstart, - (uint)rstart.Length, + rstart.Length, rend, - (uint)rend.Length, + rend.Length, out var out_ ); return out_; @@ -70,12 +70,12 @@ protected override void IterStart(out FFI.RowIter handle) FFI.datastore_btree_scan_bsatn( indexId, prefix, - (uint)prefix.Length, + prefix.Length, prefixElems, rstart, - (uint)rstart.Length, + rstart.Length, rend, - (uint)rend.Length, + rend.Length, out handle ); } diff --git a/crates/bindings-csharp/Runtime/Internal/IReducer.cs b/crates/bindings-csharp/Runtime/Internal/IReducer.cs index 83474da82f9..54ba99a4935 100644 --- a/crates/bindings-csharp/Runtime/Internal/IReducer.cs +++ b/crates/bindings-csharp/Runtime/Internal/IReducer.cs @@ -26,9 +26,9 @@ public static void VolatileNonatomicScheduleImmediate(string name, MemoryStream FFI.volatile_nonatomic_schedule_immediate( name_bytes, - (uint)name_bytes.Length, + name_bytes.Length, args_bytes, - (uint)args_bytes.Length + args_bytes.Length ); } } diff --git a/crates/bindings-csharp/Runtime/Internal/ITable.cs b/crates/bindings-csharp/Runtime/Internal/ITable.cs index 7a1bca01a1e..a1ada2d9821 100644 --- a/crates/bindings-csharp/Runtime/Internal/ITable.cs +++ b/crates/bindings-csharp/Runtime/Internal/ITable.cs @@ -17,10 +17,9 @@ public bool MoveNext() return false; } - uint buffer_len; while (true) { - buffer_len = (uint)buffer.Length; + var buffer_len = buffer.Length; var ret = FFI.row_iter_bsatn_advance(handle, buffer, ref buffer_len); if (ret == Errno.EXHAUSTED) { @@ -116,7 +115,7 @@ protected override void IterStart(out FFI.RowIter handle) => new(() => { var name_bytes = System.Text.Encoding.UTF8.GetBytes(tableName); - FFI.table_id_from_name(name_bytes, (uint)name_bytes.Length, out var out_); + FFI.table_id_from_name(name_bytes, name_bytes.Length, out var out_); return out_; }); @@ -142,11 +141,11 @@ protected static T DoInsert(T row) { // Insert the row. var bytes = IStructuralReadWrite.ToBytes(row); - var bytes_len = (uint)bytes.Length; + var bytes_len = bytes.Length; FFI.datastore_insert_bsatn(tableId, bytes, ref bytes_len); // Write back any generated column values. - using var stream = new MemoryStream(bytes, 0, (int)bytes_len); + using var stream = new MemoryStream(bytes, 0, bytes_len); using var reader = new BinaryReader(stream); return View.ReadGenFields(reader, row); } @@ -154,7 +153,7 @@ protected static T DoInsert(T row) protected static bool DoDelete(T row) { var bytes = IStructuralReadWrite.ToBytes(row); - FFI.datastore_delete_all_by_eq_bsatn(tableId, bytes, (uint)bytes.Length, out var out_); + FFI.datastore_delete_all_by_eq_bsatn(tableId, bytes, bytes.Length, out var out_); return out_ > 0; } diff --git a/crates/bindings-csharp/Runtime/Internal/Module.cs b/crates/bindings-csharp/Runtime/Internal/Module.cs index 9d62a2e14b1..f36bc54b110 100644 --- a/crates/bindings-csharp/Runtime/Internal/Module.cs +++ b/crates/bindings-csharp/Runtime/Internal/Module.cs @@ -102,12 +102,12 @@ private static byte[] Consume(this BytesSource source) return []; } var buffer = new byte[0x20_000]; - var written = 0U; + var written = 0; while (true) { // Write into the spare capacity of the buffer. - var spare = buffer.AsSpan((int)written); - var buf_len = (uint)spare.Length; + var spare = buffer.AsSpan(written); + var buf_len = spare.Length; var ret = FFI.bytes_source_read(source, spare, ref buf_len); written += buf_len; switch (ret) @@ -135,15 +135,13 @@ private static byte[] Consume(this BytesSource source) } } - private static void Write(this BytesSink sink, byte[] bytes) + private static void Write(this BytesSink sink, Span bytes) { - var start = 0U; - while (start != bytes.Length) + while (!bytes.IsEmpty) { - var written = (uint)bytes.Length; - var buffer = bytes.AsSpan((int)start); - FFI.bytes_sink_write(sink, buffer, ref written); - start += written; + var written = bytes.Length; + FFI.bytes_sink_write(sink, bytes, ref written); + bytes = bytes[written..]; } } @@ -165,7 +163,7 @@ public static void __describe_module__(BytesSink description) } public static Errno __call_reducer__( - uint id, + int id, ulong sender_0, ulong sender_1, ulong sender_2, @@ -180,11 +178,9 @@ BytesSink error try { var senderIdentity = Identity.From( - MemoryMarshal.AsBytes([sender_0, sender_1, sender_2, sender_3]).ToArray() - ); - var senderAddress = Address.From( - MemoryMarshal.AsBytes([address_0, address_1]).ToArray() + MemoryMarshal.AsBytes([sender_0, sender_1, sender_2, sender_3]) ); + var senderAddress = Address.From(MemoryMarshal.AsBytes([address_0, address_1])); var random = new Random((int)timestamp.MicrosecondsSinceEpoch); var time = timestamp.ToStd(); @@ -192,7 +188,7 @@ BytesSink error using var stream = new MemoryStream(args.Consume()); using var reader = new BinaryReader(stream); - reducers[(int)id].Invoke(reader, ctx); + reducers[id].Invoke(reader, ctx); if (stream.Position != stream.Length) { throw new Exception("Unrecognised extra bytes in the reducer arguments"); diff --git a/crates/bindings-csharp/Runtime/Log.cs b/crates/bindings-csharp/Runtime/Log.cs index 757157c0e49..c690085c600 100644 --- a/crates/bindings-csharp/Runtime/Log.cs +++ b/crates/bindings-csharp/Runtime/Log.cs @@ -168,12 +168,12 @@ uint lineNumber FFI.console_log( level, target_bytes, - (uint)target_bytes.Length, + target_bytes.Length, filename_bytes, - (uint)filename_bytes.Length, + filename_bytes.Length, lineNumber, text_bytes, - (uint)text_bytes.Length + text_bytes.Length ); } } diff --git a/crates/bindings-csharp/Runtime/LogStopwatch.cs b/crates/bindings-csharp/Runtime/LogStopwatch.cs index 4804e1e77ad..5ce00519d98 100644 --- a/crates/bindings-csharp/Runtime/LogStopwatch.cs +++ b/crates/bindings-csharp/Runtime/LogStopwatch.cs @@ -11,7 +11,7 @@ public sealed class LogStopwatch : IDisposable public LogStopwatch(string name) { var name_bytes = Encoding.UTF8.GetBytes(name); - StopwatchId = FFI.console_timer_start(name_bytes, (uint)name_bytes.Length); + StopwatchId = FFI.console_timer_start(name_bytes, name_bytes.Length); } void IDisposable.Dispose()