Пример #1
0
        public void Split(int aSegmentCount)
        {
            int chunkSize     = (int)iData.Length / aSegmentCount;
            int blockPosStart = 0;
            int length        = 0;

            //
            for (int i = 0; i < aSegmentCount; i++)
            {
                int pos         = 0;
                int blockPosEnd = Math.Min(iData.Length - 1, blockPosStart + chunkSize);
                while (pos >= 0)
                {
                    pos = Array.IndexOf(iData, KPattern[0], blockPosEnd);
                    if (pos > 0)
                    {
                        if (pos + 8 >= iData.Length)
                        {
                            break;
                        }
                        else if (pos + 8 < iData.Length && iData[pos + 7] == KPattern[7])
                        {
                            bool isMatch = CompareByteArrays(KPattern, iData, pos);
                            if (isMatch)
                            {
                                length = pos - blockPosStart;
                                //System.Diagnostics.Debug.WriteLine( string.Format( "Block {0:d2} @ 0x{1:x8}, length: {2:d8}", i, blockPosStart, length ) );
                                //
                                iSegments.Add(new SymbolFileSegment(this, blockPosStart, length));
                                blockPosStart = pos;
                                break;
                            }
                            else
                            {
                                // Didn't find a match, move forwards
                                blockPosEnd = pos + 1;
                            }
                        }
                        else
                        {
                            // Didn't find a match, move forwards
                            blockPosEnd = pos + 1;
                        }
                    }
                    else
                    {
                        // Searched to end of file and didn't find another block, so just create
                        // a new reader for everything that remains.
                        length = iData.Length - blockPosStart;
                        //System.Diagnostics.Debug.WriteLine( string.Format( "Block {0:d2} @ 0x{1:x8}, length: {2:d8}", i, blockPosStart, length ) );
                        iSegments.Add(new SymbolFileSegment(this, blockPosStart, length));
                        //
                        break;
                    }
                }
            }

            iCollectionIdentifier = new MultiThreadedProcessor <SymbolFileSegment>(this);
        }
Пример #2
0
        private void ProblemDetectorManager_EventHandler(MultiThreadedProcessor <CIProblemDetector> .TEvent aEvent)
        {
            this.Trace("[CIEngine] ProblemDetectorManager_EventHandler() - START - aEvent: {0}", aEvent);
            //
            if (aEvent == MultiThreadedProcessor <CIProblemDetector> .TEvent.EEventStarting)
            {
            }
            else if (aEvent == MultiThreadedProcessor <CIProblemDetector> .TEvent.EEventCompleted)
            {
                iProblemDetectorManager.EventHandler -= new MultiThreadedProcessor <CIProblemDetector> .ProcessorEventHandler(ProblemDetectorManager_EventHandler);

                // Run any serialized operations
                iOperationManager.StateHandler += new CIEngineOperationManager.QueueStateHandler(OperationManager_StateHandler);
                iOperationManager.Start();
            }
            //
            this.Trace("[CIEngine] ProblemDetectorManager_EventHandler() - END - aEvent: {0}", aEvent);
        }
Пример #3
0
        protected override void OnEvent(MultiThreadedProcessor <SymbolFileSegment> .TEvent aEvent)
        {
            base.OnEvent(aEvent);
            //
            switch (aEvent)
            {
            case MultiThreadedProcessor <SymbolFileSegment> .TEvent.EEventStarting:
                iSource.ReportEvent(SymSource.TEvent.EReadingStarted);
                break;

            case MultiThreadedProcessor <SymbolFileSegment> .TEvent.EEventCompleted:
                iSource.ReportEvent(SymSource.TEvent.EReadingComplete);
                this.Dispose();
                System.Diagnostics.Debug.WriteLine(string.Format("[Symbol Memory] END   -> {0:d12}, source: {1}", System.GC.GetTotalMemory(true), iSource.FileName));
                break;

            default:
                break;
            }
        }
Пример #4
0
        private void CollectionIdentifier_EventHandler(MultiThreadedProcessor <SymbolFileSegment> .TEvent aEvent)
        {
            switch (aEvent)
            {
            default:
                break;

            case MultiThreadedProcessor <SymbolFileSegment> .TEvent.EEventStarting:
                break;

            case MultiThreadedProcessor <SymbolFileSegment> .TEvent.EEventCompleted:
                iCollectionIdentifier.ProcessItem -= new MultiThreadedProcessor <SymbolFileSegment> .ItemProcessor(CollectionIdentifier_ProcessItem);

                iCollectionIdentifier.EventHandler -= new MultiThreadedProcessor <SymbolFileSegment> .ProcessorEventHandler(CollectionIdentifier_EventHandler);

                iCollectionIdentifier.Dispose();
                iCollectionIdentifier = null;
                DataPrepared(this);
                break;
            }
        }