FileLinesFunction.cs 1.0 KB

1234567891011121314151617181920212223242526272829
  1. namespace Lua.Standard.IO;
  2. public sealed class FileLinesFunction : LuaFunction
  3. {
  4. public override string Name => "lines";
  5. public static readonly FileLinesFunction Instance = new();
  6. protected override ValueTask<int> InvokeAsyncCore(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
  7. {
  8. var arg0 = context.ReadArgument<FileHandle>(0);
  9. var arg1 = context.ArgumentCount >= 2
  10. ? context.Arguments[1]
  11. : "*l";
  12. buffer.Span[0] = new Iterator(arg0, arg1);
  13. return new(1);
  14. }
  15. class Iterator(FileHandle file, LuaValue format) : LuaFunction
  16. {
  17. readonly LuaValue[] formats = [format];
  18. protected override ValueTask<int> InvokeAsyncCore(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
  19. {
  20. var resultCount = IOHelper.Read(context.State, file, Name, 0, formats, buffer, true);
  21. return new(resultCount);
  22. }
  23. }
  24. }