TermPositions* IndexReader::termPositions(Term* term){
  //Func - Returns an enumeration of all the documents which contain  term. For each
  //       document, in addition to the document number and frequency of the term in
  //       that document, a list of all of the ordinal positions of the term in the document
  //       is available.  Thus, this method implements the mapping:
  //
  //       Term => <docNum, freq,<pos 1, pos 2, ...pos freq-1>>*
  //
  //       This positional information faciliates phrase and proximity searching.
  //       The enumeration is ordered by document number.  Each document number is greater than
  //       all that precede it in the enumeration.
  //Pre  - term != NULL
  //Post - A reference to TermPositions containing an enumeration of all found documents
  //       has been returned

      CND_PRECONDITION(term != NULL, "term is NULL");

      ensureOpen();
      //Reference an instantiated termPositions instance
      TermPositions* _termPositions = termPositions();
	  //Seek all documents containing term
      _termPositions->seek(term);
	  //return the enumeration
      return _termPositions;
  }
    MultipleTermPositions::MultipleTermPositions(IndexReaderPtr indexReader, Collection<TermPtr> terms)
    {
        Collection<TermPositionsPtr> termPositions(Collection<TermPositionsPtr>::newInstance());

        for (Collection<TermPtr>::iterator term = terms.begin(); term != terms.end(); ++term)
            termPositions.add(indexReader->termPositions(*term));

        termPositionsQueue = newLucene<TermPositionsQueue>(termPositions);
        posList = newLucene<IntQueue>();
        _doc = 0;
        _freq = 0;
    }
TermPositionsPtr IndexReader::termPositions(const TermPtr& term) {
    ensureOpen();
    TermPositionsPtr _termPositions(termPositions());
    _termPositions->seek(term);
    return _termPositions;
}