/*------------------------------------------------------------------------------
* 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.
------------------------------------------------------------------------------*/
#ifndef _lucene_search_ConjunctionScorer_
#define _lucene_search_ConjunctionScorer_

#if defined(_LUCENE_PRAGMA_ONCE)
# pragma once
#endif
#include "Scorer.h"
#include "Similarity.h"

CL_NS_DEF(search)

/** Scorer for conjunctions, sets of queries, all of which are required. */
class ConjunctionScorer: public Scorer {
private:
  CL_NS(util)::CLLinkedList<Scorer*,CL_NS(util)::Deletor::Object<Scorer> > scorers;
  bool firstTime;
  bool more;
  qreal coord;

  Scorer* first() const;
  Scorer* last();
  void sortScorers();
  bool doNext();
  void init();
public:
  ConjunctionScorer(Similarity* similarity);
  virtual ~ConjunctionScorer();
  TCHAR* toString(void){
	return STRDUP_TtoT(_T("ConjunctionScorer"));
  }
  void add(Scorer* scorer);
  int32_t doc() const;
  bool next();
  bool skipTo(int32_t target);
  qreal score();
  virtual void explain(int32_t doc, Explanation* ret) {
    _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: ConjunctionScorer::explain");
  }


};

CL_NS_END
#endif
