示例#1
0
        private void OnSlabDeallocated(MemoryPoolSlab slab)
        {
            IntPtr bufferId;

            if (_bufferIdMappings.TryRemove(slab.ArrayPtr, out bufferId))
            {
                _rio.DeregisterBuffer(bufferId);
            }
            else
            {
                Debug.Assert(false, "Unknown buffer id!");
            }
        }
示例#2
0
        private void OnSlabAllocated(MemoryPoolSlab slab)
        {
            lock (_bufferIdMappings)
            {
                var memoryPtr   = slab.NativePointer;
                var bufferId    = _rio.RioRegisterBuffer(memoryPtr, (uint)slab.Length);
                var addressLong = memoryPtr.ToInt64();

                _bufferIdMappings.Add(new BufferMapping
                {
                    Id    = bufferId,
                    Start = addressLong,
                    End   = addressLong + slab.Length
                });
            }
        }
示例#3
0
        private void OnSlabDeallocated(MemoryPoolSlab slab)
        {
            var memoryPtr   = slab.NativePointer;
            var addressLong = memoryPtr.ToInt64();

            lock (_bufferIdMappings)
            {
                for (int i = _bufferIdMappings.Count - 1; i >= 0; i--)
                {
                    if (addressLong == _bufferIdMappings[i].Start)
                    {
                        _bufferIdMappings.RemoveAt(i);
                        break;
                    }
                }
            }
        }
示例#4
0
        public static RootNode GetSyntaxTree(string path, SourceText text)
        {
            var chars = new char[text.Length];

            text.CopyTo(0, chars, 0, text.Length);
            var      resolvedEncoding = text.Encoding ?? Encoding.UTF8;
            var      inputFile        = resolvedEncoding.GetBytes(chars);
            var      nodes            = new List <Node>();
            var      lines            = text.Lines;
            RootNode ast = null;

            using (var inputSlab = new MemoryPoolSlab(inputFile))
                using (var outputSlab = new MemoryPoolSlab(new byte[1000000]))
                {
                    var parseStatus = generate(inputSlab.NativePointer, inputFile.Length, outputSlab.NativePointer, out var descriptorSize);
                    var byteArray   = new byte[descriptorSize];
                    Marshal.Copy(outputSlab.NativePointer, byteArray, 0, (int)descriptorSize);
                    var file = FileDescriptorProto.ParseFrom(byteArray);

                    foreach (var location in file.SourceCodeInfo.LocationList)
                    {
                        nodes.Add(Node.CreateNode(location, text));
                    }

                    foreach (var node in nodes.OrderByDescending(i => i.Content.Length))
                    {
                        if (ast == null)
                        {
                            ast = node as RootNode;
                        }
                        else
                        {
                            var targetNode = ast.GetNodeAt(node.StartLine, node.StartCol);
                            targetNode.Children.Add(node);
                            node.Parent = targetNode;
                        }
                    }
                }
            return(ast);
        }
示例#5
0
        private void OnSlabDeallocated(MemoryPoolSlab slab)
        {
            var memoryPtr = slab.NativePointer;
            var addressLong = memoryPtr.ToInt64();

            lock (_bufferIdMappings)
            {
                for (int i = _bufferIdMappings.Count - 1; i >= 0; i--)
                {
                    if (addressLong == _bufferIdMappings[i].Start)
                    {
                        _bufferIdMappings.RemoveAt(i);
                        break;
                    }
                }
            }
        }
示例#6
0
        private void OnSlabAllocated(MemoryPoolSlab slab)
        {
            lock (_bufferIdMappings)
            {
                var memoryPtr = slab.NativePointer;
                var bufferId = _rio.RioRegisterBuffer(memoryPtr, (uint)slab.Length);
                var addressLong = memoryPtr.ToInt64();

                _bufferIdMappings.Add(new BufferMapping
                {
                    Id = bufferId,
                    Start = addressLong,
                    End = addressLong + slab.Length
                });
            }
        }
示例#7
0
        private void OnSlabAllocated(MemoryPoolSlab slab)
        {
            var bufferId = _rio.RioRegisterBuffer(slab.ArrayPtr, (uint)slab.Array.Length);

            _bufferIdMappings[slab.ArrayPtr] = bufferId;
        }