Преглед изворни кода

feat: implement enum LuaFileBufferingMode for SetVBuf method

Akeit0 пре 7 месеци
родитељ
комит
f499aef923
3 измењених фајлова са 30 додато и 4 уклоњено
  1. 3 3
      src/Lua/IO/ILuaFileSystem.cs
  2. 19 0
      src/Lua/IO/LuaFileBufferingMode.cs
  3. 8 1
      src/Lua/Standard/FileHandle.cs

+ 3 - 3
src/Lua/IO/ILuaFileSystem.cs

@@ -20,7 +20,7 @@ public interface ILuaIOStream : IDisposable
     public ValueTask<string?> ReadStringAsync(int count, CancellationToken cancellationToken);
     public ValueTask WriteAsync(ReadOnlyMemory<char> buffer, CancellationToken cancellationToken);
     public ValueTask FlushAsync(CancellationToken cancellationToken);
-    public void SetVBuf(string mode, int size);
+    public void SetVBuf(LuaFileBufferingMode mode, int size);
     public long Seek(long offset, SeekOrigin origin);
 }
 
@@ -149,11 +149,11 @@ public sealed class LuaIOStreamWrapper(Stream innerStream) : ILuaIOStream
         return new();
     }
 
-    public void SetVBuf(string mode, int size)
+    public void SetVBuf(LuaFileBufferingMode mode, int size)
     {
         writer ??= new(innerStream);
         // Ignore size parameter
-        writer.AutoFlush = mode is "no" or "line";
+        writer.AutoFlush = mode is LuaFileBufferingMode.NoBuffering or LuaFileBufferingMode.LineBuffering;
     }
 
     public long Seek(long offset, SeekOrigin origin) => innerStream.Seek(offset, origin);

+ 19 - 0
src/Lua/IO/LuaFileBufferingMode.cs

@@ -0,0 +1,19 @@
+namespace Lua.IO;
+
+public enum LuaFileBufferingMode
+{
+    /// <summary>
+    /// No buffering. `no` in Lua
+    /// </summary>
+    NoBuffering,
+
+    /// <summary>
+    /// Full buffering `full` in Lua
+    /// </summary>
+    FullBuffering,
+
+    /// <summary>
+    /// Line buffering `line` in Lua
+    /// </summary>
+    LineBuffering,
+}

+ 8 - 1
src/Lua/Standard/FileHandle.cs

@@ -91,7 +91,14 @@ public class FileHandle : ILuaUserData
 
     public void SetVBuf(string mode, int size)
     {
-        stream.SetVBuf(mode, size);
+        var bufferingMode = mode switch
+        {
+            "no" => LuaFileBufferingMode.NoBuffering,
+            "full" => LuaFileBufferingMode.FullBuffering,
+            "line" => LuaFileBufferingMode.LineBuffering,
+            _ => throw new ArgumentException($"Invalid option '{mode}'")
+        };
+        stream.SetVBuf(bufferingMode, size);
     }
 
     public void Close()