ListCount
List counter implements IWriterToRef<List, long>.
IWriterToRef<List<int>, long> listCount;
Creating a writer
ListCount<List, Element> is the default implementation IList<T>.
IWriterToRef<List<int>, long> listCount = new ListCount<List<int>, int>();
ListCount.Create(listType, elementType) also creates the writer.
IWriterToRef<List<int>, long> listCount =
(IWriterToRef<List<int>, long>)
ListCount.Create(typeof(List<int>), typeof(int));
List count be adapted from delegate.
IWriterToRef<List<int>, long> listCount =
DelegateWriter.Reader<List<int>, long>(list => list.Count);
ListCountRequest(Type) is a request to build a list count writer.
ListCountRequest listRequest = new ListCountRequest(typeof(List<int>));
IWriterToRef<List<int>, long> listCount =
AccessorServices.Instance
.GetRequired<ListCountRequest, IWriterToRef<List<int>, long>>(listRequest);
Usage
Writer counts number of elements.
List<int> list = new List<int> { 1, 2, 3 };
long count = listCount.Read(list);
A ref must be used when accessing a value-typed list on stack.
// Create writer
IWriterFromRefToRef<StructList4<int>, long> listCount =
(IWriterFromRefToRef<StructList4<int>, long>)
ListCount.Create(typeof(StructList4<int>));
// Create list
StructList4<int> list = new StructList4<int> { 1, 2, 3 };
// Get count
long count = listCount.Read(ref list);
.TypeCast<Object, long>().Write() be used when accessing a value-typed list in heap.
// Create writer
IWriterFromRefToRef<StructList4<int>, long> listCount =
(IWriterFromRefToRef<StructList4<int>, long>)
ListCount.Create(typeof(StructList4<int>));
// Create list
StructList4<int> list = new StructList4<int> { 1, 2, 3 };
// Copy to heap
object box = list;
// Get count from value-typed list in heap
long count = listCount.TypeCast<object, long>().Read(box);
Full Example
Full example
using System.Collections.Generic;
using Avalanche.Accessor;
using Avalanche.Accessor.List;
using Avalanche.Utilities;
using Avalanche.Writer;
public class listcount
{
public static void Run()
{
{
#pragma warning disable CS0168
// <01>
IWriterToRef<List<int>, long> listCount;
// </01>
#pragma warning restore CS0168
}
{
// <10>
IWriterToRef<List<int>, long> listCount = new ListCount<List<int>, int>();
// </10>
List<int> list = new List<int> { 1, 2, 3 };
long count = listCount.Read(list);
}
{
// <11>
IWriterToRef<List<int>, long> listCount =
(IWriterToRef<List<int>, long>)
ListCount.Create(typeof(List<int>), typeof(int));
// </11>
List<int> list = new List<int> { 1, 2, 3 };
long count = listCount.Read(list);
}
{
// <12>
IWriterToRef<List<int>, long> listCount =
DelegateWriter.Reader<List<int>, long>(list => list.Count);
// </12>
List<int> list = new List<int> { 1, 2, 3 };
long count = listCount.Read(list);
}
{
// <16>
ListCountRequest listRequest = new ListCountRequest(typeof(List<int>));
IWriterToRef<List<int>, long> listCount =
AccessorServices.Instance
.GetRequired<ListCountRequest, IWriterToRef<List<int>, long>>(listRequest);
// </16>
List<int> list = new List<int> { 1, 2, 3 };
long count = listCount.Read(list);
}
{
IWriterToRef<List<int>, long> listCount = new ListCount<List<int>, int>();
// <21>
List<int> list = new List<int> { 1, 2, 3 };
long count = listCount.Read(list);
// </21>
}
// Value List on stack
{
// <30>
// Create writer
IWriterFromRefToRef<StructList4<int>, long> listCount =
(IWriterFromRefToRef<StructList4<int>, long>)
ListCount.Create(typeof(StructList4<int>));
// Create list
StructList4<int> list = new StructList4<int> { 1, 2, 3 };
// Get count
long count = listCount.Read(ref list);
// </30>
}
// Value List on heap
{
// <31>
// Create writer
IWriterFromRefToRef<StructList4<int>, long> listCount =
(IWriterFromRefToRef<StructList4<int>, long>)
ListCount.Create(typeof(StructList4<int>));
// Create list
StructList4<int> list = new StructList4<int> { 1, 2, 3 };
// Copy to heap
object box = list;
// Get count from value-typed list in heap
long count = listCount.TypeCast<object, long>().Read(box);
// </31>
}
}
}