ListInsert
Writer that inserts an element to list implements IWriter<(int, Element), List>.
IWriter<(int, long), List<int>> listInsert;
ListInsert.Create(type) creates insert writer for IList<T>.
IWriter<(int, long), List<int>> listInsert = (IWriter<(int, long), List<int>>)ListInsert.Create(typeof(List<int>));
Writer inserts an element to list.
// Create list
List<int> list = new List<int> { 1, 2, 3 };
// Insert element to list
listInsert.WriteAs((100, 1L), list);
Delegate can be adapted to writer.
IWriter<(int, long), List<int>> listInsert =
(IWriter<(int, long), List<int>>)
DelegateWriter.Writer(
((int value, long index) args, List<int> list) => list.Insert((int)args.index, args.value));
ListInsertRequest is request to query a list-insert-writer from service.
IRequest request = new ListInsertRequest(typeof(List<int>));
IWriter<(int, long), List<int>> listInsert =
AccessorServices.Instance
.GetRequired<IRequest, IWriter<(int, long), List<int>>>(request);
A ref must be used when inserting to a value-typed list on stack.
// Create writer
IWriterToRef<(int, long), StructList4<int>> listInsert =
(IWriterToRef<(int, long), StructList4<int>>)
ListInsert.Create(typeof(StructList4<int>));
// Create list
StructList4<int> list = new StructList4<int> { 1, 2, 3 };
// Insert
listInsert.Write((100, 1L), ref list);
// Print
WriteLine(list[1]);
.TypeCast<(Element, long), Object>().Write() be used when inserting to a value-typed list in heap.
// Create writer
IWriterToRef<(int, long), StructList4<int>> listInsert =
(IWriterToRef<(int, long), StructList4<int>>)
ListInsert.Create(typeof(StructList4<int>));
// Create list
StructList4<int> list = new StructList4<int> { 1, 2, 3 };
// Copy to heap
object listBox = list;
// Insert element to the list in heap
listInsert.TypeCast<(int, long), object>().Write((100, 1L), listBox);
// Copy from heap
list = (StructList4<int>)listBox;
// Print
WriteLine(list[1]);
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 listinsert
{
public static void Run()
{
{
#pragma warning disable CS0168
// <00>
IWriter<(int, long), List<int>> listInsert;
// </00>
#pragma warning restore CS0168
}
{
// <01>
IWriter<(int, long), List<int>> listInsert = (IWriter<(int, long), List<int>>)ListInsert.Create(typeof(List<int>));
// </01>
// <02>
// Create list
List<int> list = new List<int> { 1, 2, 3 };
// Insert element to list
listInsert.WriteAs((100, 1L), list);
// </02>
}
{
// <03>
IWriter<(int, long), List<int>> listInsert =
(IWriter<(int, long), List<int>>)
DelegateWriter.Writer(
((int value, long index) args, List<int> list) => list.Insert((int)args.index, args.value));
// </03>
List<int> list = new List<int> { 1, 2, 3 };
listInsert.WriteAs((100, 1L), list);
}
{
// <11>
IRequest request = new ListInsertRequest(typeof(List<int>));
IWriter<(int, long), List<int>> listInsert =
AccessorServices.Instance
.GetRequired<IRequest, IWriter<(int, long), List<int>>>(request);
// </11>
// Create list
List<int> list = new List<int> { 1, 2, 3 };
// Insert element to list
listInsert.WriteAs((100, 1L), list);
}
// Value List on stack
{
// <21>
// Create writer
IWriterToRef<(int, long), StructList4<int>> listInsert =
(IWriterToRef<(int, long), StructList4<int>>)
ListInsert.Create(typeof(StructList4<int>));
// Create list
StructList4<int> list = new StructList4<int> { 1, 2, 3 };
// Insert
listInsert.Write((100, 1L), ref list);
// Print
WriteLine(list[1]);
// </21>
}
// Value List on heap
{
// <31>
// Create writer
IWriterToRef<(int, long), StructList4<int>> listInsert =
(IWriterToRef<(int, long), StructList4<int>>)
ListInsert.Create(typeof(StructList4<int>));
// Create list
StructList4<int> list = new StructList4<int> { 1, 2, 3 };
// Copy to heap
object listBox = list;
// Insert element to the list in heap
listInsert.TypeCast<(int, long), object>().Write((100, 1L), listBox);
// Copy from heap
list = (StructList4<int>)listBox;
// Print
WriteLine(list[1]);
// </31>
}
}
}