private void AddStat(WordTranslation word) { ++numberOfWords; if(wordsCounter.ContainsKey(word.WordsList.Count)) { wordsCounter[word.WordsList.Count] += 1; } else { wordsCounter.Add(word.WordsList.Count, 1); } }
public void ThreadPoolCallback(object context) { InitCalculations(context); var translator = TranslatorFactory.GetCurrentTranslator(); var ratingAlgorithm = RatingAlgorithmFactory.GetAlgorithmInstance(); var cleaner = new WordCleaner(); var foundWords = translator.Translate(word); var ratedWords = ratingAlgorithm.Rate(word, foundWords); foreach (var ratedWord in ratedWords) { cleaner.Clean(ratedWord.Item2); } var result = new WordTranslation(word, ratedWords); translationManager.DoActionWithTranslatedWord(result); EndCalculations(context); }
private void WriteOnDebug(WordTranslation word) { foreach(var tr in word.WordsList) { Debug.WriteLine( string.Format("{0} - {1}", word.OrginalWord, tr)); return; } Debug.WriteLine("Brak tłumaczenia dla słowa: {0}", word.OrginalWord); }
private void AddWord(WordTranslation word) { words.Add(word); }
public void Write(WordTranslation word) { AddStat(word); AddWord(word); WriteOnDebug(word); }
public void DoActionWithTranslatedWord(WordTranslation result) { //Jezeli ktorys watek skonczy przetwarzanie, to resultat jest zapisywany //na stosie wynikow. Sekcja krytyczna trwa w tym przypadku krotko - todo: zoptymalizowac lock //Jezeli stos osiagnie maksymalna pojemnosc, to jeden z watkow roboczych //wykona zapis wszystkich elementow ze stosu, jezeli nie zapis zostanie wykonany //po zakonczeniu przetwarzania lock(syncRoot) { Debug.WriteLine(string.Format( "Obtained result. Writting on stack - {0}.", result.OrginalWord)); temporaryResultsList.Push(result); if(temporaryResultsList.Count >= maxTemporaryResults) { WriteTemporaryResults(); } } }