docs: protected int addOriginalDocument(String text)
      {
          if(noMoreAdding)
              throw new RuntimeException("Initial data set has been finalized");
          StringBuilder localWorkSpace = workSpace.get();
          List<String> localStorageSpace = storageSpace.get();
          Map<String, Integer> localWordCounts = wordCounts.get();
          if(localWorkSpace == null)
          {
              localWorkSpace = new StringBuilder();
              localStorageSpace = new ArrayList<String>();
              localWordCounts = new LinkedHashMap<String, Integer>();
              workSpace.set(localWorkSpace);
              storageSpace.set(localStorageSpace);
              wordCounts.set(localWordCounts);
          }
          
          localWorkSpace.setLength(0);
          localStorageSpace.clear();
          
          
          tokenizer.tokenize(text, localWorkSpace, localStorageSpace);
          
          for(String word : localStorageSpace)
          {
              Integer count = localWordCounts.get(word);
              if(count == null)
                  localWordCounts.put(word, 1);
              else
                  localWordCounts.put(word, count+1);
          }
          
          SparseVector vec = new SparseVector(dimensionSize, localWordCounts.size());
          for(Iterator<Entry<String, Integer>> iter = localWordCounts.entrySet().iterator(); iter.hasNext();)
          {
              Entry<String, Integer> entry = iter.next();
              String word = entry.getKey();
              //XXX This code generates a hashcode and then computes the absolute value of that hashcode. If the hashcode is Integer.MIN_VALUE, then the result will be negative as well (since Math.abs(Integer.MIN_VALUE) == Integer.MIN_VALUE). 
              int index = Math.abs(word.hashCode()) % dimensionSize;
              vec.set(index, entry.getValue());
              termDocumentFrequencys.addAndGet(index, entry.getValue());
              iter.remove();
          }
          
          synchronized(vectors)
          {
              vectors.add(vec);
              return documents++;
          }
      }