public Memory <T> ReadMemoryBlock <T>( int uoffset, int sizePerItem) where T : struct { checked { // The local value stores a uoffset_t, so follow that now. uoffset = uoffset + this.ReadUOffset(uoffset); Memory <byte> innerMemory = this.ReadByteMemoryBlockProtected( uoffset + sizeof(uint), ((int)this.ReadUInt(uoffset)) * sizePerItem); MemoryTypeChanger <T> typeChanger = new MemoryTypeChanger <T>(innerMemory); return(typeChanger.Memory); } }
private Memory <T> ReadMemoryBlockImpl <T>( int uoffset, int sizePerItem, Func <int, int, ReadOnlyMemory <byte> > callback) where T : struct { checked { // The local value stores a uoffset_t, so follow that now. uoffset = uoffset + this.ReadUOffset(uoffset); ReadOnlyMemory <byte> innerMemory = callback( uoffset + sizeof(uint), ((int)this.ReadUInt(uoffset)) * sizePerItem); MemoryTypeChanger <T> typeChanger = new MemoryTypeChanger <T>(MemoryMarshal.AsMemory(innerMemory)); return(typeChanger.Memory); } }