public static GuessResult GetCachedGuessResult(LanguageGuesser serviceItem, string phrase) { if(!useCache) return new GuessResult(serviceItem, phrase); string key = phrase.Trim().ToLowerInvariant(); if(key.Length > 300) key = key.Substring(0, 300); GuessResultsHashtable collection; bool collection_exists = true; lock(cache) { if(!cache.TryGetValue(key, out collection)) { collection = new GuessResultsHashtable(); cache.Add(key, collection); collection_exists = false; } } int hash = serviceItem.FullName.GetHashCode(); bool needed_new_result = !collection_exists; GuessResult res = null; lock(collection) { if(!needed_new_result) { if(!collection.TryGetValue(hash, out res)) needed_new_result = true; else { needed_new_result = (res.Error != null && !res.ResultNotFound) || res.Phrase != phrase; } } if(needed_new_result) { res = new GuessResult(serviceItem, phrase); collection[hash] = res; lock(results_history) { results_history.Add(res); } } else { res.LastUsed = DateTime.Now; lock(results_history) { results_history.Remove(res); results_history.Add(res); } } } return res; }
public GuessResult(LanguageGuesser detectorItem, string phrase) { this.DetectorItem = detectorItem; this.phrase = phrase; }
public static GuessResult GetCachedGuessResult(LanguageGuesser serviceItem, string phrase) { if (!useCache) { return(new GuessResult(serviceItem, phrase)); } string key = phrase.Trim().ToLowerInvariant(); if (key.Length > 300) { key = key.Substring(0, 300); } GuessResultsHashtable collection; bool collection_exists = true; lock (cache) { if (!cache.TryGetValue(key, out collection)) { collection = new GuessResultsHashtable(); cache.Add(key, collection); collection_exists = false; } } int hash = serviceItem.FullName.GetHashCode(); bool needed_new_result = !collection_exists; GuessResult res = null; lock (collection) { if (!needed_new_result) { if (!collection.TryGetValue(hash, out res)) { needed_new_result = true; } else { needed_new_result = (res.Error != null && !res.ResultNotFound) || res.Phrase != phrase; } } if (needed_new_result) { res = new GuessResult(serviceItem, phrase); collection[hash] = res; lock (results_history) { results_history.Add(res); } } else { res.LastUsed = DateTime.Now; lock (results_history) { results_history.Remove(res); results_history.Add(res); } } } return(res); }