示例#1
0
 public FlatArray(AbsPointer pointer)
     : this()
 {
     _pointer = pointer;
     _pointer.Dereference();
     // TODO: assert pointer type
     // TODO: verify correct size
 }
示例#2
0
        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
                });
            }
        }
示例#3
0
        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
            });
        }
示例#4
0
文件: Data.cs 项目: aemmett/capnpnet
 public Data(AbsPointer pointer)
 {
     _bytes = new FlatArray <byte>(pointer);
 }