public FlatArray(AbsPointer pointer) : this() { _pointer = pointer; _pointer.Dereference(); // TODO: assert pointer type // TODO: verify correct size }
public FlatArray(Message msg, int count, out AllocationContext allocContext) : this() { var elementSize = this.GetElementSize(); // TODO: handle composite if (elementSize == ElementSize.Composite) { int words = 1 + count * (ReflectionCache <T> .KnownDataWords + ReflectionCache <T> .KnownPointerWords); msg.Allocate( words, out var offset, out var segment); segment[offset | Word.unit] = new StructPointer { Type = PointerType.Struct, WordOffset = count, DataWords = ReflectionCache <T> .KnownDataWords, PointerWords = ReflectionCache <T> .KnownPointerWords, }.RawValue; allocContext = new AllocationContext(segment, offset + 1, words - 1); _pointer = new AbsPointer( segment, 0, new ListPointer { Type = PointerType.List, WordOffset = offset, ElementSize = elementSize, ElementCount = (uint)words - 1 }); } else { int words = TypeHelpers.SizeOf(elementSize) * count / 8; msg.Allocate( words, out var offset, out var segment); allocContext = new AllocationContext(segment, offset, words); _pointer = new AbsPointer( segment, 0, new ListPointer { Type = PointerType.List, WordOffset = offset, ElementSize = elementSize, ElementCount = (uint)count }); } }
public BoolList(Message msg, int count) { int words = (count + 63) / 64; msg.Allocate(words, out var offset, out var segment); _pointer = new AbsPointer( segment, 0, new ListPointer { Type = PointerType.List, WordOffset = offset, ElementSize = ElementSize.OneBit, ElementCount = (uint)count }); }
public Data(AbsPointer pointer) { _bytes = new FlatArray <byte>(pointer); }