ListAdd
Writer that adds elements to list implements interface IWriter<Element, List>.
IWriterBase<int, List<int>> listAdd;
ListAdd.Create(type) creates implementation for list that implement IList<T>.
IWriter<int, List<int>> listAdd = (IWriter<int, List<int>>)ListAdd.Create(typeof(List<int>));
Writer adds an element to list.
// Create list
List<int> list = new List<int> { 1, 2, 3 };
// Add element to list
listAdd.WriteAs(100, list);
Delegate can be adapted to writer.
IWriter<int, List<int>> listAdd = DelegateWriter.Writer((int value, List<int> list) => list.Add(value));
ListAddRequest is request to query a list-add-writer from service.
IRequestFor<IWriterBase> request = new ListAddRequest(typeof(List<int>));
IWriter<int, List<int>> listAdd = AccessorServices.Instance.GetRequired<IRequest, IWriter<int, List<int>>>(request);
A ref must be used when accessing a value-typed list on stack.
// Create writer
IWriterBase<int, StructList4<int>> listAdd = (IWriterBase<int, StructList4<int>>)ListAdd.Create(typeof(StructList4<int>));
// Create list
StructList4<int> list = new StructList4<int> { 1, 2, 3 };
// Add
listAdd.Write(100, ref list);
// Print "100"
WriteLine(list[3]);
.TypeCast<Element, Object>().Write() be used when accessing a value-typed list in heap.
// Create writer
IWriterBase listAdd = ListAdd.Create(typeof(StructList4<int>));
// Create list
StructList4<int> list = new StructList4<int> { 1, 2, 3 };
// Copy to heap
object listBox = list;
// Add element to the list in heap
listAdd.TypeCast<int, object>().Write(100, listBox);
// Copy from heap
list = (StructList4<int>)listBox;
// Print "100"
WriteLine(list[3]);
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 listadd
{
public static void Run()
{
{
#pragma warning disable CS0168
// <00>
IWriterBase<int, List<int>> listAdd;
// </00>
#pragma warning restore CS0168
}
{
// <01>
IWriter<int, List<int>> listAdd = (IWriter<int, List<int>>)ListAdd.Create(typeof(List<int>));
// </01>
// <02>
// Create list
List<int> list = new List<int> { 1, 2, 3 };
// Add element to list
listAdd.WriteAs(100, list);
// </02>
}
{
// <03>
IWriter<int, List<int>> listAdd = DelegateWriter.Writer((int value, List<int> list) => list.Add(value));
// </03>
List<int> list = new List<int> { 1, 2, 3 };
listAdd.Write(4, list);
}
{
// <11>
IRequestFor<IWriterBase> request = new ListAddRequest(typeof(List<int>));
IWriter<int, List<int>> listAdd = AccessorServices.Instance.GetRequired<IRequest, IWriter<int, List<int>>>(request);
// </11>
// Create list
List<int> list = new List<int> { 1, 2, 3 };
// Add element to list
listAdd.Write(100, list);
}
// Value List on stack
{
// <21>
// Create writer
IWriterBase<int, StructList4<int>> listAdd = (IWriterBase<int, StructList4<int>>)ListAdd.Create(typeof(StructList4<int>));
// Create list
StructList4<int> list = new StructList4<int> { 1, 2, 3 };
// Add
listAdd.Write(100, ref list);
// Print "100"
WriteLine(list[3]);
// </21>
}
// Value List on heap
{
// <31>
// Create writer
IWriterBase listAdd = ListAdd.Create(typeof(StructList4<int>));
// Create list
StructList4<int> list = new StructList4<int> { 1, 2, 3 };
// Copy to heap
object listBox = list;
// Add element to the list in heap
listAdd.TypeCast<int, object>().Write(100, listBox);
// Copy from heap
list = (StructList4<int>)listBox;
// Print "100"
WriteLine(list[3]);
// </31>
}
}
}