public ChunkReaderQueue(IChunkReader chunkReader, IWorkDoer workDoer, int queueLength)
 {
     _WorkDoer               = workDoer;
     _QueueLength            = queueLength;
     ChunkReader             = chunkReader;
     _WaitForAddEvent        = new ManualResetEventSlim(false);
     _WaitForRemoveEvent     = new ManualResetEventSlim(true);
     _ChunkInProgressIndices = new int[workDoer.ThreadCount];
 }
        public void reads_multiple_tags_in_same_chunk()
        {
            const string testData = "<streamWindow id=\"death\" title=\"Deaths\" location=\"left\" resident=\"true\" nameFilterOption=\"true\" timestamp=\"on\"/>\n<streamWindow id=\"assess\" title=\"Assess\" location=\"right\" resident=\"true\"/>\n<streamWindow id='conversation' title='Conversation' location='center' resident='true' ifClosed='' timestamp='on'/>\n<streamWindow id='whispers' title='Whispers' location='center' resident='true' timestamp='on' ifClosed='conversation'/>\n<streamWindow id='talk' title='Talk' location='center' resident='true' timestamp='on' ifClosed='conversation'/>\n<streamWindow id='experience' title='Field Experience' location='center' target='drop' ifClosed='' resident='true'/><clearStream id='experience'/><pushStream id='experience'/><output class='mono'/>\n<compDef id='exp Shield Usage'></compDef>\n<compDef id='exp Light Armor'></compDef>\n<compDef id='exp Chain Armor'></compDef>\n<compDef id='exp Brigandine'></compDef>\n<compDef id='exp Plate Armor'></compDef>\n<compDef id='exp Defending'></compDef>\n<compDef id='exp Parry Ability'></compDef>\n";

            theReader = new SelfClosingChunkReader<Tag>("<streamWindow");

            var result = theReader.Read(Chunk.For(testData));

            Assert.AreEqual(6, result.Tags.Count());
        }
示例#3
0
        public BoltReader(IChunkReader chunkReader, int defaultBufferSize, int maxBufferSize, ILogger logger, bool supportBytes)
        {
            Throw.ArgumentNullException.IfNull(chunkReader, nameof(chunkReader));

            _logger            = logger;
            _chunkReader       = chunkReader;
            _defaultBufferSize = defaultBufferSize;
            _maxBufferSize     = maxBufferSize;
            _bufferStream      = new MemoryStream(_defaultBufferSize);
            _packStreamReader  = supportBytes ? new PackStreamReader(_bufferStream, StructHandlers) : new PackStreamReaderBytesIncompatible(_bufferStream, StructHandlers);
        }
示例#4
0
        public MessageReader(IChunkReader chunkReader, int defaultBufferSize, int maxBufferSize, ILogger logger, IMessageFormat messageFormat)
        {
            Throw.ArgumentNullException.IfNull(chunkReader, nameof(chunkReader));
            Throw.ArgumentNullException.IfNull(messageFormat, nameof(messageFormat));

            _logger            = logger;
            _chunkReader       = chunkReader;
            _defaultBufferSize = defaultBufferSize;
            _maxBufferSize     = maxBufferSize;
            _bufferStream      = new MemoryStream(_defaultBufferSize);
            _packStreamReader  = messageFormat.CreateReader(_bufferStream);
        }
示例#5
0
        public BoltReader(IChunkReader chunkReader, int defaultBufferSize, int maxBufferSize, ILogger logger, IPackStreamFactory packStreamFactory)
        {
            Throw.ArgumentNullException.IfNull(chunkReader, nameof(chunkReader));
            Throw.ArgumentNullException.IfNull(packStreamFactory, nameof(packStreamFactory));

            _logger            = logger;
            _chunkReader       = chunkReader;
            _defaultBufferSize = defaultBufferSize;
            _maxBufferSize     = maxBufferSize;
            _bufferStream      = new MemoryStream(_defaultBufferSize);
            _packStreamReader  = packStreamFactory.CreateReader(_bufferStream);
        }
        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    StopWork();

                    _WorkDoer.Stop();
                    _WorkDoer.WaitToEnd();

                    ChunkReader?.Dispose();
                    ChunkReader = null;
                }

                disposedValue = true;
            }
        }
示例#7
0
文件: RenderChunk.cs 项目: shsa/unity
        public RenderChunk(IWorldReader world, IChunkReader chunk)
        {
            calculating           = false;
            viewManager           = new ChunkViewEventManager();
            coroutineManager      = new ChunkCoroutineEventManager();
            calcVisibiltyProvider = new ChunkEventProvider <RenderCalcVisibilityEvent>(viewManager);
            calcVerticesProvider  = new ChunkEventProvider <RenderCalcVerticesEvent>(viewManager);
            calcMeshProvider      = new ChunkEventProvider <RenderCalcMeshEvent>(coroutineManager);

            this.world        = world;
            this.chunk        = chunk;
            visibilityVersion = 0;
            meshVersion       = 0;
            bounds            = chunk.position.bounds;
            empty             = 4096;
            data          = new bool[empty]; // 16 * 16 * 16
            mesh          = new Mesh();
            visibleFacing = 0;
        }
示例#8
0
 /// <summary>
 /// All lines in input should be already sorted
 /// </summary>
 /// <param name="input"></param>
 public List<WordsFrequency> CalcTop(IChunkReader input)
 {
     string line;
     while((line = input.MoveNextLine()) != null)
     {
         curr = WordsFrequency.Parse(line);
         if (prev != null && prev.Word != curr.Word)
         {
             Handle(prev);
             prev = curr;
         }
         else
         {
             if (prev == null)
                 prev = curr;
             else
                 prev.Frequency += curr.Frequency;
         }
     }
     Handle(prev);
     return top.ToList();
 }
示例#9
0
 public void Merge(IChunkReader[] chunkReaders, IChunkWriter output)
 {
     var list = new LinkedList<Pair>();
     for(int i = 0; i < chunkReaders.Length; i++)
     {
         string current = chunkReaders[i].MoveNextLine();
         if(current == null)
             continue;
         AddToList(list, new Pair(i, current));
     }
     while(list.Count > 0)
     {
         Pair pair = list.First.Value;
         list.RemoveFirst();
         string line = pair.Key;
         output.WriteLine(line);
         string current = chunkReaders[pair.InputIndex].MoveNextLine();
         if(current == null)
             continue;
         pair.Key = current;
         AddToList(list, pair);
     }
 }
示例#10
0
        public void ReadChunk(IChunkReader reader)
        {
            byte[] idBytes = ReadByteArray(4);

            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < 4; i++)
            {
                char c = (char)idBytes[i];
                if (c >= 'A' && c <= 'Z')
                {
                    sb.Append(c);
                }
                else
                {
                    throw new Exception("Chunk id contained unexpected letter");
                }
            }

            string id = sb.ToString();

            //System.Console.WriteLine("Reading " + id);

            long chunkLength = ReadLong();
            long chunkStart = stream.Position;

            currentChunkStart = chunkStart;
            currentChunkLength = chunkLength;

            reader.ReadChunk(id, chunkLength, this);

            long bytesReadByReader = stream.Position - chunkStart;

            if (bytesReadByReader > chunkLength)
            {
                throw new Exception("Chunk reader read past the end of chunk '" + id + "'");
            }

            //System.Console.WriteLine("Skipping " + (chunkLength - bytesReadByReader));

            // Skip the rest of the chunk
            stream.Seek(chunkLength - bytesReadByReader, SeekOrigin.Current);
        }
示例#11
0
        public void ReadAllChunks(IChunkReader reader)
        {
            long start = currentChunkStart;
            long length = currentChunkLength;

            while (stream.Position < start + length)
            {
                ReadChunk(reader);
            }
        }
        public GZipTestDecompress(IChunkReader chunkReader, IChunkWriter chunkWriter)
        {
            _ChunkReader = chunkReader ?? throw new ArgumentNullException(nameof(chunkReader));

            _ChunkWriter = chunkWriter ?? throw new ArgumentNullException(nameof(chunkWriter));
        }
 public void SetUp()
 {
     theReader = new SelfClosingChunkReader<Tag>("<roundTime");
 }