The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
IndexSearcher *
new(CLASS, directory)
const char* CLASS;
Directory* directory
    CODE:
        RETVAL = new IndexSearcher(directory);
//        printf("created indexsearcher\n");
    OUTPUT:
        RETVAL
    CLEANUP:
        // Memorize Directory in returned blessed hash reference.
        // We don't want it to be destroyed by perl before the C++ object it
        // contains gets destroyed by C++. Otherwise this would cause a seg fault.
        hv_store((HV *) SvRV(ST(0)), "Directory", 9, newRV(SvRV(ST(1))), 1);


Hits * 
search(self, query, obj2 = 0, obj3 = 0)
    CASE: items == 2
        IndexSearcher* self
        Query* query
        PREINIT:
          const char* CLASS = "Lucene::Search::Hits";
        CODE:
          try {
            RETVAL = self->search(query);
          } catch (CLuceneError& e) {
            die("[Lucene::Search::IndexSearcher->search()] %s\n", e.what());
          }
        OUTPUT:
          RETVAL
    CASE: items == 3 && sv_derived_from(ST(2), "Lucene::Search::Sort")
        IndexSearcher* self
        Query* query
        Sort* obj2
        PREINIT:
          const char* CLASS = "Lucene::Search::Hits";
        CODE:
          try {
            RETVAL = self->search(query, obj2);
          } catch (CLuceneError& e) {
            die("[Lucene::Search::IndexSearcher->search()] %s\n", e.what());
          }
        OUTPUT:
          RETVAL
    CASE: items == 3
        IndexSearcher* self
        Query* query
        Filter* obj2
        PREINIT:
          const char* CLASS = "Lucene::Search::Hits";
        CODE:
          try {
            RETVAL = self->search(query, obj2);
          } catch (CLuceneError& e) {
            die("[Lucene::Search::IndexSearcher->search()] %s\n", e.what());
          }
        OUTPUT:
          RETVAL
    CASE: items == 4
        IndexSearcher* self
        Query* query
        Filter* obj2
        Sort* obj3
        PREINIT:
          const char* CLASS = "Lucene::Search::Hits";
        CODE:
          try {
            RETVAL = self->search(query, obj2, obj3);
          } catch (CLuceneError& e) {
            die("[Lucene::Search::IndexSearcher->search()] %s\n", e.what());
          }
        OUTPUT:
          RETVAL
    CASE:
       CODE:
         die("Usage: Lucene::Search::IndexSearcher::search(self, query, [sort | filter | filter, sort])");

void 
_search(self, query, hit_collector)
    IndexSearcher* self
    Query* query
    HitCollector* hit_collector
    CODE:
      try {
        self->_search(query, NULL, hit_collector);
      } catch (CLuceneError& e) {
        die("[Lucene::Search::IndexSearcher->_search()] %s\n", e.what());
      }


void
setSimilarity(self, similarity)
IndexSearcher* self
Similarity* similarity
    CODE:
        self->setSimilarity(similarity);
    CLEANUP:
        // This garantees that perl will keep the similarity for as long as
        // this object exists. Otherwise we might end up with a pointer to a
        // deleted similarity which will cause a seg fault
        hv_store((HV *) SvRV(ST(0)), "Similarity", 10, newRV(SvRV(ST(1))), 1);


void
close(self)
IndexSearcher* self
    CODE:
        self->close();
    OUTPUT:

Explanation*
explain(self, query, doc_num)
IndexSearcher* self
Query* query
int32_t doc_num
    PREINIT:
        const char* CLASS = "Lucene::Search::Explanation";
    CODE:
        Explanation* explanation = new Explanation();
        self->explain(query, doc_num, explanation);
        RETVAL = explanation;
    OUTPUT:
        RETVAL

void
DESTROY(self)
        IndexSearcher * self
    CODE:
        delete self;
//        printf("deleted indexsearcher\n");