Beispiel #1
0
 /// <summary>
 /// return stemmer to the stemmer pool
 /// </summary>
 /// <param name="stemmer"></param>
 public static void ReturnStemmer(Stemmer stemmer)
 {
     for (var i = 0; i < stemmers.Count; i++)
     {
         if (stemmer == stemmers[i])
         {
             lock (availableStemmers)
             {
                 availableStemmers.Add(i);
             }
             break;
         }
     }
 }
Beispiel #2
0
 /// <summary>
 /// Get a stemmer  from stemmer pool
 /// </summary>
 /// <returns></returns>
 public static Stemmer GetStemmer()
 {
     lock (locker)
     {
         lock (availableStemmers)
         {
             if (availableStemmers.Count > 0)
             {
                 var index = availableStemmers.First();
                 availableStemmers.Remove(index);
                 return(stemmers[index]);
             }
             else if (stemmers.Count < maxStemmerNum)
             {
                 if (availableStemmers.Count == 0)
                 {
                     var stemmer = new Stemmer();
                     stemmers.Add(stemmer);
                     return(stemmer);
                 }
                 else
                 {
                     var index = availableStemmers.First();
                     availableStemmers.Remove(index);
                     return(stemmers[index]);
                 }
             }
         }
         {
             while (availableStemmers.Count == 0)
             {
                 Thread.Sleep(10);
             }
             var index = availableStemmers.First();
             availableStemmers.Remove(index);
             return(stemmers[index]);
         }
     }
 }