コード例 #1
0
        /// <summary>
        /// Asynchronous method to analyze the data stream.
        /// </summary>
        /// <param name="data">Data stream to analyze.</param>
        /// <param name="blockSize">Max number of characters to read at a time.</param>
        /// <returns>Result of the analysis.</returns>
        public async Task<IAnalyzerResult> AnalyzeAsync(Stream data, int blockSize = 1024)
        {
            var result = new CharacterAnalyzerResult();
            var buffer = new char[blockSize];

            using (var reader = new StreamReader(data))
            {
                var lastCharType = CharacterType.Invalid;

                while (!reader.EndOfStream)
                {
                    var count = await reader.ReadAsync(buffer, 0, blockSize).ConfigureAwait(false);

                    lastCharType = AnalyzeBuffer(buffer, count, result, lastCharType);
                }   
            }

            return result;
        }
コード例 #2
0
        private CharacterType AnalyzeBuffer(char[] buffer, int count, CharacterAnalyzerResult result, CharacterType lastCharType)
        {
            result.CharacterCount.Increment(count);

            for (int ix = 0; ix < count; ++ix)
            {
                var c = buffer[ix];

                var currentCharType = CharacterTypeUtils.GetCharType(c);
                var currentCounter = result.GetCounter(currentCharType);

                currentCounter.Counter.Increment();
                if (currentCharType == lastCharType) currentCounter.RepeatCounter.Increment();

                lastCharType = currentCharType;
            }   // for

            return lastCharType;
        }
コード例 #3
0
        /// <summary>
        /// Synchronous method to analyze the data stream.
        /// </summary>
        /// <param name="data">Data stream to analyze.</param>
        /// <param name="blockSize">Max number of characters to read at a time.</param>
        /// <returns>Result of the analysis.</returns>
        public IAnalyzerResult Analyze(Stream data, int blockSize = 1024)
        {
            var result = new CharacterAnalyzerResult();
            var buffer = new char[blockSize];

            using (var reader = new StreamReader(data))
            {
                var lastCharType = CharacterType.Invalid;

                while (!reader.EndOfStream)
                {
                    var count = reader.Read(buffer, 0, blockSize);

                    lastCharType = AnalyzeBuffer(buffer, count, result, lastCharType);
                }   
            }

            return result;
        }
コード例 #4
0
 public CharacterScoreCalculator(CharacterAnalyzerResult result)
 {
     _result = result;
 }