ListRemoveAt
Writer that removes element at index implements IWriter<Element, List>.
IWriterBase<long, List<int>> listRemoveAt;
ListRemoveAt.Create(type) creates implementation for list that implement IList<T>.
IWriterBase<long, List<int>> listRemoveAt =
(IWriterBase<long, List<int>>)
ListRemoveAt.Create(typeof(List<int>), typeof(int));
Writer removes an element at index.
// Create list
List<int> list = new List<int> { 1, 2, 3 };
// Remove at index
listRemoveAt.Write(0L, list);
Delegate can be adapted to writer.
IWriter<long, List<int>> listRemoveAt =
DelegateWriter.Writer((long value, List<int> list) => list.RemoveAt((int)value));
ListRemoveAtRequest is request to create writer.
IRequestFor<IWriterBase> request = new ListRemoveAtRequest(typeof(List<int>));
IWriter<long, List<int>> listRemoveAt = AccessorServices.Instance.GetRequired<IRequest, IWriter<long, List<int>>>(request);
A ref must be used when accessing a value-typed list on stack.
// Create writer
IWriterToRef<long, StructList4<int>> listRemoveAt =
(IWriterToRef<long, StructList4<int>>)
ListRemoveAt.Create(typeof(StructList4<int>), typeof(int));
// Create list
StructList4<int> list = new StructList4<int> { 1, 2, 3 };
// Remove at
listRemoveAt.Write(0L, ref list);
// Print "2"
WriteLine(list[0]);
.TypeCast<long, Object>().Write() be used when accessing a value-typed list in heap.
// Create writer
IWriterToRef<long, StructList4<int>> listRemoveAt =
(IWriterToRef<long, StructList4<int>>)
ListRemoveAt.Create(typeof(StructList4<int>), typeof(int));
// Create list
StructList4<int> list = new StructList4<int> { 1, 2, 3 };
// Copy to heap
object listBox = list;
// RemoveAt element to the list in heap
listRemoveAt.TypeCast<long, object>().Write(0L, listBox);
// Copy from heap
list = (StructList4<int>)listBox;
// Print "2"
WriteLine(list[0]);
Full Example
Full example
using System.Collections.Generic;
using Avalanche.Accessor;
using Avalanche.Accessor.List;
using Avalanche.Service;
using Avalanche.Utilities;
using Avalanche.Writer;
using static System.Console;
class listremoveat
{
public static void Run()
{
{
#pragma warning disable CS0168
// <00>
IWriterBase<long, List<int>> listRemoveAt;
// </00>
#pragma warning restore CS0168
}
{
// <01>
IWriterBase<long, List<int>> listRemoveAt =
(IWriterBase<long, List<int>>)
ListRemoveAt.Create(typeof(List<int>), typeof(int));
// </01>
// <02>
// Create list
List<int> list = new List<int> { 1, 2, 3 };
// Remove at index
listRemoveAt.Write(0L, list);
// </02>
}
{
// <03>
IWriter<long, List<int>> listRemoveAt =
DelegateWriter.Writer((long value, List<int> list) => list.RemoveAt((int)value));
// </03>
List<int> list = new List<int> { 1, 2, 3 };
listRemoveAt.Write(0L, list);
}
{
// <11>
IRequestFor<IWriterBase> request = new ListRemoveAtRequest(typeof(List<int>));
IWriter<long, List<int>> listRemoveAt = AccessorServices.Instance.GetRequired<IRequest, IWriter<long, List<int>>>(request);
// </11>
// Create list
List<int> list = new List<int> { 1, 2, 3 };
// RemoveAt element to list
listRemoveAt.Write(0L, list);
}
// Value List on stack
{
// <21>
// Create writer
IWriterToRef<long, StructList4<int>> listRemoveAt =
(IWriterToRef<long, StructList4<int>>)
ListRemoveAt.Create(typeof(StructList4<int>), typeof(int));
// Create list
StructList4<int> list = new StructList4<int> { 1, 2, 3 };
// Remove at
listRemoveAt.Write(0L, ref list);
// Print "2"
WriteLine(list[0]);
// </21>
}
// Value List on heap
{
// <31>
// Create writer
IWriterToRef<long, StructList4<int>> listRemoveAt =
(IWriterToRef<long, StructList4<int>>)
ListRemoveAt.Create(typeof(StructList4<int>), typeof(int));
// Create list
StructList4<int> list = new StructList4<int> { 1, 2, 3 };
// Copy to heap
object listBox = list;
// RemoveAt element to the list in heap
listRemoveAt.TypeCast<long, object>().Write(0L, listBox);
// Copy from heap
list = (StructList4<int>)listBox;
// Print "2"
WriteLine(list[0]);
// </31>
}
}
}