Change the IDrawCommand interface.
This commit is contained in:
parent
1a1e761326
commit
9ab2edffee
@ -29,6 +29,8 @@ namespace Dashboard.Drawing
|
|||||||
/// <param name="param">The parameter array.</param>
|
/// <param name="param">The parameter array.</param>
|
||||||
/// <returns>The parameters object.</returns>
|
/// <returns>The parameters object.</returns>
|
||||||
object? GetParams(DrawQueue queue, ReadOnlySpan<byte> param);
|
object? GetParams(DrawQueue queue, ReadOnlySpan<byte> param);
|
||||||
|
|
||||||
|
int WriteParams(DrawQueue queue, object? obj, Span<byte> param);
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IDrawCommand<T> : IDrawCommand
|
public interface IDrawCommand<T> : IDrawCommand
|
||||||
@ -39,6 +41,8 @@ namespace Dashboard.Drawing
|
|||||||
/// <param name="param">The parameter array.</param>
|
/// <param name="param">The parameter array.</param>
|
||||||
/// <returns>The parameters object.</returns>
|
/// <returns>The parameters object.</returns>
|
||||||
new T? GetParams(DrawQueue queue, ReadOnlySpan<byte> param);
|
new T? GetParams(DrawQueue queue, ReadOnlySpan<byte> param);
|
||||||
|
|
||||||
|
new int WriteParams(DrawQueue queue, T? obj, Span<byte> param);
|
||||||
}
|
}
|
||||||
|
|
||||||
public sealed class DrawCommand : IDrawCommand
|
public sealed class DrawCommand : IDrawCommand
|
||||||
@ -57,6 +61,11 @@ namespace Dashboard.Drawing
|
|||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int WriteParams(DrawQueue queue, object? obj, Span<byte> param)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public sealed class DrawCommand<T> : IDrawCommand<T>
|
public sealed class DrawCommand<T> : IDrawCommand<T>
|
||||||
@ -80,6 +89,16 @@ namespace Dashboard.Drawing
|
|||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int WriteParams(DrawQueue queue, T? obj, Span<byte> param)
|
||||||
|
{
|
||||||
|
return obj!.Serialize(queue, param);
|
||||||
|
}
|
||||||
|
|
||||||
|
int IDrawCommand.WriteParams(DrawQueue queue, object? obj, Span<byte> param)
|
||||||
|
{
|
||||||
|
return WriteParams(queue, (T?)obj, param);
|
||||||
|
}
|
||||||
|
|
||||||
object? IDrawCommand.GetParams(DrawQueue queue, ReadOnlySpan<byte> param)
|
object? IDrawCommand.GetParams(DrawQueue queue, ReadOnlySpan<byte> param)
|
||||||
{
|
{
|
||||||
return GetParams(queue, param);
|
return GetParams(queue, param);
|
||||||
|
@ -186,6 +186,15 @@ namespace Dashboard.Drawing
|
|||||||
param.Serialize(Queue, bytes);
|
param.Serialize(Queue, bytes);
|
||||||
Write(command, bytes);
|
Write(command, bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Write<T1, T2>(T2 command, T1 param) where T2 : IDrawCommand<T1>
|
||||||
|
{
|
||||||
|
int length = command.WriteParams(Queue, param, Span<byte>.Empty);
|
||||||
|
Span<byte> bytes = stackalloc byte[length];
|
||||||
|
|
||||||
|
command.WriteParams(Queue, param, bytes);
|
||||||
|
Write(command, bytes);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class HashList<T> : IReadOnlyList<T>
|
private class HashList<T> : IReadOnlyList<T>
|
||||||
@ -249,5 +258,12 @@ namespace Dashboard.Drawing
|
|||||||
/// <param name="command">The command to write.</param>
|
/// <param name="command">The command to write.</param>
|
||||||
/// <param name="param">Any data associated with the command.</param>
|
/// <param name="param">Any data associated with the command.</param>
|
||||||
void Write<T>(IDrawCommand command, T param) where T : IParameterSerializer<T>;
|
void Write<T>(IDrawCommand command, T param) where T : IParameterSerializer<T>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Write into the command stream.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="command">The command to write.</param>
|
||||||
|
/// <param name="param">Any data associated with the command.</param>
|
||||||
|
void Write<T1, T2>(T2 command, T1 param) where T2 : IDrawCommand<T1>;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user