/*------------------------------------------------------------------------------
* 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_DateFilter_
#define _lucene_search_DateFilter_

#if defined(_LUCENE_PRAGMA_ONCE)
# pragma once
#endif

#include "clucene/document/datefield.h"
#include "clucene/index/term.h"
#include "clucene/index/terms.h"
#include "clucene/index/indexreader.h"
#include "clucene/util/bitset.h"
#include "clucene/search/filter.h"

CL_NS_DEF(search)
  /**
 * A Filter that restricts search results to a range of time.
 *
 * <p>For this to work, documents must have been indexed with a
 * {@link DateField}.
 */
  class DateFilter: public Filter {
  private:
	CL_NS(index)::Term* start;
    CL_NS(index)::Term* end;

  protected:
    DateFilter(const DateFilter& copy);
  public:
    ~DateFilter();

    /** Constructs a filter for field <code>f</code> matching times between
      <code>from</code> and <code>to</code>. */
    DateFilter(const TCHAR* f, int64_t from, int64_t to);

    /** Constructs a filter for field <code>f</code> matching times before
      <code>time</code>. */
    static DateFilter* Before(const TCHAR* field, int64_t time) ;

    /** Constructs a filter for field <code>f</code> matching times after
      <code>time</code>. */
    static DateFilter* After(const TCHAR* field, int64_t time) ;

    /** Returns a BitSet with true for documents which should be permitted in
      search results, and false for those that should not. */
	  CL_NS(util)::BitSet* bits(CL_NS(index)::IndexReader* reader) ;

	Filter* clone() const;
	
	TCHAR* toString();
  };
CL_NS_END
#endif
