Ejemplo n.º 1
0
        public Memory <T> Allocate <T>(ulong count, int align) where T : unmanaged
        {
            Memory <byte> allocatedMemory = Allocate((ulong)Unsafe.SizeOf <T>() * count, align);

            if (allocatedMemory.IsEmpty)
            {
                return(Memory <T> .Empty);
            }

            return(SpanMemoryManager <T> .Cast(allocatedMemory));
        }
Ejemplo n.º 2
0
        public StateUpdater(ReadOnlyMemory <byte> input, Memory <byte> output, uint processHandle, BehaviourContext behaviourContext)
        {
            _input            = input;
            _inputOrigin      = _input;
            _output           = output;
            _outputOrigin     = _output;
            _processHandle    = processHandle;
            _behaviourContext = behaviourContext;

            _inputHeader = SpanIOHelper.Read <UpdateDataHeader>(ref _input);

            _outputHeader = SpanMemoryManager <UpdateDataHeader> .Cast(_output.Slice(0, Unsafe.SizeOf <UpdateDataHeader>()));

            OutputHeader.Initialize(_behaviourContext.UserRevision);
            _output = _output.Slice(Unsafe.SizeOf <UpdateDataHeader>());
        }
Ejemplo n.º 3
0
        public void Initialize(Memory <byte> nodeStatesWorkBuffer, int nodeCount)
        {
            int workBufferSize = GetWorkBufferSize(nodeCount);

            Debug.Assert(nodeStatesWorkBuffer.Length >= workBufferSize);

            _nodeCount = nodeCount;

            int edgeMatrixWorkBufferSize = EdgeMatrix.GetWorkBufferSize(nodeCount);

            _discovered.Initialize(nodeStatesWorkBuffer.Slice(0, edgeMatrixWorkBufferSize), nodeCount);
            _finished.Initialize(nodeStatesWorkBuffer.Slice(edgeMatrixWorkBufferSize, edgeMatrixWorkBufferSize), nodeCount);

            nodeStatesWorkBuffer = nodeStatesWorkBuffer.Slice(edgeMatrixWorkBufferSize * 2);

            _resultArray = SpanMemoryManager <int> .Cast(nodeStatesWorkBuffer.Slice(0, sizeof(int) * nodeCount));

            nodeStatesWorkBuffer = nodeStatesWorkBuffer.Slice(sizeof(int) * nodeCount);

            Memory <int> stackWorkBuffer = SpanMemoryManager <int> .Cast(nodeStatesWorkBuffer.Slice(0, Stack.CalcBufferSize(nodeCount *nodeCount)));

            _stack.Reset(stackWorkBuffer, nodeCount * nodeCount);
        }