Logo Search packages:      
Sourcecode: qt4-x11 version File versions

FilteredTermEnum.cpp

/*------------------------------------------------------------------------------
* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
* 
* Distributable under the terms of either the Apache License (Version 2.0) or 
* the GNU Lesser General Public License, as specified in the COPYING file.
------------------------------------------------------------------------------*/
#include "CLucene/StdHeader.h"

#include "FilteredTermEnum.h"

CL_NS_USE(index)
CL_NS_DEF(search)


    FilteredTermEnum::FilteredTermEnum(){
      //Func - Constructor
      //Pre  - true
      //Post - Instance has been created
            
        currentTerm = NULL;
        actualEnum = NULL;
    }

    FilteredTermEnum::~FilteredTermEnum() {
    //Func - Destructor
      //Pre  - true
      //Post - The instance has been destroyed
      
        close();
    }

      int32_t FilteredTermEnum::docFreq() const {
      //Func - Returns the docFreq of the current Term in the enumeration.
      //Pre  - next() must have been called at least once
      //Post - if actualEnum is NULL result is -1 otherwise the frequencey is returned

            if (actualEnum == NULL){
                  return -1;
            }
        return actualEnum->docFreq();
    }
    
    bool FilteredTermEnum::next() {
    //Func - Increments the enumeration to the next element.  
      //Pre  - true
      //Post - Returns True if the enumeration has been moved to the next element otherwise false

            //The actual enumerator is not initialized!
            if (actualEnum == NULL){
                  return false; 
                }

            //Finalize the currentTerm and reset it to NULL
       _CLDECDELETE( currentTerm );

            //Iterate through the enumeration
        while (currentTerm == NULL) {
            if (endEnum()) 
                        return false;
            if (actualEnum->next()) {
                //Order term not to return reference ownership here. */
                Term* term = actualEnum->term(false);
                        //Compare the retrieved term
                if (termCompare(term)){
                              //Matched so finalize the current
                    _CLDECDELETE(currentTerm);
                              //Get a reference to the matched term
                    currentTerm = _CL_POINTER(term);
                    return true;
                }
            }else 
                return false;
        }
        _CLDECDELETE(currentTerm);
        currentTerm = NULL;

        return false;
    }

    Term* FilteredTermEnum::term() {
      //Func - Returns the current Term in the enumeration.
      //Pre  - next() must have been called at least once
      //       pointer is true or false
      //Post - if pre(pointer) is true the reference counter of currentTerm is increased
      //       and current Term is returned otherwise currentTerm is only returned

        return _CL_POINTER(currentTerm);
    }
    Term* FilteredTermEnum::term(bool pointer) {
      if ( pointer )
            return _CL_POINTER(currentTerm);
        else
            return currentTerm;
    }

    void FilteredTermEnum::close(){
      //Func - Closes the enumeration to further activity, freeing resources.
      //Pre  - true
      //Post - The Enumeration has been closed

            //Check if actualEnum is valid
            if (actualEnum){
                  //Close the enumeration
            actualEnum->close();
                }

        //Destroy the enumeration
        _CLDELETE(actualEnum);

            //Destroy currentTerm
        _CLDECDELETE(currentTerm);
    }

      void FilteredTermEnum::setEnum(TermEnum* actualEnum) {
      //Func - Sets the actual Enumeration
      //Pre  - actualEnum != NULL
      //Post - The instance has been created

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

            _CLDELETE(this->actualEnum);

        this->actualEnum = actualEnum;

        // Find the first term that matches
        //Ordered term not to return reference ownership here.
        Term* term = actualEnum->term(false);
        if (term != NULL && termCompare(term)){
            _CLDECDELETE(currentTerm);
            currentTerm = _CL_POINTER(term);
        }else{
            next();
            }
    }

CL_NS_END

Generated by  Doxygen 1.6.0   Back to index