| database.h | | database.h | |
| /** @file database.h | | /** @file database.h | |
| * @brief API for working with Xapian databases | | * @brief API for working with Xapian databases | |
| */ | | */ | |
| /* Copyright 1999,2000,2001 BrightStation PLC | | /* Copyright 1999,2000,2001 BrightStation PLC | |
| * Copyright 2002 Ananova Ltd | | * Copyright 2002 Ananova Ltd | |
|
| * Copyright 2002,2003,2004,2005,2006,2007,2008,2009,2011,2012 Olly Betts | | * Copyright 2002,2003,2004,2005,2006,2007,2008,2009,2011,2012,2013 Olly Be
tts | |
| * Copyright 2006,2008 Lemur Consulting Ltd | | * Copyright 2006,2008 Lemur Consulting Ltd | |
| * | | * | |
| * This program is free software; you can redistribute it and/or | | * This program is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU General Public License as | | * modify it under the terms of the GNU General Public License as | |
| * published by the Free Software Foundation; either version 2 of the | | * published by the Free Software Foundation; either version 2 of the | |
| * License, or (at your option) any later version. | | * License, or (at your option) any later version. | |
| * | | * | |
| * This program is distributed in the hope that it will be useful, | | * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| | | | |
| skipping to change at line 28 | | skipping to change at line 28 | |
| * | | * | |
| * You should have received a copy of the GNU General Public License | | * You should have received a copy of the GNU General Public License | |
| * along with this program; if not, write to the Free Software | | * along with this program; if not, write to the Free Software | |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 | | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 | |
| * USA | | * USA | |
| */ | | */ | |
| | | | |
| #ifndef XAPIAN_INCLUDED_DATABASE_H | | #ifndef XAPIAN_INCLUDED_DATABASE_H | |
| #define XAPIAN_INCLUDED_DATABASE_H | | #define XAPIAN_INCLUDED_DATABASE_H | |
| | | | |
|
| | | #if !defined XAPIAN_INCLUDED_XAPIAN_H && !defined XAPIAN_LIB_BUILD | |
| | | # error "Never use <xapian/database.h> directly; include <xapian.h> instead | |
| | | ." | |
| | | #endif | |
| | | | |
| #include <iosfwd> | | #include <iosfwd> | |
| #include <string> | | #include <string> | |
| #include <vector> | | #include <vector> | |
| | | | |
|
| | | #include <xapian/attributes.h> | |
| #include <xapian/intrusive_ptr.h> | | #include <xapian/intrusive_ptr.h> | |
| #include <xapian/types.h> | | #include <xapian/types.h> | |
| #include <xapian/positioniterator.h> | | #include <xapian/positioniterator.h> | |
| #include <xapian/postingiterator.h> | | #include <xapian/postingiterator.h> | |
| #include <xapian/termiterator.h> | | #include <xapian/termiterator.h> | |
| #include <xapian/valueiterator.h> | | #include <xapian/valueiterator.h> | |
| #include <xapian/visibility.h> | | #include <xapian/visibility.h> | |
| | | | |
| namespace Xapian { | | namespace Xapian { | |
| | | | |
| | | | |
| skipping to change at line 175 | | skipping to change at line 180 | |
| * cached) | | * cached) | |
| * | | * | |
| * - raise a Xapian::DatabaseError exception indicating that the | | * - raise a Xapian::DatabaseError exception indicating that the | |
| * database is closed. | | * database is closed. | |
| * | | * | |
| * The reason for this behaviour is that otherwise we'd have to che
ck | | * The reason for this behaviour is that otherwise we'd have to che
ck | |
| * that the database is still open on every method call on every | | * that the database is still open on every method call on every | |
| * object associated with a Database, when in many cases they are | | * object associated with a Database, when in many cases they are | |
| * working on data which has already been loaded and so they are ab
le | | * working on data which has already been loaded and so they are ab
le | |
| * to just behave correctly. | | * to just behave correctly. | |
|
| | | * | |
| | | * This method was added in Xapian 1.1.0. | |
| */ | | */ | |
| virtual void close(); | | virtual void close(); | |
| | | | |
| /// Return a string describing this object. | | /// Return a string describing this object. | |
| virtual std::string get_description() const; | | virtual std::string get_description() const; | |
| | | | |
| /** An iterator pointing to the start of the postlist | | /** An iterator pointing to the start of the postlist | |
| * for a given term. | | * for a given term. | |
| * | | * | |
| * @param tname The termname to iterate postings for. If th
e | | * @param tname The termname to iterate postings for. If th
e | |
| * term name is the empty string, the iterator | | * term name is the empty string, the iterator | |
| * returned will list all the documents in the | | * returned will list all the documents in the | |
| * database. Such an iterator will always retu
rn | | * database. Such an iterator will always retu
rn | |
| * a WDF value of 1, since there is no obvious | | * a WDF value of 1, since there is no obvious | |
| * meaning for this quantity in this case. | | * meaning for this quantity in this case. | |
| */ | | */ | |
| PostingIterator postlist_begin(const std::string &tname) const; | | PostingIterator postlist_begin(const std::string &tname) const; | |
| | | | |
| /** Corresponding end iterator to postlist_begin(). | | /** Corresponding end iterator to postlist_begin(). | |
| */ | | */ | |
|
| PostingIterator postlist_end(const std::string &) const { | | PostingIterator XAPIAN_NOTHROW(postlist_end(const std::string &) con
st) { | |
| return PostingIterator(); | | return PostingIterator(); | |
| } | | } | |
| | | | |
| /** An iterator pointing to the start of the termlist | | /** An iterator pointing to the start of the termlist | |
| * for a given document. | | * for a given document. | |
| * | | * | |
| * @param did The document id of the document to iterate terms for
. | | * @param did The document id of the document to iterate terms for
. | |
| */ | | */ | |
| TermIterator termlist_begin(Xapian::docid did) const; | | TermIterator termlist_begin(Xapian::docid did) const; | |
| | | | |
| /** Corresponding end iterator to termlist_begin(). | | /** Corresponding end iterator to termlist_begin(). | |
| */ | | */ | |
|
| TermIterator termlist_end(Xapian::docid) const { | | TermIterator XAPIAN_NOTHROW(termlist_end(Xapian::docid) const) { | |
| return TermIterator(); | | return TermIterator(); | |
| } | | } | |
| | | | |
| /** Does this database have any positional information? */ | | /** Does this database have any positional information? */ | |
| bool has_positions() const; | | bool has_positions() const; | |
| | | | |
| /** An iterator pointing to the start of the position list | | /** An iterator pointing to the start of the position list | |
| * for a given term in a given document. | | * for a given term in a given document. | |
| */ | | */ | |
| PositionIterator positionlist_begin(Xapian::docid did, const std::st
ring &tname) const; | | PositionIterator positionlist_begin(Xapian::docid did, const std::st
ring &tname) const; | |
| | | | |
| /** Corresponding end iterator to positionlist_begin(). | | /** Corresponding end iterator to positionlist_begin(). | |
| */ | | */ | |
|
| PositionIterator positionlist_end(Xapian::docid, const std::string &
) const { | | PositionIterator XAPIAN_NOTHROW(positionlist_end(Xapian::docid, cons
t std::string &) const) { | |
| return PositionIterator(); | | return PositionIterator(); | |
| } | | } | |
| | | | |
| /** An iterator which runs across all terms in the database. | | /** An iterator which runs across all terms in the database. | |
| */ | | */ | |
| TermIterator allterms_begin() const; | | TermIterator allterms_begin() const; | |
| | | | |
| /** Corresponding end iterator to allterms_begin(). | | /** Corresponding end iterator to allterms_begin(). | |
| */ | | */ | |
|
| TermIterator allterms_end() const { | | TermIterator XAPIAN_NOTHROW(allterms_end() const) { | |
| return TermIterator(); | | return TermIterator(); | |
| } | | } | |
| | | | |
| /** An iterator which runs across all terms with a given prefix. | | /** An iterator which runs across all terms with a given prefix. | |
| * | | * | |
| * This is functionally similar to getting an iterator with | | * This is functionally similar to getting an iterator with | |
| * allterms_begin() and then calling skip_to(prefix) on that iterat
or | | * allterms_begin() and then calling skip_to(prefix) on that iterat
or | |
| * to move to the start of the prefix, but is more convenient (beca
use | | * to move to the start of the prefix, but is more convenient (beca
use | |
| * it detects the end of the prefixed terms), and may be more | | * it detects the end of the prefixed terms), and may be more | |
| * efficient than simply calling skip_to() after opening the iterat
or, | | * efficient than simply calling skip_to() after opening the iterat
or, | |
| * particularly for remote databases. | | * particularly for remote databases. | |
| * | | * | |
| * @param prefix The prefix to restrict the returned terms to. | | * @param prefix The prefix to restrict the returned terms to. | |
| */ | | */ | |
| TermIterator allterms_begin(const std::string & prefix) const; | | TermIterator allterms_begin(const std::string & prefix) const; | |
| | | | |
| /** Corresponding end iterator to allterms_begin(prefix). | | /** Corresponding end iterator to allterms_begin(prefix). | |
| */ | | */ | |
|
| TermIterator allterms_end(const std::string &) const { | | TermIterator XAPIAN_NOTHROW(allterms_end(const std::string &) const)
{ | |
| return TermIterator(); | | return TermIterator(); | |
| } | | } | |
| | | | |
| /// Get the number of documents in the database. | | /// Get the number of documents in the database. | |
| Xapian::doccount get_doccount() const; | | Xapian::doccount get_doccount() const; | |
| | | | |
| /// Get the highest document id which has been used in the database. | | /// Get the highest document id which has been used in the database. | |
| Xapian::docid get_lastdocid() const; | | Xapian::docid get_lastdocid() const; | |
| | | | |
| /// Get the average length of the documents in the database. | | /// Get the average length of the documents in the database. | |
| | | | |
| skipping to change at line 340 | | skipping to change at line 347 | |
| /// Get an upper bound on the length of a document in this DB. | | /// Get an upper bound on the length of a document in this DB. | |
| Xapian::termcount get_doclength_upper_bound() const; | | Xapian::termcount get_doclength_upper_bound() const; | |
| | | | |
| /// Get an upper bound on the wdf of term @a term. | | /// Get an upper bound on the wdf of term @a term. | |
| Xapian::termcount get_wdf_upper_bound(const std::string & term) cons
t; | | Xapian::termcount get_wdf_upper_bound(const std::string & term) cons
t; | |
| | | | |
| /// Return an iterator over the value in slot @a slot for each docum
ent. | | /// Return an iterator over the value in slot @a slot for each docum
ent. | |
| ValueIterator valuestream_begin(Xapian::valueno slot) const; | | ValueIterator valuestream_begin(Xapian::valueno slot) const; | |
| | | | |
| /// Return end iterator corresponding to valuestream_begin(). | | /// Return end iterator corresponding to valuestream_begin(). | |
|
| ValueIterator valuestream_end(Xapian::valueno) const { | | ValueIterator XAPIAN_NOTHROW(valuestream_end(Xapian::valueno) const)
{ | |
| return ValueIterator(); | | return ValueIterator(); | |
| } | | } | |
| | | | |
| /// Get the length of a document. | | /// Get the length of a document. | |
| Xapian::termcount get_doclength(Xapian::docid did) const; | | Xapian::termcount get_doclength(Xapian::docid did) const; | |
| | | | |
| /** Send a "keep-alive" to remote databases to stop them timing out. | | /** Send a "keep-alive" to remote databases to stop them timing out. | |
| * | | * | |
| * Has no effect on non-remote databases. | | * Has no effect on non-remote databases. | |
| */ | | */ | |
| | | | |
| skipping to change at line 391 | | skipping to change at line 398 | |
| /** An iterator which returns all the spelling correction targets. | | /** An iterator which returns all the spelling correction targets. | |
| * | | * | |
| * This returns all the words which are considered as targets for t
he | | * This returns all the words which are considered as targets for t
he | |
| * spelling correction algorithm. The frequency of each word is | | * spelling correction algorithm. The frequency of each word is | |
| * available as the term frequency of each entry in the returned | | * available as the term frequency of each entry in the returned | |
| * iterator. | | * iterator. | |
| */ | | */ | |
| Xapian::TermIterator spellings_begin() const; | | Xapian::TermIterator spellings_begin() const; | |
| | | | |
| /// Corresponding end iterator to spellings_begin(). | | /// Corresponding end iterator to spellings_begin(). | |
|
| Xapian::TermIterator spellings_end() const { | | Xapian::TermIterator XAPIAN_NOTHROW(spellings_end() const) { | |
| return Xapian::TermIterator(); | | return Xapian::TermIterator(); | |
| } | | } | |
| | | | |
| /** An iterator which returns all the synonyms for a given term. | | /** An iterator which returns all the synonyms for a given term. | |
| * | | * | |
| * @param term The term to return synonyms for. | | * @param term The term to return synonyms for. | |
| */ | | */ | |
| Xapian::TermIterator synonyms_begin(const std::string &term) const; | | Xapian::TermIterator synonyms_begin(const std::string &term) const; | |
| | | | |
| /// Corresponding end iterator to synonyms_begin(term). | | /// Corresponding end iterator to synonyms_begin(term). | |
|
| Xapian::TermIterator synonyms_end(const std::string &) const { | | Xapian::TermIterator XAPIAN_NOTHROW(synonyms_end(const std::string &
) const) { | |
| return Xapian::TermIterator(); | | return Xapian::TermIterator(); | |
| } | | } | |
| | | | |
| /** An iterator which returns all terms which have synonyms. | | /** An iterator which returns all terms which have synonyms. | |
| * | | * | |
| * @param prefix If non-empty, only terms with this prefix are | | * @param prefix If non-empty, only terms with this prefix are | |
| * returned. | | * returned. | |
| */ | | */ | |
| Xapian::TermIterator synonym_keys_begin(const std::string &prefix =
std::string()) const; | | Xapian::TermIterator synonym_keys_begin(const std::string &prefix =
std::string()) const; | |
| | | | |
| /// Corresponding end iterator to synonym_keys_begin(prefix). | | /// Corresponding end iterator to synonym_keys_begin(prefix). | |
|
| Xapian::TermIterator synonym_keys_end(const std::string & = std::str
ing()) const { | | Xapian::TermIterator XAPIAN_NOTHROW(synonym_keys_end(const std::stri
ng & = std::string()) const) { | |
| return Xapian::TermIterator(); | | return Xapian::TermIterator(); | |
| } | | } | |
| | | | |
| /** Get the user-specified metadata associated with a given key. | | /** Get the user-specified metadata associated with a given key. | |
| * | | * | |
| * User-specified metadata allows you to store arbitrary informatio
n | | * User-specified metadata allows you to store arbitrary informatio
n | |
| * in the form of (key,tag) pairs. See @a | | * in the form of (key,tag) pairs. See @a | |
| * WritableDatabase::set_metadata() for more information. | | * WritableDatabase::set_metadata() for more information. | |
| * | | * | |
| * When invoked on a Xapian::Database object representing multiple | | * When invoked on a Xapian::Database object representing multiple | |
| | | | |
| skipping to change at line 465 | | skipping to change at line 472 | |
| * returned. | | * returned. | |
| * | | * | |
| * @exception Xapian::UnimplementedError will be thrown if the | | * @exception Xapian::UnimplementedError will be thrown if the | |
| * backend implements user-specified metadata,
but | | * backend implements user-specified metadata,
but | |
| * doesn't implement iterating its keys (curren
tly | | * doesn't implement iterating its keys (curren
tly | |
| * this happens for the InMemory backend). | | * this happens for the InMemory backend). | |
| */ | | */ | |
| Xapian::TermIterator metadata_keys_begin(const std::string &prefix =
std::string()) const; | | Xapian::TermIterator metadata_keys_begin(const std::string &prefix =
std::string()) const; | |
| | | | |
| /// Corresponding end iterator to metadata_keys_begin(). | | /// Corresponding end iterator to metadata_keys_begin(). | |
|
| Xapian::TermIterator metadata_keys_end(const std::string & = std::st
ring()) const { | | Xapian::TermIterator XAPIAN_NOTHROW(metadata_keys_end(const std::str
ing & = std::string()) const) { | |
| return Xapian::TermIterator(); | | return Xapian::TermIterator(); | |
| } | | } | |
| | | | |
| /** Get a UUID for the database. | | /** Get a UUID for the database. | |
| * | | * | |
| * The UUID will persist for the lifetime of the database. | | * The UUID will persist for the lifetime of the database. | |
| * | | * | |
| * Replicas (eg, made with the replication protocol, or by copying
all | | * Replicas (eg, made with the replication protocol, or by copying
all | |
| * the database files) will have the same UUID. However, copies (m
ade | | * the database files) will have the same UUID. However, copies (m
ade | |
| * with copydatabase, or xapian-compact) will have different UUIDs. | | * with copydatabase, or xapian-compact) will have different UUIDs. | |
| | | | |
| skipping to change at line 495 | | skipping to change at line 502 | |
| /** Check the integrity of a database or database table. | | /** Check the integrity of a database or database table. | |
| * | | * | |
| * This method is currently experimental, and may change incompatib
ly | | * This method is currently experimental, and may change incompatib
ly | |
| * or possibly even be removed. Feedback on how well it works and | | * or possibly even be removed. Feedback on how well it works and | |
| * how it might be improved are welcome. | | * how it might be improved are welcome. | |
| * | | * | |
| * @param path Path to database or table | | * @param path Path to database or table | |
| * @param opts Options to use for check | | * @param opts Options to use for check | |
| * @param out std::ostream to write output to | | * @param out std::ostream to write output to | |
| */ | | */ | |
|
| | | #ifndef check | |
| static size_t check(const std::string & path, int opts, | | static size_t check(const std::string & path, int opts, | |
| std::ostream &out); | | std::ostream &out); | |
|
| | | #else | |
| | | // The AssertMacros.h header in the OS X SDK currently defines a che | |
| | | ck | |
| | | // macro. Apple have deprecated check() in favour of __Check() and | |
| | | // plan to remove check() in a "future release", but for now prevent | |
| | | // expansion of check by adding parentheses in the method prototype: | |
| | | // http://www.opensource.apple.com/source/CarbonHeaders/CarbonHeader | |
| | | s-18.1/AssertMacros.h | |
| | | // | |
| | | // We do this conditionally, as these parentheses trip up SWIG's | |
| | | // parser: | |
| | | // https://github.com/swig/swig/issues/45 | |
| | | static size_t (check)(const std::string & path, int opts, | |
| | | std::ostream &out); | |
| | | #endif | |
| | | | |
| /** Check the integrity of a database or database table. | | /** Check the integrity of a database or database table. | |
| * | | * | |
| * This method is currently experimental, and may change incompatib
ly | | * This method is currently experimental, and may change incompatib
ly | |
| * or possibly even be removed. Feedback on how well it works and | | * or possibly even be removed. Feedback on how well it works and | |
| * how it might be improved are welcome. | | * how it might be improved are welcome. | |
| * | | * | |
| * @param path Path to database or table | | * @param path Path to database or table | |
| * @param opts Options to use for check | | * @param opts Options to use for check | |
| */ | | */ | |
| | | | |
| skipping to change at line 993 | | skipping to change at line 1014 | |
| * For use with Xapian::Database::check(). | | * For use with Xapian::Database::check(). | |
| */ | | */ | |
| const int DBCHECK_SHOW_BITMAP = 4; | | const int DBCHECK_SHOW_BITMAP = 4; | |
| | | | |
| /** Show statistics for the B-tree. | | /** Show statistics for the B-tree. | |
| * | | * | |
| * For use with Xapian::Database::check(). | | * For use with Xapian::Database::check(). | |
| */ | | */ | |
| const int DBCHECK_SHOW_STATS = 8; | | const int DBCHECK_SHOW_STATS = 8; | |
| | | | |
|
| | | /** Fix problems. | |
| | | * | |
| | | * Currently this is supported for chert, and will: | |
| | | * | |
| | | * * regenerate the "iamchert" file if it isn't valid (so if it is lost, | |
| | | you | |
| | | * can just create it empty and then "fix problems"). | |
| | | * | |
| | | * * regenerate base files (currently the algorithm for finding the root | |
| | | * block may not work if there was a change partly written but not | |
| | | * committed). | |
| | | * | |
| | | * For use with Xapian::Database::check(). | |
| | | */ | |
| | | const int DBCHECK_FIX = 16; | |
| | | | |
| } | | } | |
| | | | |
| #endif /* XAPIAN_INCLUDED_DATABASE_H */ | | #endif /* XAPIAN_INCLUDED_DATABASE_H */ | |
| | | | |
End of changes. 17 change blocks. |
| 11 lines changed or deleted | | 51 lines changed or added | |
|
| document.h | | document.h | |
| /** @file document.h | | /** @file document.h | |
| * @brief API for working with documents | | * @brief API for working with documents | |
| */ | | */ | |
| /* Copyright 1999,2000,2001 BrightStation PLC | | /* Copyright 1999,2000,2001 BrightStation PLC | |
| * Copyright 2002 Ananova Ltd | | * Copyright 2002 Ananova Ltd | |
|
| * Copyright 2002,2003,2004,2006,2007,2009,2010,2011 Olly Betts | | * Copyright 2002,2003,2004,2006,2007,2009,2010,2011,2012,2013 Olly Betts | |
| * Copyright 2009 Lemur Consulting Ltd | | * Copyright 2009 Lemur Consulting Ltd | |
| * | | * | |
| * This program is free software; you can redistribute it and/or | | * This program is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU General Public License as | | * modify it under the terms of the GNU General Public License as | |
| * published by the Free Software Foundation; either version 2 of the | | * published by the Free Software Foundation; either version 2 of the | |
| * License, or (at your option) any later version. | | * License, or (at your option) any later version. | |
| * | | * | |
| * This program is distributed in the hope that it will be useful, | | * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| | | | |
| skipping to change at line 28 | | skipping to change at line 28 | |
| * | | * | |
| * You should have received a copy of the GNU General Public License | | * You should have received a copy of the GNU General Public License | |
| * along with this program; if not, write to the Free Software | | * along with this program; if not, write to the Free Software | |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 | | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 | |
| * USA | | * USA | |
| */ | | */ | |
| | | | |
| #ifndef XAPIAN_INCLUDED_DOCUMENT_H | | #ifndef XAPIAN_INCLUDED_DOCUMENT_H | |
| #define XAPIAN_INCLUDED_DOCUMENT_H | | #define XAPIAN_INCLUDED_DOCUMENT_H | |
| | | | |
|
| | | #if !defined XAPIAN_INCLUDED_XAPIAN_H && !defined XAPIAN_LIB_BUILD | |
| | | # error "Never use <xapian/document.h> directly; include <xapian.h> instead | |
| | | ." | |
| | | #endif | |
| | | | |
| #include <string> | | #include <string> | |
| | | | |
|
| | | #include <xapian/attributes.h> | |
| #include <xapian/intrusive_ptr.h> | | #include <xapian/intrusive_ptr.h> | |
| #include <xapian/types.h> | | #include <xapian/types.h> | |
| #include <xapian/termiterator.h> | | #include <xapian/termiterator.h> | |
| #include <xapian/valueiterator.h> | | #include <xapian/valueiterator.h> | |
| #include <xapian/visibility.h> | | #include <xapian/visibility.h> | |
| | | | |
| namespace Xapian { | | namespace Xapian { | |
| | | | |
| /** A handle representing a document in a Xapian database. | | /** A handle representing a document in a Xapian database. | |
| * | | * | |
| | | | |
| skipping to change at line 224 | | skipping to change at line 229 | |
| | | | |
| /** The length of the termlist - i.e. the number of different terms | | /** The length of the termlist - i.e. the number of different terms | |
| * which index this document. | | * which index this document. | |
| */ | | */ | |
| Xapian::termcount termlist_count() const; | | Xapian::termcount termlist_count() const; | |
| | | | |
| /// Iterator for the terms in this document. | | /// Iterator for the terms in this document. | |
| TermIterator termlist_begin() const; | | TermIterator termlist_begin() const; | |
| | | | |
| /// Equivalent end iterator for termlist_begin(). | | /// Equivalent end iterator for termlist_begin(). | |
|
| TermIterator termlist_end() const { | | TermIterator XAPIAN_NOTHROW(termlist_end() const) { | |
| return TermIterator(); | | return TermIterator(); | |
| } | | } | |
| | | | |
| /// Count the values in this document. | | /// Count the values in this document. | |
| Xapian::termcount values_count() const; | | Xapian::termcount values_count() const; | |
| | | | |
| /// Iterator for the values in this document. | | /// Iterator for the values in this document. | |
| ValueIterator values_begin() const; | | ValueIterator values_begin() const; | |
| | | | |
| /// Equivalent end iterator for values_begin(). | | /// Equivalent end iterator for values_begin(). | |
|
| ValueIterator values_end() const { | | ValueIterator XAPIAN_NOTHROW(values_end() const) { | |
| return ValueIterator(); | | return ValueIterator(); | |
| } | | } | |
| | | | |
| /** Get the document id which is associated with this document (if a
ny). | | /** Get the document id which is associated with this document (if a
ny). | |
| * | | * | |
| * NB If multiple databases are being searched together, then this | | * NB If multiple databases are being searched together, then this | |
| * will be the document id in the individual database, not the merg
ed | | * will be the document id in the individual database, not the merg
ed | |
| * database! | | * database! | |
| * | | * | |
| * @return If this document came from a database, return the docume
nt | | * @return If this document came from a database, return the docume
nt | |
| | | | |
End of changes. 5 change blocks. |
| 3 lines changed or deleted | | 9 lines changed or added | |
|
| enquire.h | | enquire.h | |
| /** @file enquire.h | | /** @file enquire.h | |
| * @brief API for running queries | | * @brief API for running queries | |
| */ | | */ | |
| /* Copyright 1999,2000,2001 BrightStation PLC | | /* Copyright 1999,2000,2001 BrightStation PLC | |
| * Copyright 2001,2002 Ananova Ltd | | * Copyright 2001,2002 Ananova Ltd | |
|
| * Copyright 2002,2003,2004,2005,2006,2007,2008,2009,2011 Olly Betts | | * Copyright 2002,2003,2004,2005,2006,2007,2008,2009,2011,2012,2013 Olly Be
tts | |
| * Copyright 2009 Lemur Consulting Ltd | | * Copyright 2009 Lemur Consulting Ltd | |
| * Copyright 2011 Action Without Borders | | * Copyright 2011 Action Without Borders | |
| * | | * | |
| * This program is free software; you can redistribute it and/or | | * This program is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU General Public License as | | * modify it under the terms of the GNU General Public License as | |
| * published by the Free Software Foundation; either version 2 of the | | * published by the Free Software Foundation; either version 2 of the | |
| * License, or (at your option) any later version. | | * License, or (at your option) any later version. | |
| * | | * | |
| * This program is distributed in the hope that it will be useful, | | * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| | | | |
| skipping to change at line 29 | | skipping to change at line 29 | |
| * | | * | |
| * You should have received a copy of the GNU General Public License | | * You should have received a copy of the GNU General Public License | |
| * along with this program; if not, write to the Free Software | | * along with this program; if not, write to the Free Software | |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 | | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 | |
| * USA | | * USA | |
| */ | | */ | |
| | | | |
| #ifndef XAPIAN_INCLUDED_ENQUIRE_H | | #ifndef XAPIAN_INCLUDED_ENQUIRE_H | |
| #define XAPIAN_INCLUDED_ENQUIRE_H | | #define XAPIAN_INCLUDED_ENQUIRE_H | |
| | | | |
|
| | | #if !defined XAPIAN_INCLUDED_XAPIAN_H && !defined XAPIAN_LIB_BUILD | |
| | | # error "Never use <xapian/enquire.h> directly; include <xapian.h> instead. | |
| | | " | |
| | | #endif | |
| | | | |
| #include <string> | | #include <string> | |
| | | | |
|
| | | #include <xapian/attributes.h> | |
| #include <xapian/intrusive_ptr.h> | | #include <xapian/intrusive_ptr.h> | |
| #include <xapian/types.h> | | #include <xapian/types.h> | |
| #include <xapian/termiterator.h> | | #include <xapian/termiterator.h> | |
| #include <xapian/visibility.h> | | #include <xapian/visibility.h> | |
| | | | |
| namespace Xapian { | | namespace Xapian { | |
| | | | |
| class Database; | | class Database; | |
| class Document; | | class Document; | |
| class ErrorHandler; | | class ErrorHandler; | |
| | | | |
| skipping to change at line 279 | | skipping to change at line 284 | |
| MSetIterator(Xapian::doccount index_, const MSet & mset_) | | MSetIterator(Xapian::doccount index_, const MSet & mset_) | |
| : index(index_), mset(mset_) { } | | : index(index_), mset(mset_) { } | |
| | | | |
| Xapian::doccount index; | | Xapian::doccount index; | |
| MSet mset; | | MSet mset; | |
| | | | |
| public: | | public: | |
| /** Create an uninitialised iterator; this cannot be used, but is | | /** Create an uninitialised iterator; this cannot be used, but is | |
| * convenient syntactically. | | * convenient syntactically. | |
| */ | | */ | |
|
| MSetIterator() : index(0), mset() { } | | XAPIAN_NOTHROW(MSetIterator()) | |
| | | : index(0), mset() { } | |
| | | | |
| /// Copying is allowed (and is cheap). | | /// Copying is allowed (and is cheap). | |
| MSetIterator(const MSetIterator &other) { | | MSetIterator(const MSetIterator &other) { | |
| index = other.index; | | index = other.index; | |
| mset = other.mset; | | mset = other.mset; | |
| } | | } | |
| | | | |
| /// Assignment is allowed (and is cheap). | | /// Assignment is allowed (and is cheap). | |
| void operator=(const MSetIterator &other) { | | void operator=(const MSetIterator &other) { | |
| index = other.index; | | index = other.index; | |
| | | | |
| skipping to change at line 397 | | skipping to change at line 403 | |
| * However, currently it may get a lower percentage score if you | | * However, currently it may get a lower percentage score if you | |
| * use a MatchDecider and the sorting is primarily by value. | | * use a MatchDecider and the sorting is primarily by value. | |
| * In this case, the percentage for a particular document may vary | | * In this case, the percentage for a particular document may vary | |
| * depending on the first, max_size, and checkatleast parameters | | * depending on the first, max_size, and checkatleast parameters | |
| * passed to Enquire::get_mset() (this bug is hard to fix without | | * passed to Enquire::get_mset() (this bug is hard to fix without | |
| * having to apply the MatchDecider to potentially many more | | * having to apply the MatchDecider to potentially many more | |
| * documents, which is potentially costly). | | * documents, which is potentially costly). | |
| */ | | */ | |
| int get_percent() const; | | int get_percent() const; | |
| | | | |
|
| | | /// @private @internal Determine if the iterator has been exhausted. | |
| | | bool at_end() const { return index == mset.size(); } | |
| | | | |
| /// Return a string describing this object. | | /// Return a string describing this object. | |
| std::string get_description() const; | | std::string get_description() const; | |
| | | | |
| /// Allow use as an STL iterator | | /// Allow use as an STL iterator | |
| //@{ | | //@{ | |
| typedef std::bidirectional_iterator_tag iterator_category; // FIXME:
could enhance to be a randomaccess_iterator | | typedef std::bidirectional_iterator_tag iterator_category; // FIXME:
could enhance to be a randomaccess_iterator | |
| typedef Xapian::docid value_type; | | typedef Xapian::docid value_type; | |
| typedef Xapian::doccount_diff difference_type; | | typedef Xapian::doccount_diff difference_type; | |
| typedef Xapian::docid * pointer; | | typedef Xapian::docid * pointer; | |
| typedef Xapian::docid & reference; | | typedef Xapian::docid & reference; | |
| | | | |
| skipping to change at line 500 | | skipping to change at line 509 | |
| ESetIterator(Xapian::termcount index_, const ESet & eset_) | | ESetIterator(Xapian::termcount index_, const ESet & eset_) | |
| : index(index_), eset(eset_) { } | | : index(index_), eset(eset_) { } | |
| | | | |
| Xapian::termcount index; | | Xapian::termcount index; | |
| ESet eset; | | ESet eset; | |
| | | | |
| public: | | public: | |
| /** Create an uninitialised iterator; this cannot be used, but is | | /** Create an uninitialised iterator; this cannot be used, but is | |
| * convenient syntactically. | | * convenient syntactically. | |
| */ | | */ | |
|
| ESetIterator() : index(0), eset() { } | | XAPIAN_NOTHROW(ESetIterator()) | |
| | | : index(0), eset() { } | |
| | | | |
| /// Copying is allowed (and is cheap). | | /// Copying is allowed (and is cheap). | |
| ESetIterator(const ESetIterator &other) { | | ESetIterator(const ESetIterator &other) { | |
| index = other.index; | | index = other.index; | |
| eset = other.eset; | | eset = other.eset; | |
| } | | } | |
| | | | |
| /// Assignment is allowed (and is cheap). | | /// Assignment is allowed (and is cheap). | |
| void operator=(const ESetIterator &other) { | | void operator=(const ESetIterator &other) { | |
| index = other.index; | | index = other.index; | |
| eset = other.eset; | | eset = other.eset; | |
| } | | } | |
| | | | |
| /// Advance the iterator. | | /// Advance the iterator. | |
|
| ESetIterator & operator++() { | | ESetIterator & XAPIAN_NOTHROW(operator++()) { | |
| ++index; | | ++index; | |
| return *this; | | return *this; | |
| } | | } | |
| | | | |
| /// Advance the iterator (postfix variant). | | /// Advance the iterator (postfix variant). | |
| ESetIterator operator++(int) { | | ESetIterator operator++(int) { | |
| ESetIterator tmp = *this; | | ESetIterator tmp = *this; | |
| ++index; | | ++index; | |
| return tmp; | | return tmp; | |
| } | | } | |
| | | | |
| /// Decrement the iterator. | | /// Decrement the iterator. | |
|
| ESetIterator & operator--() { | | ESetIterator & XAPIAN_NOTHROW(operator--()) { | |
| --index; | | --index; | |
| return *this; | | return *this; | |
| } | | } | |
| | | | |
| /// Decrement the iterator (postfix variant). | | /// Decrement the iterator (postfix variant). | |
| ESetIterator operator--(int) { | | ESetIterator operator--(int) { | |
| ESetIterator tmp = *this; | | ESetIterator tmp = *this; | |
| --index; | | --index; | |
| return tmp; | | return tmp; | |
| } | | } | |
| | | | |
| /// Get the term for the current position | | /// Get the term for the current position | |
| const std::string & operator *() const; | | const std::string & operator *() const; | |
| | | | |
| /// Get the weight of the term at the current position | | /// Get the weight of the term at the current position | |
| double get_weight() const; | | double get_weight() const; | |
| | | | |
| /// Return a string describing this object. | | /// Return a string describing this object. | |
| std::string get_description() const; | | std::string get_description() const; | |
| | | | |
|
| | | /// @private @internal Determine if the iterator has been exhausted. | |
| | | bool at_end() const { return index == eset.size(); } | |
| | | | |
| /// Allow use as an STL iterator | | /// Allow use as an STL iterator | |
| //@{ | | //@{ | |
| typedef std::bidirectional_iterator_tag iterator_category; // FIXME:
go for randomaccess_iterator! | | typedef std::bidirectional_iterator_tag iterator_category; // FIXME:
go for randomaccess_iterator! | |
| typedef std::string value_type; | | typedef std::string value_type; | |
| typedef Xapian::termcount_diff difference_type; | | typedef Xapian::termcount_diff difference_type; | |
| typedef std::string * pointer; | | typedef std::string * pointer; | |
| typedef std::string & reference; | | typedef std::string & reference; | |
| //@} | | //@} | |
| }; | | }; | |
| | | | |
|
| | | bool | |
| | | XAPIAN_NOTHROW(operator==(const ESetIterator &a, const ESetIterator &b)); | |
| | | | |
| /// Equality test for ESetIterator objects. | | /// Equality test for ESetIterator objects. | |
|
| inline bool operator==(const ESetIterator &a, const ESetIterator &b) | | inline bool | |
| | | operator==(const ESetIterator &a, const ESetIterator &b) | |
| { | | { | |
| return (a.index == b.index); | | return (a.index == b.index); | |
| } | | } | |
| | | | |
|
| | | bool | |
| | | XAPIAN_NOTHROW(operator!=(const ESetIterator &a, const ESetIterator &b)); | |
| | | | |
| /// Inequality test for ESetIterator objects. | | /// Inequality test for ESetIterator objects. | |
|
| inline bool operator!=(const ESetIterator &a, const ESetIterator &b) | | inline bool | |
| | | operator!=(const ESetIterator &a, const ESetIterator &b) | |
| { | | { | |
| return (a.index != b.index); | | return (a.index != b.index); | |
| } | | } | |
| | | | |
| /** A relevance set (R-Set). | | /** A relevance set (R-Set). | |
| * This is the set of documents which are marked as relevant, for use | | * This is the set of documents which are marked as relevant, for use | |
| * in modifying the term weights, and in performing query expansion. | | * in modifying the term weights, and in performing query expansion. | |
| */ | | */ | |
| class XAPIAN_VISIBILITY_DEFAULT RSet { | | class XAPIAN_VISIBILITY_DEFAULT RSet { | |
| public: | | public: | |
| | | | |
| skipping to change at line 686 | | skipping to change at line 707 | |
| * @param errorhandler_ A pointer to the error handler to use. | | * @param errorhandler_ A pointer to the error handler to use. | |
| * Ownership of the object pointed to is not assumed by the | | * Ownership of the object pointed to is not assumed by the | |
| * Xapian::Enquire object - the user should delete the | | * Xapian::Enquire object - the user should delete the | |
| * Xapian::ErrorHandler object after the Xapian::Enquire obj
ect | | * Xapian::ErrorHandler object after the Xapian::Enquire obj
ect | |
| * is deleted. To use no error handler, this parameter | | * is deleted. To use no error handler, this parameter | |
| * should be 0. | | * should be 0. | |
| * | | * | |
| * @exception Xapian::InvalidArgumentError will be thrown if an | | * @exception Xapian::InvalidArgumentError will be thrown if an | |
| * empty Database object is supplied. | | * empty Database object is supplied. | |
| */ | | */ | |
|
| explicit Enquire(const Database &database, ErrorHandler * errorhandl | | explicit Enquire(const Database &database); | |
| er_ = 0); | | XAPIAN_DEPRECATED_EX(Enquire(const Database &database, ErrorHandler | |
| | | * errorhandler_)); | |
| | | | |
| /** Close the Xapian::Enquire object. | | /** Close the Xapian::Enquire object. | |
| */ | | */ | |
| ~Enquire(); | | ~Enquire(); | |
| | | | |
| /** Set the query to run. | | /** Set the query to run. | |
| * | | * | |
| * @param query the new query to run. | | * @param query the new query to run. | |
| * @param qlen the query length to use in weight calculations - | | * @param qlen the query length to use in weight calculations - | |
| * by default the sum of the wqf of all terms is used. | | * by default the sum of the wqf of all terms is used. | |
| | | | |
| skipping to change at line 903 | | skipping to change at line 925 | |
| * | | * | |
| * Note that with the default BM25 weighting scheme parameters, | | * Note that with the default BM25 weighting scheme parameters, | |
| * non-identical documents will rarely have the same weight, so | | * non-identical documents will rarely have the same weight, so | |
| * this setting will give very similar results to | | * this setting will give very similar results to | |
| * set_sort_by_relevance(). It becomes more useful with particular | | * set_sort_by_relevance(). It becomes more useful with particular | |
| * BM25 parameter settings (e.g. BM25Weight(1,0,1,0,0)) or custom | | * BM25 parameter settings (e.g. BM25Weight(1,0,1,0,0)) or custom | |
| * weighting schemes. | | * weighting schemes. | |
| * | | * | |
| * @param sort_key value number to sort on. | | * @param sort_key value number to sort on. | |
| * | | * | |
|
| * @param reverse If true, reverses the sort order. | | * @param reverse If true, reverses the sort order of sort_key. | |
| */ | | */ | |
| void set_sort_by_relevance_then_value(Xapian::valueno sort_key, | | void set_sort_by_relevance_then_value(Xapian::valueno sort_key, | |
| bool reverse); | | bool reverse); | |
| | | | |
| /** Set the sorting to be by relevance, then by keys generated from | | /** Set the sorting to be by relevance, then by keys generated from | |
| * values. | | * values. | |
| * | | * | |
| * Note that with the default BM25 weighting scheme parameters, | | * Note that with the default BM25 weighting scheme parameters, | |
| * non-identical documents will rarely have the same weight, so | | * non-identical documents will rarely have the same weight, so | |
| * this setting will give very similar results to | | * this setting will give very similar results to | |
| * set_sort_by_relevance(). It becomes more useful with particular | | * set_sort_by_relevance(). It becomes more useful with particular | |
| * BM25 parameter settings (e.g. BM25Weight(1,0,1,0,0)) or custom | | * BM25 parameter settings (e.g. BM25Weight(1,0,1,0,0)) or custom | |
| * weighting schemes. | | * weighting schemes. | |
| * | | * | |
| * @param sorter The functor to use for generating keys. | | * @param sorter The functor to use for generating keys. | |
| * | | * | |
|
| * @param reverse If true, reverses the sort order. | | * @param reverse If true, reverses the sort order of the generate | |
| | | d | |
| | | * keys. | |
| */ | | */ | |
| void set_sort_by_relevance_then_key(Xapian::KeyMaker * sorter, | | void set_sort_by_relevance_then_key(Xapian::KeyMaker * sorter, | |
| bool reverse); | | bool reverse); | |
| | | | |
| /** Get (a portion of) the match set for the current query. | | /** Get (a portion of) the match set for the current query. | |
| * | | * | |
| * @param first the first item in the result set to return. | | * @param first the first item in the result set to return. | |
| * A value of zero corresponds to the first item | | * A value of zero corresponds to the first item | |
| * returned being that with the highest score. | | * returned being that with the highest score. | |
| * A value of 10 corresponds to the first 10 items | | * A value of 10 corresponds to the first 10 items | |
| | | | |
| skipping to change at line 1085 | | skipping to change at line 1108 | |
| * in the query. Terms will not occur more than onc
e, | | * in the query. Terms will not occur more than onc
e, | |
| * even if they do in the query. | | * even if they do in the query. | |
| * | | * | |
| * @exception Xapian::InvalidArgumentError See class documentation
. | | * @exception Xapian::InvalidArgumentError See class documentation
. | |
| * @exception Xapian::DocNotFoundError The document specified | | * @exception Xapian::DocNotFoundError The document specified | |
| * could not be found in the database. | | * could not be found in the database. | |
| */ | | */ | |
| TermIterator get_matching_terms_begin(Xapian::docid did) const; | | TermIterator get_matching_terms_begin(Xapian::docid did) const; | |
| | | | |
| /** End iterator corresponding to get_matching_terms_begin() */ | | /** End iterator corresponding to get_matching_terms_begin() */ | |
|
| TermIterator get_matching_terms_end(Xapian::docid /*did*/) const { | | TermIterator XAPIAN_NOTHROW(get_matching_terms_end(Xapian::docid /*d
id*/) const) { | |
| return TermIterator(); | | return TermIterator(); | |
| } | | } | |
| | | | |
| /** Get terms which match a given document, by match set item. | | /** Get terms which match a given document, by match set item. | |
| * | | * | |
| * This method returns the terms in the current query which match | | * This method returns the terms in the current query which match | |
| * the given document. | | * the given document. | |
| * | | * | |
| * If the underlying database has suitable support, using this call | | * If the underlying database has suitable support, using this call | |
| * (rather than passing a Xapian::docid) will enable the system to | | * (rather than passing a Xapian::docid) will enable the system to | |
| | | | |
| skipping to change at line 1114 | | skipping to change at line 1137 | |
| * in the query. Terms will not occur more than onc
e, | | * in the query. Terms will not occur more than onc
e, | |
| * even if they do in the query. | | * even if they do in the query. | |
| * | | * | |
| * @exception Xapian::InvalidArgumentError See class documentation
. | | * @exception Xapian::InvalidArgumentError See class documentation
. | |
| * @exception Xapian::DocNotFoundError The document specified | | * @exception Xapian::DocNotFoundError The document specified | |
| * could not be found in the database. | | * could not be found in the database. | |
| */ | | */ | |
| TermIterator get_matching_terms_begin(const MSetIterator &it) const; | | TermIterator get_matching_terms_begin(const MSetIterator &it) const; | |
| | | | |
| /** End iterator corresponding to get_matching_terms_begin() */ | | /** End iterator corresponding to get_matching_terms_begin() */ | |
|
| TermIterator get_matching_terms_end(const MSetIterator &/*it*/) cons
t { | | TermIterator XAPIAN_NOTHROW(get_matching_terms_end(const MSetIterato
r &/*it*/) const) { | |
| return TermIterator(); | | return TermIterator(); | |
| } | | } | |
| | | | |
| /// Return a string describing this object. | | /// Return a string describing this object. | |
| std::string get_description() const; | | std::string get_description() const; | |
| }; | | }; | |
| | | | |
| } | | } | |
| | | | |
| #endif /* XAPIAN_INCLUDED_ENQUIRE_H */ | | #endif /* XAPIAN_INCLUDED_ENQUIRE_H */ | |
| | | | |
End of changes. 18 change blocks. |
| 13 lines changed or deleted | | 38 lines changed or added | |
|
| error.h | | error.h | |
| /** @file error.h | | /** @file error.h | |
| * @brief Hierarchy of classes which Xapian can throw as exceptions. | | * @brief Hierarchy of classes which Xapian can throw as exceptions. | |
| */ | | */ | |
|
| /* Warning: This file is generated by /data/home/olly/tmp/xapian-svn-snapsh
ot/tags/1.3.0/xapian/xapian-core/generate-exceptions - do not modify direct
ly! */ | | /* Warning: This file is generated by /data/home/olly/tmp/xapian-svn-snapsh
ot/tags/1.3.1/xapian/xapian-core/generate-exceptions - do not modify direct
ly! */ | |
| /* Copyright (C) 2003,2004,2006,2007,2008,2009,2011 Olly Betts | | /* Copyright (C) 2003,2004,2006,2007,2008,2009,2011 Olly Betts | |
| * Copyright (C) 2007 Richard Boulton | | * Copyright (C) 2007 Richard Boulton | |
| * | | * | |
| * This program is free software; you can redistribute it and/or | | * This program is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU General Public License as | | * modify it under the terms of the GNU General Public License as | |
| * published by the Free Software Foundation; either version 2 of the | | * published by the Free Software Foundation; either version 2 of the | |
| * License, or (at your option) any later version. | | * License, or (at your option) any later version. | |
| * | | * | |
| * This program is distributed in the hope that it will be useful, | | * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| | | | |
| skipping to change at line 26 | | skipping to change at line 26 | |
| * GNU General Public License for more details. | | * GNU General Public License for more details. | |
| * | | * | |
| * You should have received a copy of the GNU General Public License | | * You should have received a copy of the GNU General Public License | |
| * along with this program; if not, write to the Free Software | | * along with this program; if not, write to the Free Software | |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 US
A | | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 US
A | |
| */ | | */ | |
| | | | |
| #ifndef XAPIAN_INCLUDED_ERROR_H | | #ifndef XAPIAN_INCLUDED_ERROR_H | |
| #define XAPIAN_INCLUDED_ERROR_H | | #define XAPIAN_INCLUDED_ERROR_H | |
| | | | |
|
| | | #if !defined XAPIAN_INCLUDED_XAPIAN_H && !defined XAPIAN_LIB_BUILD | |
| | | # error "Never use <xapian/error.h> directly; include <xapian.h> instead." | |
| | | #endif | |
| | | | |
| #include <string> | | #include <string> | |
|
| | | #include <xapian/attributes.h> | |
| #include <xapian/visibility.h> | | #include <xapian/visibility.h> | |
| | | | |
| namespace Xapian { | | namespace Xapian { | |
| | | | |
| class ErrorHandler; | | class ErrorHandler; | |
| | | | |
| /** All exceptions thrown by Xapian are subclasses of Xapian::Error. | | /** All exceptions thrown by Xapian are subclasses of Xapian::Error. | |
| * | | * | |
| * This class can not be instantiated directly - instead a subclass should | | * This class can not be instantiated directly - instead a subclass should | |
| * be used. | | * be used. | |
| | | | |
| skipping to change at line 101 | | skipping to change at line 106 | |
| /** @private @internal | | /** @private @internal | |
| * @brief Constructor for use by constructors of derived classes. | | * @brief Constructor for use by constructors of derived classes. | |
| */ | | */ | |
| Error(const std::string &msg_, const std::string &context_, | | Error(const std::string &msg_, const std::string &context_, | |
| const char * type_, int errno_) | | const char * type_, int errno_) | |
| : msg(msg_), context(context_), error_string(), type(type_), | | : msg(msg_), context(context_), error_string(), type(type_), | |
| my_errno(errno_), already_handled(false) { } | | my_errno(errno_), already_handled(false) { } | |
| | | | |
| public: | | public: | |
| /// The type of this error (e.g. "DocNotFoundError".) | | /// The type of this error (e.g. "DocNotFoundError".) | |
|
| const char * get_type() const { return type + 1; } | | const char * XAPIAN_NOTHROW(get_type() const) XAPIAN_PURE_FUNCTION { | |
| | | return type + 1; | |
| | | } | |
| | | | |
| /// Message giving details of the error, intended for human consumption
. | | /// Message giving details of the error, intended for human consumption
. | |
|
| const std::string & get_msg() const { return msg; } | | const std::string & XAPIAN_NOTHROW(get_msg() const) XAPIAN_PURE_FUNCTIO | |
| | | N { | |
| | | return msg; | |
| | | } | |
| | | | |
| /** Optional context information. | | /** Optional context information. | |
| * | | * | |
| * This context is intended for use by Xapian::ErrorHandler (for examp
le | | * This context is intended for use by Xapian::ErrorHandler (for examp
le | |
| * so it can know which remote server is unreliable and report the pro
blem | | * so it can know which remote server is unreliable and report the pro
blem | |
| * and remove that server from those being searched). But it's typica
lly | | * and remove that server from those being searched). But it's typica
lly | |
| * a plain-text string, and so also fit for human consumption. | | * a plain-text string, and so also fit for human consumption. | |
| */ | | */ | |
|
| const std::string & get_context() const { return context; } | | const std::string & XAPIAN_NOTHROW(get_context() const) XAPIAN_PURE_FUN | |
| | | CTION | |
| | | { | |
| | | return context; | |
| | | } | |
| | | | |
| /** Returns any system error string associated with this exception. | | /** Returns any system error string associated with this exception. | |
| * | | * | |
| * The system error string may come from errno, h_errno (on UNIX), or | | * The system error string may come from errno, h_errno (on UNIX), or | |
| * GetLastError() (on MS Windows). If there is no associated system | | * GetLastError() (on MS Windows). If there is no associated system | |
| * error string, NULL is returned. | | * error string, NULL is returned. | |
| */ | | */ | |
|
| const char * get_error_string() const; | | const char * get_error_string() const XAPIAN_PURE_FUNCTION; | |
| | | | |
| /// Return a string describing this object. | | /// Return a string describing this object. | |
| std::string get_description() const; | | std::string get_description() const; | |
| }; | | }; | |
| | | | |
| /** The base class for exceptions indicating errors in the program logic. | | /** The base class for exceptions indicating errors in the program logic. | |
| * | | * | |
| * A subclass of LogicError will be thrown if Xapian detects a violation | | * A subclass of LogicError will be thrown if Xapian detects a violation | |
| * of a class invariant or a logical precondition or postcondition, etc. | | * of a class invariant or a logical precondition or postcondition, etc. | |
| */ | | */ | |
| | | | |
End of changes. 7 change blocks. |
| 5 lines changed or deleted | | 19 lines changed or added | |
|
| errorhandler.h | | errorhandler.h | |
| /** @file errorhandler.h | | /** @file errorhandler.h | |
| * @brief Decide if a Xapian::Error exception should be ignored. | | * @brief Decide if a Xapian::Error exception should be ignored. | |
| */ | | */ | |
|
| /* Copyright (C) 2003,2006,2007 Olly Betts | | /* Copyright (C) 2003,2006,2007,2012,2013 Olly Betts | |
| * | | * | |
| * This program is free software; you can redistribute it and/or | | * This program is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU General Public License as | | * modify it under the terms of the GNU General Public License as | |
| * published by the Free Software Foundation; either version 2 of the | | * published by the Free Software Foundation; either version 2 of the | |
| * License, or (at your option) any later version. | | * License, or (at your option) any later version. | |
| * | | * | |
| * This program is distributed in the hope that it will be useful, | | * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| * GNU General Public License for more details. | | * GNU General Public License for more details. | |
| * | | * | |
| * You should have received a copy of the GNU General Public License | | * You should have received a copy of the GNU General Public License | |
| * along with this program; if not, write to the Free Software | | * along with this program; if not, write to the Free Software | |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 US
A | | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 US
A | |
| */ | | */ | |
| | | | |
| #ifndef XAPIAN_INCLUDED_ERRORHANDLER_H | | #ifndef XAPIAN_INCLUDED_ERRORHANDLER_H | |
| #define XAPIAN_INCLUDED_ERRORHANDLER_H | | #define XAPIAN_INCLUDED_ERRORHANDLER_H | |
| | | | |
|
| | | #if !defined XAPIAN_INCLUDED_XAPIAN_H && !defined XAPIAN_LIB_BUILD | |
| | | # error "Never use <xapian/errorhandler.h> directly; include <xapian.h> ins | |
| | | tead." | |
| | | #endif | |
| | | | |
| | | #include <xapian/attributes.h> | |
| | | #include <xapian/deprecated.h> | |
| #include <xapian/visibility.h> | | #include <xapian/visibility.h> | |
| | | | |
| namespace Xapian { | | namespace Xapian { | |
| | | | |
| class Error; | | class Error; | |
| | | | |
| /** Decide if a Xapian::Error exception should be ignored. | | /** Decide if a Xapian::Error exception should be ignored. | |
| * | | * | |
| * You can create your own subclass of this class and pass in an instance | | * You can create your own subclass of this class and pass in an instance | |
| * of it when you construct a Xapian::Enquire object. Xapian::Error | | * of it when you construct a Xapian::Enquire object. Xapian::Error | |
| | | | |
| skipping to change at line 69 | | skipping to change at line 75 | |
| * Note that it's not always possible to continue execution, so | | * Note that it's not always possible to continue execution, so | |
| * the error may be rethrown even if you return true. The ErrorHandle
r | | * the error may be rethrown even if you return true. The ErrorHandle
r | |
| * is still called in this situation as you may want to log that a | | * is still called in this situation as you may want to log that a | |
| * particular remote backend server isn't responding, and perhaps | | * particular remote backend server isn't responding, and perhaps | |
| * remove it from those being searched temporarily. | | * remove it from those being searched temporarily. | |
| * | | * | |
| * @param error The Xapian::Error object under consideration. | | * @param error The Xapian::Error object under consideration. | |
| * | | * | |
| * @return true to attempt to continue; false to rethrow the error. | | * @return true to attempt to continue; false to rethrow the error. | |
| */ | | */ | |
|
| virtual bool handle_error(Xapian::Error &error) = 0; | | XAPIAN_DEPRECATED_EX(virtual bool handle_error(Xapian::Error &error)) =
0; | |
| | | | |
| public: | | public: | |
| /// Default constructor. | | /// Default constructor. | |
|
| ErrorHandler() {} | | XAPIAN_NOTHROW(ErrorHandler()) {} | |
| | | | |
| /// We require a virtual destructor because we have virtual methods. | | /// We require a virtual destructor because we have virtual methods. | |
| virtual ~ErrorHandler(); | | virtual ~ErrorHandler(); | |
| | | | |
| /** Handle a Xapian::Error object. | | /** Handle a Xapian::Error object. | |
| * | | * | |
| * This method is called when a Xapian::Error object is thrown and | | * This method is called when a Xapian::Error object is thrown and | |
| * caught inside Enquire. If this is the first ErrorHandler that | | * caught inside Enquire. If this is the first ErrorHandler that | |
| * the Error has been passed to, then the handle_error() virtual | | * the Error has been passed to, then the handle_error() virtual | |
| * method is called, which allows the API user to decide how to | | * method is called, which allows the API user to decide how to | |
| | | | |
End of changes. 4 change blocks. |
| 3 lines changed or deleted | | 10 lines changed or added | |
|
| geospatial.h | | geospatial.h | |
| /** @file geospatial.h | | /** @file geospatial.h | |
| * @brief Geospatial search support routines. | | * @brief Geospatial search support routines. | |
| */ | | */ | |
| /* Copyright 2008,2009 Lemur Consulting Ltd | | /* Copyright 2008,2009 Lemur Consulting Ltd | |
| * Copyright 2010,2011 Richard Boulton | | * Copyright 2010,2011 Richard Boulton | |
|
| * Copyright 2012 Olly Betts | | * Copyright 2012,2013 Olly Betts | |
| * | | * | |
| * This program is free software; you can redistribute it and/or | | * This program is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU General Public License as | | * modify it under the terms of the GNU General Public License as | |
| * published by the Free Software Foundation; either version 2 of the | | * published by the Free Software Foundation; either version 2 of the | |
| * License, or (at your option) any later version. | | * License, or (at your option) any later version. | |
| * | | * | |
| * This program is distributed in the hope that it will be useful, | | * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| * GNU General Public License for more details. | | * GNU General Public License for more details. | |
| * | | * | |
| * You should have received a copy of the GNU General Public License | | * You should have received a copy of the GNU General Public License | |
| * along with this program; if not, write to the Free Software | | * along with this program; if not, write to the Free Software | |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 | | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 | |
| * USA | | * USA | |
| */ | | */ | |
| | | | |
| #ifndef XAPIAN_INCLUDED_GEOSPATIAL_H | | #ifndef XAPIAN_INCLUDED_GEOSPATIAL_H | |
| #define XAPIAN_INCLUDED_GEOSPATIAL_H | | #define XAPIAN_INCLUDED_GEOSPATIAL_H | |
| | | | |
|
| | | #if !defined XAPIAN_INCLUDED_XAPIAN_H && !defined XAPIAN_LIB_BUILD | |
| | | # error "Never use <xapian/geospatial.h> directly; include <xapian.h> inste | |
| | | ad." | |
| | | #endif | |
| | | | |
| #include <iterator> | | #include <iterator> | |
| #include <vector> | | #include <vector> | |
| #include <string> | | #include <string> | |
| | | | |
|
| | | #include <xapian/attributes.h> | |
| #include <xapian/derefwrapper.h> | | #include <xapian/derefwrapper.h> | |
| #include <xapian/keymaker.h> | | #include <xapian/keymaker.h> | |
| #include <xapian/postingsource.h> | | #include <xapian/postingsource.h> | |
| #include <xapian/queryparser.h> // For sortable_serialise | | #include <xapian/queryparser.h> // For sortable_serialise | |
| #include <xapian/visibility.h> | | #include <xapian/visibility.h> | |
| | | | |
| namespace Xapian { | | namespace Xapian { | |
| | | | |
| class Registry; | | class Registry; | |
| | | | |
|
| | | double | |
| | | XAPIAN_NOTHROW(miles_to_metres(double miles)) XAPIAN_CONST_FUNCTION; | |
| | | | |
| /** Convert from miles to metres. | | /** Convert from miles to metres. | |
| * | | * | |
| * Experimental - see http://xapian.org/docs/deprecation#experimental-feat
ures | | * Experimental - see http://xapian.org/docs/deprecation#experimental-feat
ures | |
| */ | | */ | |
| inline double | | inline double | |
| miles_to_metres(double miles) | | miles_to_metres(double miles) | |
| { | | { | |
| return 1609.344 * miles; | | return 1609.344 * miles; | |
| } | | } | |
| | | | |
|
| | | double | |
| | | XAPIAN_NOTHROW(metres_to_miles(double metres)) XAPIAN_CONST_FUNCTION; | |
| | | | |
| /** Convert from metres to miles. | | /** Convert from metres to miles. | |
| * | | * | |
| * Experimental - see http://xapian.org/docs/deprecation#experimental-feat
ures | | * Experimental - see http://xapian.org/docs/deprecation#experimental-feat
ures | |
| */ | | */ | |
| inline double | | inline double | |
| metres_to_miles(double metres) | | metres_to_miles(double metres) | |
| { | | { | |
| return metres * (1.0 / 1609.344); | | return metres * (1.0 / 1609.344); | |
| } | | } | |
| | | | |
| | | | |
| skipping to change at line 91 | | skipping to change at line 102 | |
| * Will be wrapped around, so for example, -150 is equal to 210. When | | * Will be wrapped around, so for example, -150 is equal to 210. When | |
| * obtained from a serialised form, will be in the range 0 <= longitud
e < | | * obtained from a serialised form, will be in the range 0 <= longitud
e < | |
| * 360. | | * 360. | |
| * | | * | |
| * Longitudes increase as coordinates move eastwards. | | * Longitudes increase as coordinates move eastwards. | |
| */ | | */ | |
| double longitude; | | double longitude; | |
| | | | |
| /** Construct an uninitialised coordinate. | | /** Construct an uninitialised coordinate. | |
| */ | | */ | |
|
| LatLongCoord() {} | | XAPIAN_NOTHROW(LatLongCoord()) {} | |
| | | | |
| /** Construct a coordinate. | | /** Construct a coordinate. | |
| * | | * | |
| * If the supplied longitude is out of the standard range, it will be | | * If the supplied longitude is out of the standard range, it will be | |
| * normalised to the range 0 <= longitude < 360. | | * normalised to the range 0 <= longitude < 360. | |
| * | | * | |
| * If you want to avoid the checks (for example, you know that your va
lues | | * If you want to avoid the checks (for example, you know that your va
lues | |
| * are already in range), you can use the alternate constructor to | | * are already in range), you can use the alternate constructor to | |
| * construct an uninitialised coordinate, and then set the latitude an
d | | * construct an uninitialised coordinate, and then set the latitude an
d | |
| * longitude directly. | | * longitude directly. | |
| | | | |
| skipping to change at line 136 | | skipping to change at line 147 | |
| * a valid serialised latitude-longitude pair. | | * a valid serialised latitude-longitude pair. | |
| */ | | */ | |
| void unserialise(const char ** ptr, const char * end); | | void unserialise(const char ** ptr, const char * end); | |
| | | | |
| /** Return a serialised representation of the coordinate. | | /** Return a serialised representation of the coordinate. | |
| */ | | */ | |
| std::string serialise() const; | | std::string serialise() const; | |
| | | | |
| /** Compare with another LatLongCoord. | | /** Compare with another LatLongCoord. | |
| */ | | */ | |
|
| bool operator<(const LatLongCoord & other) const | | bool XAPIAN_NOTHROW(operator<(const LatLongCoord & other) const) | |
| { | | { | |
| if (latitude < other.latitude) return true; | | if (latitude < other.latitude) return true; | |
| if (latitude > other.latitude) return false; | | if (latitude > other.latitude) return false; | |
| return (longitude < other.longitude); | | return (longitude < other.longitude); | |
| } | | } | |
| | | | |
| /// Return a string describing this object. | | /// Return a string describing this object. | |
| std::string get_description() const; | | std::string get_description() const; | |
| }; | | }; | |
| | | | |
| | | | |
End of changes. 7 change blocks. |
| 3 lines changed or deleted | | 15 lines changed or added | |
|
| matchspy.h | | matchspy.h | |
| /** @file matchspy.h | | /** @file matchspy.h | |
| * @brief MatchSpy implementation. | | * @brief MatchSpy implementation. | |
| */ | | */ | |
|
| /* Copyright (C) 2007,2008,2009,2010,2011,2012 Olly Betts | | /* Copyright (C) 2007,2008,2009,2010,2011,2012,2013 Olly Betts | |
| * Copyright (C) 2007,2009 Lemur Consulting Ltd | | * Copyright (C) 2007,2009 Lemur Consulting Ltd | |
| * Copyright (C) 2010 Richard Boulton | | * Copyright (C) 2010 Richard Boulton | |
| * | | * | |
| * This program is free software; you can redistribute it and/or modify | | * This program is free software; you can redistribute it and/or modify | |
| * it under the terms of the GNU General Public License as published by | | * it under the terms of the GNU General Public License as published by | |
| * the Free Software Foundation; either version 2 of the License, or | | * the Free Software Foundation; either version 2 of the License, or | |
| * (at your option) any later version. | | * (at your option) any later version. | |
| * | | * | |
| * This program is distributed in the hope that it will be useful, | | * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| | | | |
| skipping to change at line 26 | | skipping to change at line 26 | |
| * GNU General Public License for more details. | | * GNU General Public License for more details. | |
| * | | * | |
| * You should have received a copy of the GNU General Public License | | * You should have received a copy of the GNU General Public License | |
| * along with this program; if not, write to the Free Software | | * along with this program; if not, write to the Free Software | |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 US
A | | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 US
A | |
| */ | | */ | |
| | | | |
| #ifndef XAPIAN_INCLUDED_MATCHSPY_H | | #ifndef XAPIAN_INCLUDED_MATCHSPY_H | |
| #define XAPIAN_INCLUDED_MATCHSPY_H | | #define XAPIAN_INCLUDED_MATCHSPY_H | |
| | | | |
|
| | | #if !defined XAPIAN_INCLUDED_XAPIAN_H && !defined XAPIAN_LIB_BUILD | |
| | | # error "Never use <xapian/matchspy.h> directly; include <xapian.h> instead | |
| | | ." | |
| | | #endif | |
| | | | |
| | | #include <xapian/attributes.h> | |
| #include <xapian/intrusive_ptr.h> | | #include <xapian/intrusive_ptr.h> | |
| #include <xapian/termiterator.h> | | #include <xapian/termiterator.h> | |
| #include <xapian/visibility.h> | | #include <xapian/visibility.h> | |
| | | | |
| #include <string> | | #include <string> | |
| #include <map> | | #include <map> | |
| | | | |
| namespace Xapian { | | namespace Xapian { | |
| | | | |
| class Document; | | class Document; | |
| | | | |
| skipping to change at line 54 | | skipping to change at line 59 | |
| class XAPIAN_VISIBILITY_DEFAULT MatchSpy { | | class XAPIAN_VISIBILITY_DEFAULT MatchSpy { | |
| private: | | private: | |
| /// Don't allow assignment. | | /// Don't allow assignment. | |
| void operator=(const MatchSpy &); | | void operator=(const MatchSpy &); | |
| | | | |
| /// Don't allow copying. | | /// Don't allow copying. | |
| MatchSpy(const MatchSpy &); | | MatchSpy(const MatchSpy &); | |
| | | | |
| protected: | | protected: | |
| /// Default constructor, needed by subclass constructors. | | /// Default constructor, needed by subclass constructors. | |
|
| MatchSpy() {} | | XAPIAN_NOTHROW(MatchSpy()) {} | |
| | | | |
| public: | | public: | |
| /** Virtual destructor, because we have virtual methods. */ | | /** Virtual destructor, because we have virtual methods. */ | |
| virtual ~MatchSpy(); | | virtual ~MatchSpy(); | |
| | | | |
| /** Register a document with the match spy. | | /** Register a document with the match spy. | |
| * | | * | |
| * This is called by the matcher once with each document seen by the | | * This is called by the matcher once with each document seen by the | |
| * matcher during the match process. Note that the matcher will often
not | | * matcher during the match process. Note that the matcher will often
not | |
| * see all the documents which match the query, due to optimisations w
hich | | * see all the documents which match the query, due to optimisations w
hich | |
| | | | |
| skipping to change at line 209 | | skipping to change at line 214 | |
| | | | |
| public: | | public: | |
| /// Construct an empty ValueCountMatchSpy. | | /// Construct an empty ValueCountMatchSpy. | |
| ValueCountMatchSpy() : internal() {} | | ValueCountMatchSpy() : internal() {} | |
| | | | |
| /// Construct a MatchSpy which counts the values in a particular slot. | | /// Construct a MatchSpy which counts the values in a particular slot. | |
| ValueCountMatchSpy(Xapian::valueno slot_) | | ValueCountMatchSpy(Xapian::valueno slot_) | |
| : internal(new Internal(slot_)) {} | | : internal(new Internal(slot_)) {} | |
| | | | |
| /** Return the total number of documents tallied. */ | | /** Return the total number of documents tallied. */ | |
|
| size_t get_total() const { | | size_t XAPIAN_NOTHROW(get_total() const) { | |
| return internal->total; | | return internal->total; | |
| } | | } | |
| | | | |
| /** Get an iterator over the values seen in the slot. | | /** Get an iterator over the values seen in the slot. | |
| * | | * | |
| * Items will be returned in ascending alphabetical order. | | * Items will be returned in ascending alphabetical order. | |
| * | | * | |
| * During the iteration, the frequency of the current value can be | | * During the iteration, the frequency of the current value can be | |
| * obtained with the get_termfreq() method on the iterator. | | * obtained with the get_termfreq() method on the iterator. | |
| */ | | */ | |
| TermIterator values_begin() const; | | TermIterator values_begin() const; | |
| | | | |
| /** End iterator corresponding to values_begin() */ | | /** End iterator corresponding to values_begin() */ | |
|
| TermIterator values_end() const { | | TermIterator XAPIAN_NOTHROW(values_end() const) { | |
| return TermIterator(); | | return TermIterator(); | |
| } | | } | |
| | | | |
| /** Get an iterator over the most frequent values seen in the slot. | | /** Get an iterator over the most frequent values seen in the slot. | |
| * | | * | |
| * Items will be returned in descending order of frequency. Values wi
th | | * Items will be returned in descending order of frequency. Values wi
th | |
| * the same frequency will be returned in ascending alphabetical order
. | | * the same frequency will be returned in ascending alphabetical order
. | |
| * | | * | |
| * During the iteration, the frequency of the current value can be | | * During the iteration, the frequency of the current value can be | |
| * obtained with the get_termfreq() method on the iterator. | | * obtained with the get_termfreq() method on the iterator. | |
| * | | * | |
| * @param maxvalues The maximum number of values to return. | | * @param maxvalues The maximum number of values to return. | |
| */ | | */ | |
| TermIterator top_values_begin(size_t maxvalues) const; | | TermIterator top_values_begin(size_t maxvalues) const; | |
| | | | |
| /** End iterator corresponding to top_values_begin() */ | | /** End iterator corresponding to top_values_begin() */ | |
|
| TermIterator top_values_end(size_t) const { | | TermIterator XAPIAN_NOTHROW(top_values_end(size_t) const) { | |
| return TermIterator(); | | return TermIterator(); | |
| } | | } | |
| | | | |
| /** Implementation of virtual operator(). | | /** Implementation of virtual operator(). | |
| * | | * | |
| * This implementation tallies values for a matching document. | | * This implementation tallies values for a matching document. | |
| * | | * | |
| * @param doc The document to tally values for. | | * @param doc The document to tally values for. | |
| * @param wt The weight of the document (ignored by this class). | | * @param wt The weight of the document (ignored by this class). | |
| */ | | */ | |
| | | | |
End of changes. 6 change blocks. |
| 5 lines changed or deleted | | 11 lines changed or added | |
|
| positioniterator.h | | positioniterator.h | |
| /** @file positioniterator.h | | /** @file positioniterator.h | |
| * @brief Class for iterating over term positions. | | * @brief Class for iterating over term positions. | |
| */ | | */ | |
|
| /* Copyright (C) 2008,2009,2010,2011 Olly Betts | | /* Copyright (C) 2008,2009,2010,2011,2012,2013 Olly Betts | |
| * | | * | |
| * This program is free software; you can redistribute it and/or | | * This program is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU General Public License as | | * modify it under the terms of the GNU General Public License as | |
| * published by the Free Software Foundation; either version 2 of the | | * published by the Free Software Foundation; either version 2 of the | |
| * License, or (at your option) any later version. | | * License, or (at your option) any later version. | |
| * | | * | |
| * This program is distributed in the hope that it will be useful, | | * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| * GNU General Public License for more details. | | * GNU General Public License for more details. | |
| * | | * | |
| * You should have received a copy of the GNU General Public License | | * You should have received a copy of the GNU General Public License | |
| * along with this program; if not, write to the Free Software | | * along with this program; if not, write to the Free Software | |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 | | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 | |
| * USA | | * USA | |
| */ | | */ | |
| | | | |
| #ifndef XAPIAN_INCLUDED_POSITIONITERATOR_H | | #ifndef XAPIAN_INCLUDED_POSITIONITERATOR_H | |
| #define XAPIAN_INCLUDED_POSITIONITERATOR_H | | #define XAPIAN_INCLUDED_POSITIONITERATOR_H | |
| | | | |
|
| | | #if !defined XAPIAN_INCLUDED_XAPIAN_H && !defined XAPIAN_LIB_BUILD | |
| | | # error "Never use <xapian/positioniterator.h> directly; include <xapian.h> | |
| | | instead." | |
| | | #endif | |
| | | | |
| #include <iterator> | | #include <iterator> | |
| #include <string> | | #include <string> | |
| | | | |
|
| | | #include <xapian/attributes.h> | |
| #include <xapian/derefwrapper.h> | | #include <xapian/derefwrapper.h> | |
| #include <xapian/types.h> | | #include <xapian/types.h> | |
| #include <xapian/visibility.h> | | #include <xapian/visibility.h> | |
| | | | |
| namespace Xapian { | | namespace Xapian { | |
| | | | |
| /// Class for iterating over term positions. | | /// Class for iterating over term positions. | |
| class XAPIAN_VISIBILITY_DEFAULT PositionIterator { | | class XAPIAN_VISIBILITY_DEFAULT PositionIterator { | |
| void decref(); | | void decref(); | |
| | | | |
| | | | |
| skipping to change at line 58 | | skipping to change at line 63 | |
| PositionIterator(const PositionIterator & o); | | PositionIterator(const PositionIterator & o); | |
| | | | |
| /// Assignment. | | /// Assignment. | |
| PositionIterator & operator=(const PositionIterator & o); | | PositionIterator & operator=(const PositionIterator & o); | |
| | | | |
| /** Default constructor. | | /** Default constructor. | |
| * | | * | |
| * Creates an uninitialised iterator, which can't be used before being | | * Creates an uninitialised iterator, which can't be used before being | |
| * assigned to, but is sometimes syntactically convenient. | | * assigned to, but is sometimes syntactically convenient. | |
| */ | | */ | |
|
| PositionIterator() : internal(0) { } | | XAPIAN_NOTHROW(PositionIterator()) | |
| | | : internal(0) { } | |
| | | | |
| /// Destructor. | | /// Destructor. | |
| ~PositionIterator() { | | ~PositionIterator() { | |
| if (internal) decref(); | | if (internal) decref(); | |
| } | | } | |
| | | | |
| /// Return the term position at the current iterator position. | | /// Return the term position at the current iterator position. | |
| Xapian::termpos operator*() const; | | Xapian::termpos operator*() const; | |
| | | | |
| /// Advance the iterator to the next position. | | /// Advance the iterator to the next position. | |
| | | | |
| skipping to change at line 113 | | skipping to change at line 119 | |
| typedef Xapian::termpos value_type; | | typedef Xapian::termpos value_type; | |
| /// @private | | /// @private | |
| typedef Xapian::termpos_diff difference_type; | | typedef Xapian::termpos_diff difference_type; | |
| /// @private | | /// @private | |
| typedef Xapian::termpos * pointer; | | typedef Xapian::termpos * pointer; | |
| /// @private | | /// @private | |
| typedef Xapian::termpos & reference; | | typedef Xapian::termpos & reference; | |
| // @} | | // @} | |
| }; | | }; | |
| | | | |
|
| | | bool | |
| | | XAPIAN_NOTHROW(operator==(const PositionIterator &a, const PositionIterator | |
| | | &b)); | |
| | | | |
| /// Equality test for PositionIterator objects. | | /// Equality test for PositionIterator objects. | |
| inline bool | | inline bool | |
| operator==(const PositionIterator &a, const PositionIterator &b) | | operator==(const PositionIterator &a, const PositionIterator &b) | |
| { | | { | |
| // Use a pointer comparison - this ensures both that (a == a) and corre
ct | | // Use a pointer comparison - this ensures both that (a == a) and corre
ct | |
| // handling of end iterators (which we ensure have NULL internals). | | // handling of end iterators (which we ensure have NULL internals). | |
| return a.internal == b.internal; | | return a.internal == b.internal; | |
| } | | } | |
| | | | |
|
| | | bool | |
| | | XAPIAN_NOTHROW(operator!=(const PositionIterator &a, const PositionIterator | |
| | | &b)); | |
| | | | |
| /// Inequality test for PositionIterator objects. | | /// Inequality test for PositionIterator objects. | |
| inline bool | | inline bool | |
| operator!=(const PositionIterator &a, const PositionIterator &b) | | operator!=(const PositionIterator &a, const PositionIterator &b) | |
| { | | { | |
| return !(a == b); | | return !(a == b); | |
| } | | } | |
| | | | |
| } | | } | |
| | | | |
| #endif // XAPIAN_INCLUDED_POSITIONITERATOR_H | | #endif // XAPIAN_INCLUDED_POSITIONITERATOR_H | |
| | | | |
End of changes. 6 change blocks. |
| 2 lines changed or deleted | | 17 lines changed or added | |
|
| postingiterator.h | | postingiterator.h | |
| /** @file postingiterator.h | | /** @file postingiterator.h | |
| * @brief Class for iterating over a list of document ids | | * @brief Class for iterating over a list of document ids | |
| */ | | */ | |
|
| /* Copyright (C) 2007,2008,2009,2010,2011 Olly Betts | | /* Copyright (C) 2007,2008,2009,2010,2011,2012,2013 Olly Betts | |
| * | | * | |
| * This program is free software; you can redistribute it and/or | | * This program is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU General Public License as | | * modify it under the terms of the GNU General Public License as | |
| * published by the Free Software Foundation; either version 2 of the | | * published by the Free Software Foundation; either version 2 of the | |
| * License, or (at your option) any later version. | | * License, or (at your option) any later version. | |
| * | | * | |
| * This program is distributed in the hope that it will be useful, | | * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| * GNU General Public License for more details. | | * GNU General Public License for more details. | |
| * | | * | |
| * You should have received a copy of the GNU General Public License | | * You should have received a copy of the GNU General Public License | |
| * along with this program; if not, write to the Free Software | | * along with this program; if not, write to the Free Software | |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 | | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 | |
| * USA | | * USA | |
| */ | | */ | |
| | | | |
| #ifndef XAPIAN_INCLUDED_POSTINGITERATOR_H | | #ifndef XAPIAN_INCLUDED_POSTINGITERATOR_H | |
| #define XAPIAN_INCLUDED_POSTINGITERATOR_H | | #define XAPIAN_INCLUDED_POSTINGITERATOR_H | |
| | | | |
|
| | | #if !defined XAPIAN_INCLUDED_XAPIAN_H && !defined XAPIAN_LIB_BUILD | |
| | | # error "Never use <xapian/postingiterator.h> directly; include <xapian.h> | |
| | | instead." | |
| | | #endif | |
| | | | |
| #include <iterator> | | #include <iterator> | |
| #include <string> | | #include <string> | |
| | | | |
|
| | | #include <xapian/attributes.h> | |
| #include <xapian/derefwrapper.h> | | #include <xapian/derefwrapper.h> | |
| #include <xapian/positioniterator.h> | | #include <xapian/positioniterator.h> | |
| #include <xapian/types.h> | | #include <xapian/types.h> | |
| #include <xapian/visibility.h> | | #include <xapian/visibility.h> | |
| | | | |
| namespace Xapian { | | namespace Xapian { | |
| | | | |
| /// Class for iterating over a list of terms. | | /// Class for iterating over a list of terms. | |
| class XAPIAN_VISIBILITY_DEFAULT PostingIterator { | | class XAPIAN_VISIBILITY_DEFAULT PostingIterator { | |
| public: | | public: | |
| | | | |
| skipping to change at line 57 | | skipping to change at line 62 | |
| PostingIterator(const PostingIterator & o); | | PostingIterator(const PostingIterator & o); | |
| | | | |
| /// Assignment. | | /// Assignment. | |
| PostingIterator & operator=(const PostingIterator & o); | | PostingIterator & operator=(const PostingIterator & o); | |
| | | | |
| /** Default constructor. | | /** Default constructor. | |
| * | | * | |
| * Creates an uninitialised iterator, which can't be used before being | | * Creates an uninitialised iterator, which can't be used before being | |
| * assigned to, but is sometimes syntactically convenient. | | * assigned to, but is sometimes syntactically convenient. | |
| */ | | */ | |
|
| PostingIterator() : internal(0) { } | | XAPIAN_NOTHROW(PostingIterator()) | |
| | | : internal(0) { } | |
| | | | |
| /// Destructor. | | /// Destructor. | |
| ~PostingIterator() { | | ~PostingIterator() { | |
| if (internal) decref(); | | if (internal) decref(); | |
| } | | } | |
| | | | |
| /// Return the document id at the current position. | | /// Return the document id at the current position. | |
| Xapian::docid operator*() const; | | Xapian::docid operator*() const; | |
| | | | |
| /// Return the wdf for the document at the current position. | | /// Return the wdf for the document at the current position. | |
| | | | |
| skipping to change at line 82 | | skipping to change at line 88 | |
| | | | |
| #if 0 // FIXME: TermIterator supports this, so PostingIterator really ought
to. | | #if 0 // FIXME: TermIterator supports this, so PostingIterator really ought
to. | |
| /// Return the length of the position list for the current position. | | /// Return the length of the position list for the current position. | |
| Xapian::termcount positionlist_count() const; | | Xapian::termcount positionlist_count() const; | |
| #endif | | #endif | |
| | | | |
| /// Return a PositionIterator for the current document. | | /// Return a PositionIterator for the current document. | |
| PositionIterator positionlist_begin() const; | | PositionIterator positionlist_begin() const; | |
| | | | |
| /// Return an end PositionIterator for the current document. | | /// Return an end PositionIterator for the current document. | |
|
| PositionIterator positionlist_end() const { | | PositionIterator XAPIAN_NOTHROW(positionlist_end() const) { | |
| return PositionIterator(); | | return PositionIterator(); | |
| } | | } | |
| | | | |
| /// Advance the iterator to the next position. | | /// Advance the iterator to the next position. | |
| PostingIterator & operator++(); | | PostingIterator & operator++(); | |
| | | | |
| /// Advance the iterator to the next position (postfix version). | | /// Advance the iterator to the next position (postfix version). | |
| DerefWrapper_<Xapian::docid> operator++(int) { | | DerefWrapper_<Xapian::docid> operator++(int) { | |
| Xapian::docid did(**this); | | Xapian::docid did(**this); | |
| operator++(); | | operator++(); | |
| | | | |
| skipping to change at line 136 | | skipping to change at line 142 | |
| /// @private | | /// @private | |
| typedef Xapian::docid & reference; | | typedef Xapian::docid & reference; | |
| // @} | | // @} | |
| | | | |
| private: | | private: | |
| void decref(); | | void decref(); | |
| | | | |
| void post_advance(Internal * res); | | void post_advance(Internal * res); | |
| }; | | }; | |
| | | | |
|
| | | bool | |
| | | XAPIAN_NOTHROW(operator==(const PostingIterator &a, const PostingIterator & | |
| | | b)); | |
| | | | |
| /// Equality test for PostingIterator objects. | | /// Equality test for PostingIterator objects. | |
| inline bool | | inline bool | |
| operator==(const PostingIterator &a, const PostingIterator &b) | | operator==(const PostingIterator &a, const PostingIterator &b) | |
| { | | { | |
| // Use a pointer comparison - this ensures both that (a == a) and corre
ct | | // Use a pointer comparison - this ensures both that (a == a) and corre
ct | |
| // handling of end iterators (which we ensure have NULL internals). | | // handling of end iterators (which we ensure have NULL internals). | |
| return a.internal == b.internal; | | return a.internal == b.internal; | |
| } | | } | |
| | | | |
|
| | | inline bool | |
| | | XAPIAN_NOTHROW(operator!=(const PostingIterator &a, const PostingIterator & | |
| | | b)); | |
| | | | |
| /// Inequality test for PostingIterator objects. | | /// Inequality test for PostingIterator objects. | |
| inline bool | | inline bool | |
| operator!=(const PostingIterator &a, const PostingIterator &b) | | operator!=(const PostingIterator &a, const PostingIterator &b) | |
| { | | { | |
| return !(a == b); | | return !(a == b); | |
| } | | } | |
| | | | |
| } | | } | |
| | | | |
| #endif // XAPIAN_INCLUDED_POSTINGITERATOR_H | | #endif // XAPIAN_INCLUDED_POSTINGITERATOR_H | |
| | | | |
End of changes. 7 change blocks. |
| 3 lines changed or deleted | | 18 lines changed or added | |
|
| postingsource.h | | postingsource.h | |
| /** @file postingsource.h | | /** @file postingsource.h | |
| * @brief External sources of posting information | | * @brief External sources of posting information | |
| */ | | */ | |
|
| /* Copyright (C) 2007,2008,2009,2010,2011,2012 Olly Betts | | /* Copyright (C) 2007,2008,2009,2010,2011,2012,2013 Olly Betts | |
| * Copyright (C) 2008,2009 Lemur Consulting Ltd | | * Copyright (C) 2008,2009 Lemur Consulting Ltd | |
| * | | * | |
| * This program is free software; you can redistribute it and/or modify | | * This program is free software; you can redistribute it and/or modify | |
| * it under the terms of the GNU General Public License as published by | | * it under the terms of the GNU General Public License as published by | |
| * the Free Software Foundation; either version 2 of the License, or | | * the Free Software Foundation; either version 2 of the License, or | |
| * (at your option) any later version. | | * (at your option) any later version. | |
| * | | * | |
| * This program is distributed in the hope that it will be useful, | | * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| * GNU General Public License for more details. | | * GNU General Public License for more details. | |
| * | | * | |
| * You should have received a copy of the GNU General Public License | | * You should have received a copy of the GNU General Public License | |
| * along with this program; if not, write to the Free Software | | * along with this program; if not, write to the Free Software | |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 US
A | | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 US
A | |
| */ | | */ | |
| | | | |
| #ifndef XAPIAN_INCLUDED_POSTINGSOURCE_H | | #ifndef XAPIAN_INCLUDED_POSTINGSOURCE_H | |
| #define XAPIAN_INCLUDED_POSTINGSOURCE_H | | #define XAPIAN_INCLUDED_POSTINGSOURCE_H | |
| | | | |
|
| | | #if !defined XAPIAN_INCLUDED_XAPIAN_H && !defined XAPIAN_LIB_BUILD | |
| | | # error "Never use <xapian/postingsource.h> directly; include <xapian.h> in | |
| | | stead." | |
| | | #endif | |
| | | | |
| | | #include <xapian/attributes.h> | |
| #include <xapian/database.h> | | #include <xapian/database.h> | |
| #include <xapian/types.h> | | #include <xapian/types.h> | |
| #include <xapian/visibility.h> | | #include <xapian/visibility.h> | |
| | | | |
| #include <string> | | #include <string> | |
| #include <map> | | #include <map> | |
| | | | |
| namespace Xapian { | | namespace Xapian { | |
| | | | |
| class Registry; | | class Registry; | |
| | | | |
| skipping to change at line 57 | | skipping to change at line 62 | |
| | | | |
| /** The object to inform of maxweight changes. | | /** The object to inform of maxweight changes. | |
| * | | * | |
| * We store this as a (void*) to avoid needing to declare an internal | | * We store this as a (void*) to avoid needing to declare an internal | |
| * type in an external header. It's actually (MultiMatch *). | | * type in an external header. It's actually (MultiMatch *). | |
| */ | | */ | |
| void * matcher_; | | void * matcher_; | |
| | | | |
| protected: | | protected: | |
| /// Allow subclasses to be instantiated. | | /// Allow subclasses to be instantiated. | |
|
| PostingSource() : max_weight_(0), matcher_(NULL) { } | | XAPIAN_NOTHROW(PostingSource()) | |
| | | : max_weight_(0), matcher_(NULL) { } | |
| | | | |
| /** Set an upper bound on what get_weight() can return from now on. | | /** Set an upper bound on what get_weight() can return from now on. | |
| * | | * | |
| * This upper bound is used by the matcher to perform various | | * This upper bound is used by the matcher to perform various | |
| * optimisations, so if you can return a good bound, then matches | | * optimisations, so if you can return a good bound, then matches | |
| * will generally run faster. | | * will generally run faster. | |
| * | | * | |
| * This method should be called after calling init(), and may be calle
d | | * This method should be called after calling init(), and may be calle
d | |
| * during iteration if the upper bound drops. | | * during iteration if the upper bound drops. | |
| * | | * | |
| | | | |
| skipping to change at line 98 | | skipping to change at line 104 | |
| void register_matcher_(void * matcher) { matcher_ = matcher; } | | void register_matcher_(void * matcher) { matcher_ = matcher; } | |
| | | | |
| // Destructor. | | // Destructor. | |
| virtual ~PostingSource(); | | virtual ~PostingSource(); | |
| | | | |
| /** A lower bound on the number of documents this object can return. | | /** A lower bound on the number of documents this object can return. | |
| * | | * | |
| * Xapian will always call init() on a PostingSource before calling th
is | | * Xapian will always call init() on a PostingSource before calling th
is | |
| * for the first time. | | * for the first time. | |
| */ | | */ | |
|
| virtual Xapian::doccount get_termfreq_min() const = 0; | | virtual Xapian::doccount get_termfreq_min() const XAPIAN_PURE_FUNCTION
= 0; | |
| | | | |
| /** An estimate of the number of documents this object can return. | | /** An estimate of the number of documents this object can return. | |
| * | | * | |
| * It must always be true that: | | * It must always be true that: | |
| * | | * | |
| * get_termfreq_min() <= get_termfreq_est() <= get_termfreq_max() | | * get_termfreq_min() <= get_termfreq_est() <= get_termfreq_max() | |
| * | | * | |
| * Xapian will always call init() on a PostingSource before calling th
is | | * Xapian will always call init() on a PostingSource before calling th
is | |
| * for the first time. | | * for the first time. | |
| */ | | */ | |
|
| virtual Xapian::doccount get_termfreq_est() const = 0; | | virtual Xapian::doccount get_termfreq_est() const XAPIAN_PURE_FUNCTION
= 0; | |
| | | | |
| /** An upper bound on the number of documents this object can return. | | /** An upper bound on the number of documents this object can return. | |
| * | | * | |
| * Xapian will always call init() on a PostingSource before calling th
is | | * Xapian will always call init() on a PostingSource before calling th
is | |
| * for the first time. | | * for the first time. | |
| */ | | */ | |
|
| virtual Xapian::doccount get_termfreq_max() const = 0; | | virtual Xapian::doccount get_termfreq_max() const XAPIAN_PURE_FUNCTION
= 0; | |
| | | | |
| /// Return the currently set upper bound on what get_weight() can retur
n. | | /// Return the currently set upper bound on what get_weight() can retur
n. | |
|
| double get_maxweight() const { return max_weight_; } | | double XAPIAN_NOTHROW(get_maxweight() const) { return max_weight_; } | |
| | | | |
| /** Return the weight contribution for the current document. | | /** Return the weight contribution for the current document. | |
| * | | * | |
| * This default implementation always returns 0, for convenience when | | * This default implementation always returns 0, for convenience when | |
| * implementing "weight-less" PostingSource subclasses. | | * implementing "weight-less" PostingSource subclasses. | |
| * | | * | |
| * This method may assume that it will only be called when there is a | | * This method may assume that it will only be called when there is a | |
| * "current document". In detail: Xapian will always call init() on a | | * "current document". In detail: Xapian will always call init() on a | |
| * PostingSource before calling this for the first time. It will also | | * PostingSource before calling this for the first time. It will also | |
| * only call this if the PostingSource reports that it is pointing to
a | | * only call this if the PostingSource reports that it is pointing to
a | |
| * valid document (ie, it will not call it before calling at least one
of | | * valid document (ie, it will not call it before calling at least one
of | |
| * next(), skip_to() or check(), and will ensure that the PostingSourc
e is | | * next(), skip_to() or check(), and will ensure that the PostingSourc
e is | |
| * not at the end by calling at_end()). | | * not at the end by calling at_end()). | |
| */ | | */ | |
|
| virtual double get_weight() const; | | virtual double get_weight() const XAPIAN_PURE_FUNCTION; | |
| | | | |
| /** Return the current docid. | | /** Return the current docid. | |
| * | | * | |
| * This method may assume that it will only be called when there is a | | * This method may assume that it will only be called when there is a | |
| * "current document". See @a get_weight() for details. | | * "current document". See @a get_weight() for details. | |
| * | | * | |
| * Note: in the case of a multi-database search, the returned docid sh
ould | | * Note: in the case of a multi-database search, the returned docid sh
ould | |
| * be in the single subdatabase relevant to this posting source. See
the | | * be in the single subdatabase relevant to this posting source. See
the | |
| * @a init() method for details. | | * @a init() method for details. | |
| */ | | */ | |
|
| virtual Xapian::docid get_docid() const = 0; | | virtual Xapian::docid get_docid() const XAPIAN_PURE_FUNCTION = 0; | |
| | | | |
| /** Advance the current position to the next matching document. | | /** Advance the current position to the next matching document. | |
| * | | * | |
| * The PostingSource starts before the first entry in the list, so nex
t() | | * The PostingSource starts before the first entry in the list, so nex
t() | |
| * must be called before any methods which need the context of | | * must be called before any methods which need the context of | |
| * the current position. | | * the current position. | |
| * | | * | |
| * Xapian will always call init() on a PostingSource before calling th
is | | * Xapian will always call init() on a PostingSource before calling th
is | |
| * for the first time. | | * for the first time. | |
| * | | * | |
| | | | |
| skipping to change at line 232 | | skipping to change at line 238 | |
| * @param min_wt The minimum weight contribution that is needed (this
is | | * @param min_wt The minimum weight contribution that is needed (this
is | |
| * just a hint which subclasses may ignore). | | * just a hint which subclasses may ignore). | |
| */ | | */ | |
| virtual bool check(Xapian::docid did, double min_wt); | | virtual bool check(Xapian::docid did, double min_wt); | |
| | | | |
| /** Return true if the current position is past the last entry in this
list. | | /** Return true if the current position is past the last entry in this
list. | |
| * | | * | |
| * At least one of @a next(), @a skip_to() or @a check() will be calle
d | | * At least one of @a next(), @a skip_to() or @a check() will be calle
d | |
| * before this method is first called. | | * before this method is first called. | |
| */ | | */ | |
|
| virtual bool at_end() const = 0; | | virtual bool at_end() const XAPIAN_PURE_FUNCTION = 0; | |
| | | | |
| /** Clone the posting source. | | /** Clone the posting source. | |
| * | | * | |
| * The clone should inherit the configuration of the parent, but need
not | | * The clone should inherit the configuration of the parent, but need
not | |
| * inherit the state. ie, the clone does not need to be in the same | | * inherit the state. ie, the clone does not need to be in the same | |
| * iteration position as the original: the matcher will always call | | * iteration position as the original: the matcher will always call | |
| * init() on the clone before attempting to move the iterator, or read | | * init() on the clone before attempting to move the iterator, or read | |
| * the information about the current position of the iterator. | | * the information about the current position of the iterator. | |
| * | | * | |
| * This may return NULL to indicate that cloning is not supported. In | | * This may return NULL to indicate that cloning is not supported. In | |
| | | | |
End of changes. 10 change blocks. |
| 9 lines changed or deleted | | 16 lines changed or added | |
|
| query.h | | query.h | |
| /** @file query.h | | /** @file query.h | |
| * @brief Xapian::Query API class | | * @brief Xapian::Query API class | |
| */ | | */ | |
|
| /* Copyright (C) 2011,2012 Olly Betts | | /* Copyright (C) 2011,2012,2013 Olly Betts | |
| * Copyright (C) 2008 Richard Boulton | | * Copyright (C) 2008 Richard Boulton | |
| * | | * | |
| * This program is free software; you can redistribute it and/or | | * This program is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU General Public License as | | * modify it under the terms of the GNU General Public License as | |
| * published by the Free Software Foundation; either version 2 of the | | * published by the Free Software Foundation; either version 2 of the | |
| * License, or (at your option) any later version. | | * License, or (at your option) any later version. | |
| * | | * | |
| * This program is distributed in the hope that it will be useful, | | * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| * GNU General Public License for more details. | | * GNU General Public License for more details. | |
| * | | * | |
| * You should have received a copy of the GNU General Public License | | * You should have received a copy of the GNU General Public License | |
| * along with this program; if not, write to the Free Software | | * along with this program; if not, write to the Free Software | |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 US
A | | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 US
A | |
| */ | | */ | |
| | | | |
| #ifndef XAPIAN_INCLUDED_QUERY_H | | #ifndef XAPIAN_INCLUDED_QUERY_H | |
| #define XAPIAN_INCLUDED_QUERY_H | | #define XAPIAN_INCLUDED_QUERY_H | |
| | | | |
|
| | | #if !defined XAPIAN_INCLUDED_XAPIAN_H && !defined XAPIAN_LIB_BUILD | |
| | | # error "Never use <xapian/query.h> directly; include <xapian.h> instead." | |
| | | #endif | |
| | | | |
| #include <string> | | #include <string> | |
|
| #include <vector> | | | |
| | | | |
|
| | | #include <xapian/attributes.h> | |
| #include <xapian/intrusive_ptr.h> | | #include <xapian/intrusive_ptr.h> | |
| #include <xapian/postingiterator.h> | | #include <xapian/postingiterator.h> | |
| #include <xapian/registry.h> | | #include <xapian/registry.h> | |
| #include <xapian/termiterator.h> | | #include <xapian/termiterator.h> | |
| #include <xapian/types.h> | | #include <xapian/types.h> | |
| #include <xapian/visibility.h> | | #include <xapian/visibility.h> | |
| | | | |
| class QueryOptimiser; // FIXME | | class QueryOptimiser; // FIXME | |
| | | | |
| namespace Xapian { | | namespace Xapian { | |
| | | | |
| skipping to change at line 110 | | skipping to change at line 114 | |
| * If the number of subqueries is less than this threshold, | | * If the number of subqueries is less than this threshold, | |
| * OP_ELITE_SET behaves identically to OP_OR. | | * OP_ELITE_SET behaves identically to OP_OR. | |
| */ | | */ | |
| OP_ELITE_SET = 10, | | OP_ELITE_SET = 10, | |
| OP_VALUE_GE = 11, | | OP_VALUE_GE = 11, | |
| OP_VALUE_LE = 12, | | OP_VALUE_LE = 12, | |
| OP_SYNONYM = 13 | | OP_SYNONYM = 13 | |
| }; | | }; | |
| | | | |
| /// Default constructor. | | /// Default constructor. | |
|
| Query() : internal(0) { } | | XAPIAN_NOTHROW(Query()) | |
| | | : internal(0) { } | |
| | | | |
| /// Destructor. | | /// Destructor. | |
| ~Query() { } | | ~Query() { } | |
| | | | |
| /** Copying is allowed. | | /** Copying is allowed. | |
| * | | * | |
| * The internals are reference counted, so copying is cheap. | | * The internals are reference counted, so copying is cheap. | |
| */ | | */ | |
| Query(const Query & o) : internal(o.internal) { } | | Query(const Query & o) : internal(o.internal) { } | |
| | | | |
| | | | |
| skipping to change at line 184 | | skipping to change at line 189 | |
| } | | } | |
| } | | } | |
| done(); | | done(); | |
| } | | } | |
| | | | |
| #ifdef SWIG | | #ifdef SWIG | |
| // SWIG's %template doesn't seem to handle a templated ctor so we | | // SWIG's %template doesn't seem to handle a templated ctor so we | |
| // provide this fake specialised form of the above prototype. | | // provide this fake specialised form of the above prototype. | |
| Query::Query(op op_, XapianSWIGQueryItor qbegin, XapianSWIGQueryItor qe
nd, | | Query::Query(op op_, XapianSWIGQueryItor qbegin, XapianSWIGQueryItor qe
nd, | |
| Xapian::termcount parameter = 0); | | Xapian::termcount parameter = 0); | |
|
| | | | |
| | | # ifdef SWIGJAVA | |
| | | Query::Query(op op_, XapianSWIGStrItor qbegin, XapianSWIGStrItor qend, | |
| | | Xapian::termcount parameter = 0); | |
| | | # endif | |
| #endif | | #endif | |
| | | | |
| const TermIterator get_terms_begin() const; | | const TermIterator get_terms_begin() const; | |
| | | | |
|
| const TermIterator get_terms_end() const { return TermIterator(); } | | const TermIterator XAPIAN_NOTHROW(get_terms_end() const) { | |
| | | return TermIterator(); | |
| | | } | |
| | | | |
|
| Xapian::termcount get_length() const; | | Xapian::termcount get_length() const XAPIAN_PURE_FUNCTION; | |
| | | | |
|
| bool empty() const { return internal.get() == 0; } | | bool XAPIAN_NOTHROW(empty() const) XAPIAN_PURE_FUNCTION { | |
| | | return internal.get() == 0; | |
| | | } | |
| | | | |
| std::string serialise() const; | | std::string serialise() const; | |
| | | | |
| static const Query unserialise(const std::string & s, | | static const Query unserialise(const std::string & s, | |
| const Registry & reg = Registry()); | | const Registry & reg = Registry()); | |
| | | | |
|
| std::string get_description() const; | | std::string get_description() const XAPIAN_PURE_FUNCTION; | |
| | | | |
| const Query operator&=(const Query & o) { | | const Query operator&=(const Query & o) { | |
| return (*this = Query(OP_AND, *this, o)); | | return (*this = Query(OP_AND, *this, o)); | |
| } | | } | |
| | | | |
| const Query operator|=(const Query & o) { | | const Query operator|=(const Query & o) { | |
| return (*this = Query(OP_OR, *this, o)); | | return (*this = Query(OP_OR, *this, o)); | |
| } | | } | |
| | | | |
| const Query operator^=(const Query & o) { | | const Query operator^=(const Query & o) { | |
| | | | |
| skipping to change at line 221 | | skipping to change at line 235 | |
| } | | } | |
| | | | |
| const Query operator*=(double factor) { | | const Query operator*=(double factor) { | |
| return (*this = Query(factor, *this)); | | return (*this = Query(factor, *this)); | |
| } | | } | |
| | | | |
| const Query operator/=(double factor) { | | const Query operator/=(double factor) { | |
| return (*this = Query(1.0 / factor, *this)); | | return (*this = Query(1.0 / factor, *this)); | |
| } | | } | |
| | | | |
|
| private: | | /** @private @internal | |
| // Pass a reference to avoid ambiguity for Query(NULL) (not useful, but | | * | |
| the | | * Pass a reference to avoid ambiguity for Query(NULL) (not useful, bu | |
| // testsuite does it...) FIXME | | t the | |
| Query(Query::Internal & internal_) : internal(&internal_) { } | | * testsuite does it...) FIXME | |
| | | */ | |
| | | Query(Internal & internal_) : internal(&internal_) { } | |
| | | | |
|
| | | private: | |
| void init(Query::op op_, size_t n_subqueries, Xapian::termcount window
= 0); | | void init(Query::op op_, size_t n_subqueries, Xapian::termcount window
= 0); | |
| | | | |
| template<typename I> | | template<typename I> | |
| void init(Query::op op_, Xapian::termcount window, | | void init(Query::op op_, Xapian::termcount window, | |
| const I & begin, const I & end, std::random_access_iterator_ta
g) | | const I & begin, const I & end, std::random_access_iterator_ta
g) | |
| { | | { | |
| init(op_, end - begin, window); | | init(op_, end - begin, window); | |
| } | | } | |
| | | | |
| template<typename I> | | template<typename I> | |
| | | | |
| skipping to change at line 332 | | skipping to change at line 349 | |
| } | | } | |
| | | | |
| namespace Internal { | | namespace Internal { | |
| class AndContext; | | class AndContext; | |
| class OrContext; | | class OrContext; | |
| class XorContext; | | class XorContext; | |
| } | | } | |
| | | | |
| class Query::Internal : public Xapian::Internal::intrusive_base { | | class Query::Internal : public Xapian::Internal::intrusive_base { | |
| public: | | public: | |
|
| Internal() { } | | XAPIAN_NOTHROW(Internal()) { } | |
| | | | |
| virtual ~Internal(); | | virtual ~Internal(); | |
| | | | |
| virtual PostingIterator::Internal * postlist(QueryOptimiser * qopt, dou
ble factor) const = 0; | | virtual PostingIterator::Internal * postlist(QueryOptimiser * qopt, dou
ble factor) const = 0; | |
| | | | |
| virtual void postlist_sub_and_like(Xapian::Internal::AndContext& ctx, | | virtual void postlist_sub_and_like(Xapian::Internal::AndContext& ctx, | |
| QueryOptimiser * qopt, | | QueryOptimiser * qopt, | |
| double factor) const; | | double factor) const; | |
| | | | |
| virtual void postlist_sub_or_like(Xapian::Internal::OrContext& ctx, | | virtual void postlist_sub_or_like(Xapian::Internal::OrContext& ctx, | |
| QueryOptimiser * qopt, | | QueryOptimiser * qopt, | |
| double factor) const; | | double factor) const; | |
| | | | |
| virtual void postlist_sub_xor(Xapian::Internal::XorContext& ctx, | | virtual void postlist_sub_xor(Xapian::Internal::XorContext& ctx, | |
| QueryOptimiser * qopt, | | QueryOptimiser * qopt, | |
| double factor) const; | | double factor) const; | |
| | | | |
|
| virtual termcount get_length() const; | | virtual termcount get_length() const XAPIAN_PURE_FUNCTION; | |
| | | | |
| virtual void serialise(std::string & result) const = 0; | | virtual void serialise(std::string & result) const = 0; | |
| | | | |
| static Query::Internal * unserialise(const char ** p, const char * end,
const Registry & reg); | | static Query::Internal * unserialise(const char ** p, const char * end,
const Registry & reg); | |
| | | | |
|
| virtual std::string get_description() const = 0; | | virtual std::string get_description() const XAPIAN_PURE_FUNCTION = 0; | |
| | | | |
|
| virtual void gather_terms(std::vector<std::pair<Xapian::termpos, std::s | | // Pass argument as void* to avoid need to include <vector>. | |
| tring> > &terms) const; | | virtual void gather_terms(void * void_terms) const; | |
| }; | | }; | |
| | | | |
| } | | } | |
| | | | |
| #endif // XAPIAN_INCLUDED_QUERY_H | | #endif // XAPIAN_INCLUDED_QUERY_H | |
| | | | |
End of changes. 16 change blocks. |
| 17 lines changed or deleted | | 34 lines changed or added | |
|
| queryparser.h | | queryparser.h | |
| /** @file queryparser.h | | /** @file queryparser.h | |
| * @brief parsing a user query string to build a Xapian::Query object | | * @brief parsing a user query string to build a Xapian::Query object | |
| */ | | */ | |
|
| /* Copyright (C) 2005,2006,2007,2008,2009,2010,2011,2012 Olly Betts | | /* Copyright (C) 2005,2006,2007,2008,2009,2010,2011,2012,2013 Olly Betts | |
| * Copyright (C) 2010 Adam Sjøgren | | * Copyright (C) 2010 Adam Sjøgren | |
| * | | * | |
| * This program is free software; you can redistribute it and/or | | * This program is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU General Public License as | | * modify it under the terms of the GNU General Public License as | |
| * published by the Free Software Foundation; either version 2 of the | | * published by the Free Software Foundation; either version 2 of the | |
| * License, or (at your option) any later version. | | * License, or (at your option) any later version. | |
| * | | * | |
| * This program is distributed in the hope that it will be useful, | | * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| | | | |
| skipping to change at line 26 | | skipping to change at line 26 | |
| * | | * | |
| * You should have received a copy of the GNU General Public License | | * You should have received a copy of the GNU General Public License | |
| * along with this program; if not, write to the Free Software | | * along with this program; if not, write to the Free Software | |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 | | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 | |
| * USA | | * USA | |
| */ | | */ | |
| | | | |
| #ifndef XAPIAN_INCLUDED_QUERYPARSER_H | | #ifndef XAPIAN_INCLUDED_QUERYPARSER_H | |
| #define XAPIAN_INCLUDED_QUERYPARSER_H | | #define XAPIAN_INCLUDED_QUERYPARSER_H | |
| | | | |
|
| | | #if !defined XAPIAN_INCLUDED_XAPIAN_H && !defined XAPIAN_LIB_BUILD | |
| | | # error "Never use <xapian/queryparser.h> directly; include <xapian.h> inst | |
| | | ead." | |
| | | #endif | |
| | | | |
| | | #include <xapian/attributes.h> | |
| #include <xapian/intrusive_ptr.h> | | #include <xapian/intrusive_ptr.h> | |
| #include <xapian/query.h> | | #include <xapian/query.h> | |
| #include <xapian/termiterator.h> | | #include <xapian/termiterator.h> | |
| #include <xapian/visibility.h> | | #include <xapian/visibility.h> | |
| | | | |
| #include <set> | | #include <set> | |
| #include <string> | | #include <string> | |
| | | | |
| namespace Xapian { | | namespace Xapian { | |
| | | | |
| | | | |
| skipping to change at line 224 | | skipping to change at line 229 | |
| * For example, if str_ is "created:" and prefix_ is true, and the ran
ge | | * For example, if str_ is "created:" and prefix_ is true, and the ran
ge | |
| * processor has been added to the queryparser, the queryparser will | | * processor has been added to the queryparser, the queryparser will | |
| * accept "created:1/1/2000..31/12/2001". | | * accept "created:1/1/2000..31/12/2001". | |
| */ | | */ | |
| DateValueRangeProcessor(Xapian::valueno slot_, const std::string &str_, | | DateValueRangeProcessor(Xapian::valueno slot_, const std::string &str_, | |
| bool prefix_ = true, | | bool prefix_ = true, | |
| bool prefer_mdy_ = false, int epoch_year_ = 1970
) | | bool prefer_mdy_ = false, int epoch_year_ = 1970
) | |
| : StringValueRangeProcessor(slot_, str_, prefix_), | | : StringValueRangeProcessor(slot_, str_, prefix_), | |
| prefer_mdy(prefer_mdy_), epoch_year(epoch_year_) { } | | prefer_mdy(prefer_mdy_), epoch_year(epoch_year_) { } | |
| | | | |
|
| | | #ifndef SWIG | |
| | | /** Constructor. | |
| | | * | |
| | | * This is like the previous version, but with const char * instead of | |
| | | * std::string - we need this overload as otherwise | |
| | | * DateValueRangeProcessor(1, "date:") quietly interprets the second | |
| | | * argument as a boolean in preference to std::string. If you want to | |
| | | * be compatible with 1.2.12 and earlier, then explicitly convert to | |
| | | * std::string, i.e.: DateValueRangeProcessor(1, std::string("date:")) | |
| | | * | |
| | | * @param slot_ The value number to return from operator(). | |
| | | * | |
| | | * @param str_ A string to look for to recognise values as belongi | |
| | | ng | |
| | | * to this date range. | |
| | | * | |
| | | * @param prefix_ Whether to look for the string at the start or end | |
| | | of | |
| | | * the values. If true, the string is a prefix; if | |
| | | * false, the string is a suffix (default: true). | |
| | | * | |
| | | * @param prefer_mdy_ Should ambiguous dates be interpreted as | |
| | | * month/day/year rather than day/month/year? | |
| | | * (default: false) | |
| | | * | |
| | | * @param epoch_year_ Year to use as the epoch for dates with 2 digit | |
| | | * years (default: 1970, so 1/1/69 is 2069 while | |
| | | * 1/1/70 is 1970). | |
| | | * | |
| | | * The string supplied in str_ is used by @a operator() to decide whet | |
| | | her | |
| | | * the pair of strings supplied to it constitute a valid range. If | |
| | | * prefix_ is true, the first value in a range must begin with str_ (a | |
| | | nd | |
| | | * the second value may optionally begin with str_); | |
| | | * if prefix_ is false, the second value in a range must end with str_ | |
| | | * (and the first value may optionally end with str_). | |
| | | * | |
| | | * If str_ is empty, the setting of prefix_ is irrelevant, and no spec | |
| | | ial | |
| | | * strings are required at the start or end of the strings defining th | |
| | | e | |
| | | * range. | |
| | | * | |
| | | * The remainder of both strings defining the endpoints must be valid | |
| | | * dates. | |
| | | * | |
| | | * For example, if str_ is "created:" and prefix_ is true, and the ran | |
| | | ge | |
| | | * processor has been added to the queryparser, the queryparser will | |
| | | * accept "created:1/1/2000..31/12/2001". | |
| | | */ | |
| | | DateValueRangeProcessor(Xapian::valueno slot_, const char * str_, | |
| | | bool prefix_ = true, | |
| | | bool prefer_mdy_ = false, int epoch_year_ = 1970 | |
| | | ) | |
| | | : StringValueRangeProcessor(slot_, str_, prefix_), | |
| | | prefer_mdy(prefer_mdy_), epoch_year(epoch_year_) { } | |
| | | #endif | |
| | | | |
| /** Check for a valid date range. | | /** Check for a valid date range. | |
| * | | * | |
| * @param[in,out] begin The start of the range as specified in the | | * @param[in,out] begin The start of the range as specified in the | |
| * query string by the user. This parameter is
a | | * query string by the user. This parameter is
a | |
| * non-const reference so the ValueRangeProcess
or | | * non-const reference so the ValueRangeProcess
or | |
| * can modify it to return the value to start t
he | | * can modify it to return the value to start t
he | |
| * range with. | | * range with. | |
| * @param[in,out] end The end of the range. This is also a non-co
nst | | * @param[in,out] end The end of the range. This is also a non-co
nst | |
| * reference so it can be modified. | | * reference so it can be modified. | |
| * | | * | |
| | | | |
| skipping to change at line 314 | | skipping to change at line 371 | |
| * @return If BEGIN..END is a valid numeric range with the spec
ified | | * @return If BEGIN..END is a valid numeric range with the spec
ified | |
| * prefix/suffix (if one was specified), this method modifies | | * prefix/suffix (if one was specified), this method modifies | |
| * them by removing the prefix/suffix, converting to a number, | | * them by removing the prefix/suffix, converting to a number, | |
| * and encoding with Xapian::sortable_serialise(), and returns
the | | * and encoding with Xapian::sortable_serialise(), and returns
the | |
| * value of slot_ passed at construction time. Otherwise it | | * value of slot_ passed at construction time. Otherwise it | |
| * returns Xapian::BAD_VALUENO. | | * returns Xapian::BAD_VALUENO. | |
| */ | | */ | |
| Xapian::valueno operator()(std::string &begin, std::string &end); | | Xapian::valueno operator()(std::string &begin, std::string &end); | |
| }; | | }; | |
| | | | |
|
| | | /** Base class for field processors. | |
| | | * | |
| | | * Experimental API - may change. | |
| | | */ | |
| | | struct XAPIAN_VISIBILITY_DEFAULT FieldProcessor { | |
| | | /// Destructor. | |
| | | virtual ~FieldProcessor(); | |
| | | | |
| | | /** Convert a field-prefixed string to a Query object. | |
| | | * | |
| | | * @param str The string to convert. | |
| | | * | |
| | | * @return Query object corresponding to @a str. | |
| | | */ | |
| | | virtual Xapian::Query operator()(const std::string &str) = 0; | |
| | | }; | |
| | | | |
| /// Build a Xapian::Query object from a user query string. | | /// Build a Xapian::Query object from a user query string. | |
| class XAPIAN_VISIBILITY_DEFAULT QueryParser { | | class XAPIAN_VISIBILITY_DEFAULT QueryParser { | |
| public: | | public: | |
| /// Class representing the queryparser internals. | | /// Class representing the queryparser internals. | |
| class Internal; | | class Internal; | |
| /// @private @internal Reference counted internals. | | /// @private @internal Reference counted internals. | |
| Xapian::Internal::intrusive_ptr<Internal> internal; | | Xapian::Internal::intrusive_ptr<Internal> internal; | |
| | | | |
| /// Enum of feature flags. | | /// Enum of feature flags. | |
| typedef enum { | | typedef enum { | |
| | | | |
| skipping to change at line 412 | | skipping to change at line 486 | |
| /** The default flags. | | /** The default flags. | |
| * | | * | |
| * Used if you don't explicitly pass any to @a parse_query(). | | * Used if you don't explicitly pass any to @a parse_query(). | |
| * The default flags are FLAG_PHRASE|FLAG_BOOLEAN|FLAG_LOVEHATE. | | * The default flags are FLAG_PHRASE|FLAG_BOOLEAN|FLAG_LOVEHATE. | |
| * | | * | |
| * Added in Xapian 1.0.11. | | * Added in Xapian 1.0.11. | |
| */ | | */ | |
| FLAG_DEFAULT = FLAG_PHRASE|FLAG_BOOLEAN|FLAG_LOVEHATE | | FLAG_DEFAULT = FLAG_PHRASE|FLAG_BOOLEAN|FLAG_LOVEHATE | |
| } feature_flag; | | } feature_flag; | |
| | | | |
|
| typedef enum { STEM_NONE, STEM_SOME, STEM_ALL } stem_strategy; | | /// Stemming strategies, for use with set_stemming_strategy(). | |
| | | typedef enum { STEM_NONE, STEM_SOME, STEM_ALL, STEM_ALL_Z } stem_strate | |
| | | gy; | |
| | | | |
| /// Copy constructor. | | /// Copy constructor. | |
| QueryParser(const QueryParser & o); | | QueryParser(const QueryParser & o); | |
| | | | |
| /// Assignment. | | /// Assignment. | |
| QueryParser & operator=(const QueryParser & o); | | QueryParser & operator=(const QueryParser & o); | |
| | | | |
| /// Default constructor. | | /// Default constructor. | |
| QueryParser(); | | QueryParser(); | |
| | | | |
| /// Destructor. | | /// Destructor. | |
| ~QueryParser(); | | ~QueryParser(); | |
| | | | |
| /** Set the stemmer. | | /** Set the stemmer. | |
| * | | * | |
| * This sets the stemming algorithm which will be used by the query | | * This sets the stemming algorithm which will be used by the query | |
|
| * parser. Note that the stemming algorithm will only be used accordi | | * parser. The stemming algorithm will be used according to the stemm | |
| ng | | ing | |
| * to the stemming strategy set by set_stemming_strategy(), which defa | | * strategy set by set_stemming_strategy(). As of 1.3.1, this default | |
| ults | | s | |
| * to STEM_NONE. Therefore, to use a stemming algorithm, you will als | | * to STEM_SOME, but in earlier versions the default was STEM_NONE. I | |
| o | | f | |
| * need to call set_stemming_strategy() with a value other than STEM_N | | * you want to work with older versions, you should explicitly set | |
| ONE. | | * a stemming strategy as well as setting a stemmer, otherwise your | |
| | | * stemmer won't actually be used. | |
| * | | * | |
| * @param stemmer The Xapian::Stem object to set. | | * @param stemmer The Xapian::Stem object to set. | |
| */ | | */ | |
| void set_stemmer(const Xapian::Stem & stemmer); | | void set_stemmer(const Xapian::Stem & stemmer); | |
| | | | |
| /** Set the stemming strategy. | | /** Set the stemming strategy. | |
| * | | * | |
| * This controls how the query parser will apply the stemming algorith
m. | | * This controls how the query parser will apply the stemming algorith
m. | |
| * Note that the stemming algorithm is only applied to words in | | * Note that the stemming algorithm is only applied to words in | |
| * probabilistic fields - boolean filter terms are never stemmed. | | * probabilistic fields - boolean filter terms are never stemmed. | |
| * | | * | |
| * @param strategy The strategy to use - possible values are: | | * @param strategy The strategy to use - possible values are: | |
|
| * - STEM_NONE: Don't perform any stemming (the default). | | * - STEM_NONE: Don't perform any stemming. (default in Xapian <= | |
| * - STEM_SOME: Search for stemmed forms of terms except for those wh | | * 1.3.0) | |
| ich | | * - STEM_SOME: Search for stemmed forms of terms except for those | |
| * start with a capital letter, or are followed by certai | | * which start with a capital letter, or are followed b | |
| n | | y | |
| * characters (currently: (/\@<>=*[{" ), or are used with | | * certain characters (currently: (/\@<>=*[{" ), or are | |
| * operators which need positional information. Stemmed | | * used with operators which need positional informatio | |
| * terms are prefixed with 'Z'. | | n. | |
| * - STEM_ALL: Search for stemmed forms of all words (note: no 'Z' | | * Stemmed terms are prefixed with 'Z'. (default in | |
| * prefix is added). | | * Xapian >= 1.3.1) | |
| | | * - STEM_ALL: Search for stemmed forms of all words (note: no 'Z' | |
| | | * prefix is added). | |
| | | * - STEM_ALL_Z: Search for stemmed forms of all words (note: 'Z' | |
| | | * prefix is added). (new in Xapian 1.2.11 and 1.3.1) | |
| */ | | */ | |
| void set_stemming_strategy(stem_strategy strategy); | | void set_stemming_strategy(stem_strategy strategy); | |
| | | | |
| /** Set the stopper. | | /** Set the stopper. | |
| * | | * | |
| * @param stop The Stopper object to set (default NULL, which means
no | | * @param stop The Stopper object to set (default NULL, which means
no | |
| * stopwords). | | * stopwords). | |
| */ | | */ | |
| void set_stopper(const Stopper *stop = NULL); | | void set_stopper(const Stopper *stop = NULL); | |
| | | | |
| | | | |
| skipping to change at line 568 | | skipping to change at line 649 | |
| * will be thrown. | | * will be thrown. | |
| * | | * | |
| * In 1.0.3 and earlier, subsequent calls to this method with the same | | * In 1.0.3 and earlier, subsequent calls to this method with the same | |
| * value of @a field had no effect. | | * value of @a field had no effect. | |
| * | | * | |
| * @param field The user visible field name | | * @param field The user visible field name | |
| * @param prefix The term prefix to map this to | | * @param prefix The term prefix to map this to | |
| */ | | */ | |
| void add_prefix(const std::string &field, const std::string &prefix); | | void add_prefix(const std::string &field, const std::string &prefix); | |
| | | | |
|
| | | /** Register a FieldProcessor. | |
| | | * | |
| | | * Experimental API - may change. | |
| | | */ | |
| | | void add_prefix(const std::string &field, Xapian::FieldProcessor * proc | |
| | | ); | |
| | | | |
| /** Add a boolean term prefix allowing the user to restrict a | | /** Add a boolean term prefix allowing the user to restrict a | |
| * search with a boolean filter specified in the free text query. | | * search with a boolean filter specified in the free text query. | |
| * | | * | |
| * For example: | | * For example: | |
| * | | * | |
| * @code | | * @code | |
| * qp.add_boolean_prefix("site", "H"); | | * qp.add_boolean_prefix("site", "H"); | |
| * @endcode | | * @endcode | |
| * | | * | |
| * This allows the user to restrict a search with site:xapian.org whic
h | | * This allows the user to restrict a search with site:xapian.org whic
h | |
| | | | |
| skipping to change at line 623 | | skipping to change at line 710 | |
| * this prefix, so multiple filters with this prefix | | * this prefix, so multiple filters with this prefix | |
| * should be combined with OP_OR. If false, each | | * should be combined with OP_OR. If false, each | |
| * document can have multiple terms with this prefix,
so | | * document can have multiple terms with this prefix,
so | |
| * multiple filters should be combined with OP_AND, li
ke | | * multiple filters should be combined with OP_AND, li
ke | |
| * happens with filters with different prefixes. | | * happens with filters with different prefixes. | |
| * [default: true] | | * [default: true] | |
| */ | | */ | |
| void add_boolean_prefix(const std::string &field, const std::string &pr
efix, | | void add_boolean_prefix(const std::string &field, const std::string &pr
efix, | |
| bool exclusive = true); | | bool exclusive = true); | |
| | | | |
|
| | | /** Register a FieldProcessor for a boolean prefix. | |
| | | * | |
| | | * Experimental API - may change. | |
| | | */ | |
| | | void add_boolean_prefix(const std::string &field, Xapian::FieldProcesso | |
| | | r *proc, | |
| | | bool exclusive = true); | |
| | | | |
| /// Iterate over terms omitted from the query as stopwords. | | /// Iterate over terms omitted from the query as stopwords. | |
| TermIterator stoplist_begin() const; | | TermIterator stoplist_begin() const; | |
|
| TermIterator stoplist_end() const { | | TermIterator XAPIAN_NOTHROW(stoplist_end() const) { | |
| return TermIterator(); | | return TermIterator(); | |
| } | | } | |
| | | | |
| /// Iterate over unstemmed forms of the given (stemmed) term used in th
e query. | | /// Iterate over unstemmed forms of the given (stemmed) term used in th
e query. | |
| TermIterator unstem_begin(const std::string &term) const; | | TermIterator unstem_begin(const std::string &term) const; | |
|
| TermIterator unstem_end(const std::string &) const { | | TermIterator XAPIAN_NOTHROW(unstem_end(const std::string &) const) { | |
| return TermIterator(); | | return TermIterator(); | |
| } | | } | |
| | | | |
| /// Register a ValueRangeProcessor. | | /// Register a ValueRangeProcessor. | |
| void add_valuerangeprocessor(Xapian::ValueRangeProcessor * vrproc); | | void add_valuerangeprocessor(Xapian::ValueRangeProcessor * vrproc); | |
| | | | |
| /** Get the spelling-corrected query string. | | /** Get the spelling-corrected query string. | |
| * | | * | |
| * This will only be set if FLAG_SPELLING_CORRECTION is specified when | | * This will only be set if FLAG_SPELLING_CORRECTION is specified when | |
| * QueryParser::parse_query() was last called. | | * QueryParser::parse_query() was last called. | |
| * | | * | |
| * If there were no corrections, an empty string is returned. | | * If there were no corrections, an empty string is returned. | |
| */ | | */ | |
|
| std::string get_corrected_query_string() const; | | std::string get_corrected_query_string() const XAPIAN_PURE_FUNCTION; | |
| | | | |
| /// Return a string describing this object. | | /// Return a string describing this object. | |
|
| std::string get_description() const; | | std::string get_description() const XAPIAN_PURE_FUNCTION; | |
| }; | | }; | |
| | | | |
| /** Convert a floating point number to a string, preserving sort order. | | /** Convert a floating point number to a string, preserving sort order. | |
| * | | * | |
| * This method converts a floating point number to a string, suitable for | | * This method converts a floating point number to a string, suitable for | |
| * using as a value for numeric range restriction, or for use as a sort | | * using as a value for numeric range restriction, or for use as a sort | |
| * key. | | * key. | |
| * | | * | |
| * The conversion is platform independent. | | * The conversion is platform independent. | |
| * | | * | |
| | | | |
| skipping to change at line 678 | | skipping to change at line 772 | |
| * Note also that both zero and -zero will be converted to the same | | * Note also that both zero and -zero will be converted to the same | |
| * representation: since these compare equal, this satisfies the | | * representation: since these compare equal, this satisfies the | |
| * comparison constraint, but it's worth knowing this if you wish to use | | * comparison constraint, but it's worth knowing this if you wish to use | |
| * the encoding in some situation where this distinction matters. | | * the encoding in some situation where this distinction matters. | |
| * | | * | |
| * Handling of NaN isn't (currently) guaranteed to be sensible. | | * Handling of NaN isn't (currently) guaranteed to be sensible. | |
| * | | * | |
| * @param value The number to serialise. | | * @param value The number to serialise. | |
| */ | | */ | |
| XAPIAN_VISIBILITY_DEFAULT | | XAPIAN_VISIBILITY_DEFAULT | |
|
| std::string sortable_serialise(double value); | | std::string sortable_serialise(double value) XAPIAN_CONST_FUNCTION; | |
| | | | |
| /** Convert a string encoded using @a sortable_serialise back to a floating | | /** Convert a string encoded using @a sortable_serialise back to a floating | |
| * point number. | | * point number. | |
| * | | * | |
| * This expects the input to be a string produced by @a sortable_serialise
(). | | * This expects the input to be a string produced by @a sortable_serialise
(). | |
| * If the input is not such a string, the value returned is undefined (but | | * If the input is not such a string, the value returned is undefined (but | |
| * no error will be thrown). | | * no error will be thrown). | |
| * | | * | |
| * The result of the conversion will be exactly the value which was | | * The result of the conversion will be exactly the value which was | |
| * supplied to @a sortable_serialise() when making the string on platforms | | * supplied to @a sortable_serialise() when making the string on platforms | |
| * which represent doubles with the precisions specified by IEEE_754, but | | * which represent doubles with the precisions specified by IEEE_754, but | |
| * may be a different (nearby) value on other platforms. | | * may be a different (nearby) value on other platforms. | |
| * | | * | |
| * @param value The serialised string to decode. | | * @param value The serialised string to decode. | |
| */ | | */ | |
| XAPIAN_VISIBILITY_DEFAULT | | XAPIAN_VISIBILITY_DEFAULT | |
|
| double sortable_unserialise(const std::string & value); | | double sortable_unserialise(const std::string & value) XAPIAN_CONST_FUNCTIO
N; | |
| | | | |
| } | | } | |
| | | | |
| #endif // XAPIAN_INCLUDED_QUERYPARSER_H | | #endif // XAPIAN_INCLUDED_QUERYPARSER_H | |
| | | | |
End of changes. 15 change blocks. |
| 26 lines changed or deleted | | 131 lines changed or added | |
|
| termgenerator.h | | termgenerator.h | |
| /** @file termgenerator.h | | /** @file termgenerator.h | |
| * @brief parse free text and generate terms | | * @brief parse free text and generate terms | |
| */ | | */ | |
|
| /* Copyright (C) 2007,2009,2011 Olly Betts | | /* Copyright (C) 2007,2009,2011,2012,2013 Olly Betts | |
| * | | * | |
| * This program is free software; you can redistribute it and/or modify | | * This program is free software; you can redistribute it and/or modify | |
| * it under the terms of the GNU General Public License as published by | | * it under the terms of the GNU General Public License as published by | |
| * the Free Software Foundation; either version 2 of the License, or | | * the Free Software Foundation; either version 2 of the License, or | |
| * (at your option) any later version. | | * (at your option) any later version. | |
| * | | * | |
| * This program is distributed in the hope that it will be useful, | | * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| * GNU General Public License for more details. | | * GNU General Public License for more details. | |
| * | | * | |
| * You should have received a copy of the GNU General Public License | | * You should have received a copy of the GNU General Public License | |
| * along with this program; if not, write to the Free Software | | * along with this program; if not, write to the Free Software | |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 US
A | | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 US
A | |
| */ | | */ | |
| | | | |
| #ifndef XAPIAN_INCLUDED_TERMGENERATOR_H | | #ifndef XAPIAN_INCLUDED_TERMGENERATOR_H | |
| #define XAPIAN_INCLUDED_TERMGENERATOR_H | | #define XAPIAN_INCLUDED_TERMGENERATOR_H | |
| | | | |
|
| | | #if !defined XAPIAN_INCLUDED_XAPIAN_H && !defined XAPIAN_LIB_BUILD | |
| | | # error "Never use <xapian/termgenerator.h> directly; include <xapian.h> in | |
| | | stead." | |
| | | #endif | |
| | | | |
| #include <xapian/intrusive_ptr.h> | | #include <xapian/intrusive_ptr.h> | |
| #include <xapian/types.h> | | #include <xapian/types.h> | |
| #include <xapian/unicode.h> | | #include <xapian/unicode.h> | |
| #include <xapian/visibility.h> | | #include <xapian/visibility.h> | |
| | | | |
| #include <string> | | #include <string> | |
| | | | |
| namespace Xapian { | | namespace Xapian { | |
| | | | |
| class Document; | | class Document; | |
| | | | |
| skipping to change at line 91 | | skipping to change at line 95 | |
| | | | |
| /// Set the database to index spelling data to. | | /// Set the database to index spelling data to. | |
| void set_database(const Xapian::WritableDatabase &db); | | void set_database(const Xapian::WritableDatabase &db); | |
| | | | |
| /// Flags to OR together and pass to TermGenerator::set_flags(). | | /// Flags to OR together and pass to TermGenerator::set_flags(). | |
| enum flags { | | enum flags { | |
| /// Index data required for spelling correction. | | /// Index data required for spelling correction. | |
| FLAG_SPELLING = 128 // Value matches QueryParser flag. | | FLAG_SPELLING = 128 // Value matches QueryParser flag. | |
| }; | | }; | |
| | | | |
|
| | | /// Stemming strategies, for use with set_stemming_strategy(). | |
| | | typedef enum { STEM_NONE, STEM_SOME, STEM_ALL, STEM_ALL_Z } stem_strate | |
| | | gy; | |
| | | | |
| /** Set flags. | | /** Set flags. | |
| * | | * | |
| * The new value of flags is: (flags & mask) ^ toggle | | * The new value of flags is: (flags & mask) ^ toggle | |
| * | | * | |
| * To just set the flags, pass the new flags in toggle and the | | * To just set the flags, pass the new flags in toggle and the | |
| * default value for mask. | | * default value for mask. | |
| * | | * | |
| * @param toggle Flags to XOR. | | * @param toggle Flags to XOR. | |
| * @param mask Flags to AND with first. | | * @param mask Flags to AND with first. | |
| * | | * | |
| * @return The old flags setting. | | * @return The old flags setting. | |
| */ | | */ | |
| flags set_flags(flags toggle, flags mask = flags(0)); | | flags set_flags(flags toggle, flags mask = flags(0)); | |
| | | | |
|
| | | /** Set the stemming strategy. | |
| | | * | |
| | | * This method controls how the stemming algorithm is applied. It was | |
| | | * new in Xapian 1.3.1. | |
| | | * | |
| | | * @param strategy The strategy to use - possible values are: | |
| | | * - STEM_NONE: Don't perform any stemming - only unstemmed terms | |
| | | * are generated. | |
| | | * - STEM_SOME: Generate both stemmed (with a "Z" prefix) and unstem | |
| | | med | |
| | | * terms. This is the default strategy. | |
| | | * - STEM_ALL: Generate only stemmed terms (but without a "Z" prefi | |
| | | x). | |
| | | * - STEM_ALL_Z: Generate only stemmed terms (with a "Z" prefix). | |
| | | */ | |
| | | void set_stemming_strategy(stem_strategy strategy); | |
| | | | |
| | | /** Set the maximum length word to index. | |
| | | * | |
| | | * The limit is on the length of a word prior to stemming and prior to | |
| | | * adding any term prefix. | |
| | | * | |
| | | * The backends mostly impose a limit on the length of terms (often of | |
| | | * about 240 bytes), but it's generally useful to have a lower limit t | |
| | | o | |
| | | * help prevent the index being bloated by useless junk terms from try | |
| | | ing | |
| | | * to indexing things like binary data, uuencoded data, ASCII art, etc | |
| | | . | |
| | | * | |
| | | * This method was new in Xapian 1.3.1. | |
| | | * | |
| | | * @param max_word_length The maximum length word to index, in bytes i | |
| | | n | |
| | | * UTF-8 representation. Default is 64. | |
| | | */ | |
| | | void set_max_word_length(unsigned max_word_length); | |
| | | | |
| /** Index some text. | | /** Index some text. | |
| * | | * | |
| * @param itor Utf8Iterator pointing to the text to index. | | * @param itor Utf8Iterator pointing to the text to index. | |
| * @param wdf_inc The wdf increment (default 1). | | * @param wdf_inc The wdf increment (default 1). | |
| * @param prefix The term prefix to use (default is no prefix). | | * @param prefix The term prefix to use (default is no prefix). | |
| */ | | */ | |
| void index_text(const Xapian::Utf8Iterator & itor, | | void index_text(const Xapian::Utf8Iterator & itor, | |
| Xapian::termcount wdf_inc = 1, | | Xapian::termcount wdf_inc = 1, | |
| const std::string & prefix = std::string()); | | const std::string & prefix = std::string()); | |
| | | | |
| | | | |
End of changes. 4 change blocks. |
| 1 lines changed or deleted | | 48 lines changed or added | |
|
| termiterator.h | | termiterator.h | |
| /** @file termiterator.h | | /** @file termiterator.h | |
| * @brief Class for iterating over a list of terms | | * @brief Class for iterating over a list of terms | |
| */ | | */ | |
|
| /* Copyright (C) 2007,2008,2009,2010,2011 Olly Betts | | /* Copyright (C) 2007,2008,2009,2010,2011,2012,2013 Olly Betts | |
| * | | * | |
| * This program is free software; you can redistribute it and/or | | * This program is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU General Public License as | | * modify it under the terms of the GNU General Public License as | |
| * published by the Free Software Foundation; either version 2 of the | | * published by the Free Software Foundation; either version 2 of the | |
| * License, or (at your option) any later version. | | * License, or (at your option) any later version. | |
| * | | * | |
| * This program is distributed in the hope that it will be useful, | | * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| * GNU General Public License for more details. | | * GNU General Public License for more details. | |
| * | | * | |
| * You should have received a copy of the GNU General Public License | | * You should have received a copy of the GNU General Public License | |
| * along with this program; if not, write to the Free Software | | * along with this program; if not, write to the Free Software | |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 | | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 | |
| * USA | | * USA | |
| */ | | */ | |
| | | | |
| #ifndef XAPIAN_INCLUDED_TERMITERATOR_H | | #ifndef XAPIAN_INCLUDED_TERMITERATOR_H | |
| #define XAPIAN_INCLUDED_TERMITERATOR_H | | #define XAPIAN_INCLUDED_TERMITERATOR_H | |
| | | | |
|
| | | #if !defined XAPIAN_INCLUDED_XAPIAN_H && !defined XAPIAN_LIB_BUILD | |
| | | # error "Never use <xapian/termiterator.h> directly; include <xapian.h> ins | |
| | | tead." | |
| | | #endif | |
| | | | |
| #include <iterator> | | #include <iterator> | |
| #include <string> | | #include <string> | |
| | | | |
|
| | | #include <xapian/attributes.h> | |
| #include <xapian/derefwrapper.h> | | #include <xapian/derefwrapper.h> | |
| #include <xapian/positioniterator.h> | | #include <xapian/positioniterator.h> | |
| #include <xapian/types.h> | | #include <xapian/types.h> | |
| #include <xapian/visibility.h> | | #include <xapian/visibility.h> | |
| | | | |
| namespace Xapian { | | namespace Xapian { | |
| | | | |
| /// Class for iterating over a list of terms. | | /// Class for iterating over a list of terms. | |
| class XAPIAN_VISIBILITY_DEFAULT TermIterator { | | class XAPIAN_VISIBILITY_DEFAULT TermIterator { | |
| public: | | public: | |
| | | | |
| skipping to change at line 57 | | skipping to change at line 62 | |
| TermIterator(const TermIterator & o); | | TermIterator(const TermIterator & o); | |
| | | | |
| /// Assignment. | | /// Assignment. | |
| TermIterator & operator=(const TermIterator & o); | | TermIterator & operator=(const TermIterator & o); | |
| | | | |
| /** Default constructor. | | /** Default constructor. | |
| * | | * | |
| * Creates an uninitialised iterator, which can't be used before being | | * Creates an uninitialised iterator, which can't be used before being | |
| * assigned to, but is sometimes syntactically convenient. | | * assigned to, but is sometimes syntactically convenient. | |
| */ | | */ | |
|
| TermIterator() : internal(0) { } | | XAPIAN_NOTHROW(TermIterator()) | |
| | | : internal(0) { } | |
| | | | |
| /// Destructor. | | /// Destructor. | |
| ~TermIterator() { | | ~TermIterator() { | |
| if (internal) decref(); | | if (internal) decref(); | |
| } | | } | |
| | | | |
| /// Return the term at the current position. | | /// Return the term at the current position. | |
|
| std::string operator*() const; | | std::string operator*() const XAPIAN_PURE_FUNCTION; | |
| | | | |
| /// Return the wdf for the term at the current position. | | /// Return the wdf for the term at the current position. | |
|
| Xapian::termcount get_wdf() const; | | Xapian::termcount get_wdf() const XAPIAN_PURE_FUNCTION; | |
| | | | |
| /// Return the term frequency for the term at the current position. | | /// Return the term frequency for the term at the current position. | |
|
| Xapian::doccount get_termfreq() const; | | Xapian::doccount get_termfreq() const XAPIAN_PURE_FUNCTION; | |
| | | | |
| /// Return the length of the position list for the current position. | | /// Return the length of the position list for the current position. | |
| Xapian::termcount positionlist_count() const; | | Xapian::termcount positionlist_count() const; | |
| | | | |
| /// Return a PositionIterator for the current term. | | /// Return a PositionIterator for the current term. | |
| PositionIterator positionlist_begin() const; | | PositionIterator positionlist_begin() const; | |
| | | | |
| /// Return an end PositionIterator for the current term. | | /// Return an end PositionIterator for the current term. | |
|
| PositionIterator positionlist_end() const { | | PositionIterator XAPIAN_NOTHROW(positionlist_end() const) { | |
| return PositionIterator(); | | return PositionIterator(); | |
| } | | } | |
| | | | |
| /// Advance the iterator to the next position. | | /// Advance the iterator to the next position. | |
| TermIterator & operator++(); | | TermIterator & operator++(); | |
| | | | |
| /// Advance the iterator to the next position (postfix version). | | /// Advance the iterator to the next position (postfix version). | |
| DerefWrapper_<std::string> operator++(int) { | | DerefWrapper_<std::string> operator++(int) { | |
| const std::string & term(**this); | | const std::string & term(**this); | |
| operator++(); | | operator++(); | |
| | | | |
| skipping to change at line 106 | | skipping to change at line 112 | |
| * If the iteration is over an unsorted list of terms, then this metho
d | | * If the iteration is over an unsorted list of terms, then this metho
d | |
| * will throw Xapian::InvalidOperationError. | | * will throw Xapian::InvalidOperationError. | |
| * | | * | |
| * @param term The term to advance to. If this term isn't in | | * @param term The term to advance to. If this term isn't in | |
| * the stream being iterated, then the iterator is move
d | | * the stream being iterated, then the iterator is move
d | |
| * to the next term after it which is. | | * to the next term after it which is. | |
| */ | | */ | |
| void skip_to(const std::string &term); | | void skip_to(const std::string &term); | |
| | | | |
| /// Return a string describing this object. | | /// Return a string describing this object. | |
|
| std::string get_description() const; | | std::string get_description() const XAPIAN_PURE_FUNCTION; | |
| | | | |
| /** @private @internal TermIterator is what the C++ STL calls an | | /** @private @internal TermIterator is what the C++ STL calls an | |
| * input_iterator. | | * input_iterator. | |
| * | | * | |
| * The following typedefs allow std::iterator_traits<> to work so that | | * The following typedefs allow std::iterator_traits<> to work so that | |
| * this iterator can be used with the STL. | | * this iterator can be used with the STL. | |
| * | | * | |
| * These are deliberately hidden from the Doxygen-generated docs, as t
he | | * These are deliberately hidden from the Doxygen-generated docs, as t
he | |
| * machinery here isn't interesting to API users. They just need to k
now | | * machinery here isn't interesting to API users. They just need to k
now | |
| * that Xapian iterator classes are compatible with the STL. | | * that Xapian iterator classes are compatible with the STL. | |
| | | | |
| skipping to change at line 137 | | skipping to change at line 143 | |
| /// @private | | /// @private | |
| typedef std::string & reference; | | typedef std::string & reference; | |
| // @} | | // @} | |
| | | | |
| private: | | private: | |
| void decref(); | | void decref(); | |
| | | | |
| void post_advance(Internal * res); | | void post_advance(Internal * res); | |
| }; | | }; | |
| | | | |
|
| | | bool | |
| | | XAPIAN_NOTHROW(operator==(const TermIterator &a, const TermIterator &b)); | |
| | | | |
| /// Equality test for TermIterator objects. | | /// Equality test for TermIterator objects. | |
| inline bool | | inline bool | |
| operator==(const TermIterator &a, const TermIterator &b) | | operator==(const TermIterator &a, const TermIterator &b) | |
| { | | { | |
| // Use a pointer comparison - this ensures both that (a == a) and corre
ct | | // Use a pointer comparison - this ensures both that (a == a) and corre
ct | |
| // handling of end iterators (which we ensure have NULL internals). | | // handling of end iterators (which we ensure have NULL internals). | |
| return a.internal == b.internal; | | return a.internal == b.internal; | |
| } | | } | |
| | | | |
|
| | | bool | |
| | | XAPIAN_NOTHROW(operator!=(const TermIterator &a, const TermIterator &b)); | |
| | | | |
| /// Inequality test for TermIterator objects. | | /// Inequality test for TermIterator objects. | |
| inline bool | | inline bool | |
| operator!=(const TermIterator &a, const TermIterator &b) | | operator!=(const TermIterator &a, const TermIterator &b) | |
| { | | { | |
| return !(a == b); | | return !(a == b); | |
| } | | } | |
| | | | |
| } | | } | |
| | | | |
| #endif // XAPIAN_INCLUDED_TERMITERATOR_H | | #endif // XAPIAN_INCLUDED_TERMITERATOR_H | |
| | | | |
End of changes. 11 change blocks. |
| 7 lines changed or deleted | | 20 lines changed or added | |
|
| unicode.h | | unicode.h | |
| /** @file unicode.h | | /** @file unicode.h | |
| * @brief Unicode and UTF-8 related classes and functions. | | * @brief Unicode and UTF-8 related classes and functions. | |
| */ | | */ | |
|
| /* Copyright (C) 2006,2007,2008,2009,2010,2011 Olly Betts | | /* Copyright (C) 2006,2007,2008,2009,2010,2011,2012,2013 Olly Betts | |
| * | | * | |
| * This program is free software; you can redistribute it and/or modify | | * This program is free software; you can redistribute it and/or modify | |
| * it under the terms of the GNU General Public License as published by | | * it under the terms of the GNU General Public License as published by | |
| * the Free Software Foundation; either version 2 of the License, or | | * the Free Software Foundation; either version 2 of the License, or | |
| * (at your option) any later version. | | * (at your option) any later version. | |
| * | | * | |
| * This program is distributed in the hope that it will be useful, | | * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| * GNU General Public License for more details. | | * GNU General Public License for more details. | |
| * | | * | |
| * You should have received a copy of the GNU General Public License | | * You should have received a copy of the GNU General Public License | |
| * along with this program; if not, write to the Free Software | | * along with this program; if not, write to the Free Software | |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 US
A | | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 US
A | |
| */ | | */ | |
| | | | |
| #ifndef XAPIAN_INCLUDED_UNICODE_H | | #ifndef XAPIAN_INCLUDED_UNICODE_H | |
| #define XAPIAN_INCLUDED_UNICODE_H | | #define XAPIAN_INCLUDED_UNICODE_H | |
| | | | |
|
| | | #if !defined XAPIAN_INCLUDED_XAPIAN_H && !defined XAPIAN_LIB_BUILD | |
| | | # error "Never use <xapian/unicode.h> directly; include <xapian.h> instead. | |
| | | " | |
| | | #endif | |
| | | | |
| | | #include <xapian/attributes.h> | |
| #include <xapian/visibility.h> | | #include <xapian/visibility.h> | |
| | | | |
| #include <string> | | #include <string> | |
| | | | |
| namespace Xapian { | | namespace Xapian { | |
| | | | |
| /** An iterator which returns Unicode character values from a UTF-8 encoded | | /** An iterator which returns Unicode character values from a UTF-8 encoded | |
| * string. | | * string. | |
| */ | | */ | |
| class XAPIAN_VISIBILITY_DEFAULT Utf8Iterator { | | class XAPIAN_VISIBILITY_DEFAULT Utf8Iterator { | |
| | | | |
| skipping to change at line 47 | | skipping to change at line 52 | |
| | | | |
| void calculate_sequence_length() const; | | void calculate_sequence_length() const; | |
| | | | |
| unsigned get_char() const; | | unsigned get_char() const; | |
| | | | |
| Utf8Iterator(const unsigned char *p_, const unsigned char *end_, unsign
ed seqlen_) | | Utf8Iterator(const unsigned char *p_, const unsigned char *end_, unsign
ed seqlen_) | |
| : p(p_), end(end_), seqlen(seqlen_) { } | | : p(p_), end(end_), seqlen(seqlen_) { } | |
| | | | |
| public: | | public: | |
| /** Return the raw const char * pointer for the current position. */ | | /** Return the raw const char * pointer for the current position. */ | |
|
| const char * raw() const { | | const char * raw() const XAPIAN_PURE_FUNCTION { | |
| return reinterpret_cast<const char *>(p ? p : end); | | return reinterpret_cast<const char *>(p ? p : end); | |
| } | | } | |
| | | | |
| /** Return the number of bytes left in the iterator's buffer. */ | | /** Return the number of bytes left in the iterator's buffer. */ | |
|
| size_t left() const { return p ? end - p : 0; } | | size_t left() const XAPIAN_PURE_FUNCTION { return p ? end - p : 0; } | |
| | | | |
| /** Assign a new string to the iterator. | | /** Assign a new string to the iterator. | |
| * | | * | |
| * The iterator will forget the string it was iterating through, and | | * The iterator will forget the string it was iterating through, and | |
| * return characters from the start of the new string when next called
. | | * return characters from the start of the new string when next called
. | |
| * The string is not copied into the iterator, so it must remain valid | | * The string is not copied into the iterator, so it must remain valid | |
| * while the iteration is in progress. | | * while the iteration is in progress. | |
| * | | * | |
| * @param p_ A pointer to the start of the string to read. | | * @param p_ A pointer to the start of the string to read. | |
| * | | * | |
| | | | |
| skipping to change at line 125 | | skipping to change at line 130 | |
| * @param s The string to read. Must not be modified while the iterat
ion | | * @param s The string to read. Must not be modified while the iterat
ion | |
| * is in progress. | | * is in progress. | |
| */ | | */ | |
| Utf8Iterator(const std::string &s) { assign(s.data(), s.size()); } | | Utf8Iterator(const std::string &s) { assign(s.data(), s.size()); } | |
| | | | |
| /** Create an iterator which is at the end of its iteration. | | /** Create an iterator which is at the end of its iteration. | |
| * | | * | |
| * This can be compared to another iterator to check if the other iter
ator | | * This can be compared to another iterator to check if the other iter
ator | |
| * has reached its end. | | * has reached its end. | |
| */ | | */ | |
|
| Utf8Iterator() : p(NULL), end(0), seqlen(0) { } | | XAPIAN_NOTHROW(Utf8Iterator()) | |
| | | : p(NULL), end(0), seqlen(0) { } | |
| | | | |
| /** Get the current Unicode character value pointed to by the iterator. | | /** Get the current Unicode character value pointed to by the iterator. | |
| * | | * | |
| * Returns unsigned(-1) if the iterator has reached the end of its buf
fer. | | * Returns unsigned(-1) if the iterator has reached the end of its buf
fer. | |
| */ | | */ | |
|
| unsigned operator*() const; | | unsigned operator*() const XAPIAN_PURE_FUNCTION; | |
| | | | |
| /** Move forward to the next Unicode character. | | /** Move forward to the next Unicode character. | |
| * | | * | |
| * @return An iterator pointing to the position before the move. | | * @return An iterator pointing to the position before the move. | |
| */ | | */ | |
| Utf8Iterator operator++(int) { | | Utf8Iterator operator++(int) { | |
| // If we've not calculated seqlen yet, do so. | | // If we've not calculated seqlen yet, do so. | |
| if (seqlen == 0) calculate_sequence_length(); | | if (seqlen == 0) calculate_sequence_length(); | |
| const unsigned char *old_p = p; | | const unsigned char *old_p = p; | |
| unsigned old_seqlen = seqlen; | | unsigned old_seqlen = seqlen; | |
| | | | |
| skipping to change at line 165 | | skipping to change at line 171 | |
| if (p == end) p = NULL; | | if (p == end) p = NULL; | |
| seqlen = 0; | | seqlen = 0; | |
| return *this; | | return *this; | |
| } | | } | |
| | | | |
| /** Test two Utf8Iterators for equality. | | /** Test two Utf8Iterators for equality. | |
| * | | * | |
| * @param other The Utf8Iterator to compare this one with. | | * @param other The Utf8Iterator to compare this one with. | |
| * @return true iff the iterators point to the same position. | | * @return true iff the iterators point to the same position. | |
| */ | | */ | |
|
| bool operator==(const Utf8Iterator &other) const { return p == other.p; | | bool XAPIAN_NOTHROW(operator==(const Utf8Iterator &other) const) { | |
| } | | return p == other.p; | |
| | | } | |
| | | | |
| /** Test two Utf8Iterators for inequality. | | /** Test two Utf8Iterators for inequality. | |
| * | | * | |
| * @param other The Utf8Iterator to compare this one with. | | * @param other The Utf8Iterator to compare this one with. | |
| * @return true iff the iterators do not point to the same position. | | * @return true iff the iterators do not point to the same position. | |
| */ | | */ | |
|
| bool operator!=(const Utf8Iterator &other) const { return p != other.p; | | bool XAPIAN_NOTHROW(operator!=(const Utf8Iterator &other) const) { | |
| } | | return p != other.p; | |
| | | } | |
| | | | |
| /// We implement the semantics of an STL input_iterator. | | /// We implement the semantics of an STL input_iterator. | |
| //@{ | | //@{ | |
| typedef std::input_iterator_tag iterator_category; | | typedef std::input_iterator_tag iterator_category; | |
| typedef unsigned value_type; | | typedef unsigned value_type; | |
| typedef size_t difference_type; | | typedef size_t difference_type; | |
| typedef const unsigned * pointer; | | typedef const unsigned * pointer; | |
| typedef const unsigned & reference; | | typedef const unsigned & reference; | |
| //@} | | //@} | |
| }; | | }; | |
| | | | |
| skipping to change at line 228 | | skipping to change at line 238 | |
| OTHER_SYMBOL | | OTHER_SYMBOL | |
| } category; | | } category; | |
| | | | |
| namespace Internal { | | namespace Internal { | |
| /** @internal Extract the information about a character from the Unicod
e | | /** @internal Extract the information about a character from the Unicod
e | |
| * character tables. | | * character tables. | |
| * | | * | |
| * ch must be a valid Unicode character value (i.e. < 0x110000) | | * ch must be a valid Unicode character value (i.e. < 0x110000) | |
| */ | | */ | |
| XAPIAN_VISIBILITY_DEFAULT | | XAPIAN_VISIBILITY_DEFAULT | |
|
| int get_character_info(unsigned ch); | | int get_character_info(unsigned ch) XAPIAN_CONST_FUNCTION; | |
| | | | |
| /** @internal Extract how to convert the case of a Unicode character fr
om | | /** @internal Extract how to convert the case of a Unicode character fr
om | |
| * its info. | | * its info. | |
| */ | | */ | |
| inline int get_case_type(int info) { return ((info & 0xe0) >> 5); } | | inline int get_case_type(int info) { return ((info & 0xe0) >> 5); } | |
| | | | |
| /// @internal Extract the category of a Unicode character from its info
. | | /// @internal Extract the category of a Unicode character from its info
. | |
| inline category get_category(int info) { return static_cast<category>(i
nfo & 0x1f); } | | inline category get_category(int info) { return static_cast<category>(i
nfo & 0x1f); } | |
| | | | |
| /** @internal Extract the delta to use for case conversion of a charact
er | | /** @internal Extract the delta to use for case conversion of a charact
er | |
| * from its info. | | * from its info. | |
| */ | | */ | |
| inline int get_delta(int info) { | | inline int get_delta(int info) { | |
| /* It's implementation defined if sign extension happens on right sh
ift | | /* It's implementation defined if sign extension happens on right sh
ift | |
| * of a signed int, hence the conditional (hopefully the compiler wi
ll | | * of a signed int, hence the conditional (hopefully the compiler wi
ll | |
| * spot this and optimise it to a sign-extending shift on architectu
res | | * spot this and optimise it to a sign-extending shift on architectu
res | |
| * with a suitable instruction). | | * with a suitable instruction). | |
| */ | | */ | |
|
| return (info >= 0) ? (info >> 15) : (~(~info >> 15)); | | #ifdef __GNUC__ | |
| | | // GCC 4.7.1 doesn't optimise the more complex expression down | |
| | | // (reported as http://gcc.gnu.org/PR55299), but the documented | |
| | | // behaviour for GCC is that right shift of a signed integer perform | |
| | | s | |
| | | // sign extension: | |
| | | // http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Integers-implementati | |
| | | on.html | |
| | | return info >> 8; | |
| | | #else | |
| | | return (info >= 0) ? (info >> 8) : (~(~info >> 8)); | |
| | | #endif | |
| } | | } | |
| } | | } | |
| | | | |
| /** Convert a single non-ASCII Unicode character to UTF-8. | | /** Convert a single non-ASCII Unicode character to UTF-8. | |
| * | | * | |
| * This is intended mainly as a helper method for to_utf8(). | | * This is intended mainly as a helper method for to_utf8(). | |
| * | | * | |
| * @param ch The character (which must be > 128) to write to @a buf. | | * @param ch The character (which must be > 128) to write to @a buf. | |
| * @param buf The buffer to write the character to - it must have | | * @param buf The buffer to write the character to - it must have | |
| * space for (at least) 4 bytes. | | * space for (at least) 4 bytes. | |
| | | | |
End of changes. 10 change blocks. |
| 11 lines changed or deleted | | 31 lines changed or added | |
|
| valueiterator.h | | valueiterator.h | |
| /** @file valueiterator.h | | /** @file valueiterator.h | |
| * @brief Class for iterating over document values. | | * @brief Class for iterating over document values. | |
| */ | | */ | |
|
| /* Copyright (C) 2008,2009,2010,2011 Olly Betts | | /* Copyright (C) 2008,2009,2010,2011,2012,2013 Olly Betts | |
| * | | * | |
| * This program is free software; you can redistribute it and/or | | * This program is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU General Public License as | | * modify it under the terms of the GNU General Public License as | |
| * published by the Free Software Foundation; either version 2 of the | | * published by the Free Software Foundation; either version 2 of the | |
| * License, or (at your option) any later version. | | * License, or (at your option) any later version. | |
| * | | * | |
| * This program is distributed in the hope that it will be useful, | | * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| * GNU General Public License for more details. | | * GNU General Public License for more details. | |
| * | | * | |
| * You should have received a copy of the GNU General Public License | | * You should have received a copy of the GNU General Public License | |
| * along with this program; if not, write to the Free Software | | * along with this program; if not, write to the Free Software | |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 | | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 | |
| * USA | | * USA | |
| */ | | */ | |
| | | | |
| #ifndef XAPIAN_INCLUDED_VALUEITERATOR_H | | #ifndef XAPIAN_INCLUDED_VALUEITERATOR_H | |
| #define XAPIAN_INCLUDED_VALUEITERATOR_H | | #define XAPIAN_INCLUDED_VALUEITERATOR_H | |
| | | | |
|
| | | #if !defined XAPIAN_INCLUDED_XAPIAN_H && !defined XAPIAN_LIB_BUILD | |
| | | # error "Never use <xapian/valueiterator.h> directly; include <xapian.h> in | |
| | | stead." | |
| | | #endif | |
| | | | |
| #include <iterator> | | #include <iterator> | |
| #include <string> | | #include <string> | |
| | | | |
|
| | | #include <xapian/attributes.h> | |
| #include <xapian/derefwrapper.h> | | #include <xapian/derefwrapper.h> | |
| #include <xapian/types.h> | | #include <xapian/types.h> | |
| #include <xapian/visibility.h> | | #include <xapian/visibility.h> | |
| | | | |
| namespace Xapian { | | namespace Xapian { | |
| | | | |
| /// Class for iterating over document values. | | /// Class for iterating over document values. | |
| class XAPIAN_VISIBILITY_DEFAULT ValueIterator { | | class XAPIAN_VISIBILITY_DEFAULT ValueIterator { | |
| void decref(); | | void decref(); | |
| | | | |
| | | | |
| skipping to change at line 58 | | skipping to change at line 63 | |
| ValueIterator(const ValueIterator & o); | | ValueIterator(const ValueIterator & o); | |
| | | | |
| /// Assignment. | | /// Assignment. | |
| ValueIterator & operator=(const ValueIterator & o); | | ValueIterator & operator=(const ValueIterator & o); | |
| | | | |
| /** Default constructor. | | /** Default constructor. | |
| * | | * | |
| * Creates an uninitialised iterator, which can't be used before being | | * Creates an uninitialised iterator, which can't be used before being | |
| * assigned to, but is sometimes syntactically convenient. | | * assigned to, but is sometimes syntactically convenient. | |
| */ | | */ | |
|
| ValueIterator() : internal(0) { } | | XAPIAN_NOTHROW(ValueIterator()) | |
| | | : internal(0) { } | |
| | | | |
| /// Destructor. | | /// Destructor. | |
| ~ValueIterator() { | | ~ValueIterator() { | |
| if (internal) decref(); | | if (internal) decref(); | |
| } | | } | |
| | | | |
| /// Return the value at the current position. | | /// Return the value at the current position. | |
| std::string operator*() const; | | std::string operator*() const; | |
| | | | |
| /// Advance the iterator to the next position. | | /// Advance the iterator to the next position. | |
| | | | |
| skipping to change at line 83 | | skipping to change at line 89 | |
| const std::string & value(**this); | | const std::string & value(**this); | |
| operator++(); | | operator++(); | |
| return DerefWrapper_<std::string>(value); | | return DerefWrapper_<std::string>(value); | |
| } | | } | |
| | | | |
| /** Return the docid at the current position. | | /** Return the docid at the current position. | |
| * | | * | |
| * If we're iterating over values of a document, this method will thro
w | | * If we're iterating over values of a document, this method will thro
w | |
| * Xapian::InvalidOperationError. | | * Xapian::InvalidOperationError. | |
| */ | | */ | |
|
| Xapian::docid get_docid() const; | | Xapian::docid get_docid() const XAPIAN_PURE_FUNCTION; | |
| | | | |
| /** Return the value slot number for the current position. | | /** Return the value slot number for the current position. | |
| * | | * | |
| * If the iterator is over all values in a slot, this returns that slo
t's | | * If the iterator is over all values in a slot, this returns that slo
t's | |
| * number. If the iterator is over the values in a particular documen
t, | | * number. If the iterator is over the values in a particular documen
t, | |
| * it returns the number of each slot in turn. | | * it returns the number of each slot in turn. | |
| */ | | */ | |
|
| Xapian::valueno get_valueno() const; | | Xapian::valueno get_valueno() const XAPIAN_PURE_FUNCTION; | |
| | | | |
| /** Advance the iterator to document id or value slot @a docid_or_slot. | | /** Advance the iterator to document id or value slot @a docid_or_slot. | |
| * | | * | |
| * If this iterator is over values in a document, then this method | | * If this iterator is over values in a document, then this method | |
| * advances the iterator to value slot @a docid_or_slot, or the first
slot | | * advances the iterator to value slot @a docid_or_slot, or the first
slot | |
| * after it if there is no value in slot @a slot. | | * after it if there is no value in slot @a slot. | |
| * | | * | |
| * If this iterator is over values in a particular slot, then this | | * If this iterator is over values in a particular slot, then this | |
| * method advances the iterator to document id @a docid_or_slot, or th
e | | * method advances the iterator to document id @a docid_or_slot, or th
e | |
| * first document id after it if there is no value in the slot we're | | * first document id after it if there is no value in the slot we're | |
| | | | |
| skipping to change at line 140 | | skipping to change at line 146 | |
| * | | * | |
| * Currently the inmemory and remote backends behave in the | | * Currently the inmemory and remote backends behave in the | |
| * latter way because they don't support streamed values and so skip_t
o() | | * latter way because they don't support streamed values and so skip_t
o() | |
| * must check each document it skips over which is significantly slowe
r. | | * must check each document it skips over which is significantly slowe
r. | |
| * | | * | |
| * @param docid The document id to check. | | * @param docid The document id to check. | |
| */ | | */ | |
| bool check(Xapian::docid docid); | | bool check(Xapian::docid docid); | |
| | | | |
| /// Return a string describing this object. | | /// Return a string describing this object. | |
|
| std::string get_description() const; | | std::string get_description() const XAPIAN_PURE_FUNCTION; | |
| | | | |
| /** @private @internal ValueIterator is what the C++ STL calls an | | /** @private @internal ValueIterator is what the C++ STL calls an | |
| * input_iterator. | | * input_iterator. | |
| * | | * | |
| * The following typedefs allow std::iterator_traits<> to work so that | | * The following typedefs allow std::iterator_traits<> to work so that | |
| * this iterator can be used with the STL. | | * this iterator can be used with the STL. | |
| * | | * | |
| * These are deliberately hidden from the Doxygen-generated docs, as t
he | | * These are deliberately hidden from the Doxygen-generated docs, as t
he | |
| * machinery here isn't interesting to API users. They just need to k
now | | * machinery here isn't interesting to API users. They just need to k
now | |
| * that Xapian iterator classes are compatible with the STL. | | * that Xapian iterator classes are compatible with the STL. | |
| | | | |
| skipping to change at line 166 | | skipping to change at line 172 | |
| typedef std::string value_type; | | typedef std::string value_type; | |
| /// @private | | /// @private | |
| typedef Xapian::doccount_diff difference_type; | | typedef Xapian::doccount_diff difference_type; | |
| /// @private | | /// @private | |
| typedef std::string * pointer; | | typedef std::string * pointer; | |
| /// @private | | /// @private | |
| typedef std::string & reference; | | typedef std::string & reference; | |
| // @} | | // @} | |
| }; | | }; | |
| | | | |
|
| | | bool | |
| | | XAPIAN_NOTHROW(operator==(const ValueIterator &a, const ValueIterator &b)); | |
| | | | |
| /// Equality test for ValueIterator objects. | | /// Equality test for ValueIterator objects. | |
| inline bool | | inline bool | |
| operator==(const ValueIterator &a, const ValueIterator &b) | | operator==(const ValueIterator &a, const ValueIterator &b) | |
| { | | { | |
| // Use a pointer comparison - this ensures both that (a == a) and corre
ct | | // Use a pointer comparison - this ensures both that (a == a) and corre
ct | |
| // handling of end iterators (which we ensure have NULL internals). | | // handling of end iterators (which we ensure have NULL internals). | |
| return a.internal == b.internal; | | return a.internal == b.internal; | |
| } | | } | |
| | | | |
|
| | | bool | |
| | | XAPIAN_NOTHROW(operator!=(const ValueIterator &a, const ValueIterator &b)); | |
| | | | |
| /// Inequality test for ValueIterator objects. | | /// Inequality test for ValueIterator objects. | |
| inline bool | | inline bool | |
| operator!=(const ValueIterator &a, const ValueIterator &b) | | operator!=(const ValueIterator &a, const ValueIterator &b) | |
| { | | { | |
| return !(a == b); | | return !(a == b); | |
| } | | } | |
| | | | |
| } | | } | |
| | | | |
| #endif // XAPIAN_INCLUDED_VALUEITERATOR_H | | #endif // XAPIAN_INCLUDED_VALUEITERATOR_H | |
| | | | |
End of changes. 9 change blocks. |
| 5 lines changed or deleted | | 18 lines changed or added | |
|
| weight.h | | weight.h | |
| | | | |
| skipping to change at line 67 | | skipping to change at line 67 | |
| * | | * | |
| * @param flag The stat_flags value for a required statistic. | | * @param flag The stat_flags value for a required statistic. | |
| */ | | */ | |
| void need_stat(stat_flags flag) { | | void need_stat(stat_flags flag) { | |
| stats_needed = stat_flags(stats_needed | flag); | | stats_needed = stat_flags(stats_needed | flag); | |
| } | | } | |
| | | | |
| /** Allow the subclass to perform any initialisation it needs to. | | /** Allow the subclass to perform any initialisation it needs to. | |
| * | | * | |
| * @param factor Any scaling factor (e.g. from OP_SCALE_WEIGHT). | | * @param factor Any scaling factor (e.g. from OP_SCALE_WEIGHT). | |
|
| | | * If the Weight object is for the term-independent | |
| | | * weight supplied by get_sumextra()/get_maxextra(), | |
| | | * then init(0.0) is called (starting from Xapian | |
| | | * 1.2.11 and 1.3.1 - earlier versions failed to | |
| | | * call init() for such Weight objects). | |
| */ | | */ | |
| virtual void init(double factor) = 0; | | virtual void init(double factor) = 0; | |
| | | | |
| private: | | private: | |
| /// Don't allow assignment. | | /// Don't allow assignment. | |
| void operator=(const Weight &); | | void operator=(const Weight &); | |
| | | | |
| /// A bitmask of the statistics this weighting scheme needs. | | /// A bitmask of the statistics this weighting scheme needs. | |
| stat_flags stats_needed; | | stat_flags stats_needed; | |
| | | | |
| | | | |
| skipping to change at line 98 | | skipping to change at line 103 | |
| | | | |
| /// The number of relevant documents which this term indexes. | | /// The number of relevant documents which this term indexes. | |
| Xapian::doccount reltermfreq_; | | Xapian::doccount reltermfreq_; | |
| | | | |
| /// The length of the query. | | /// The length of the query. | |
| Xapian::termcount query_length_; | | Xapian::termcount query_length_; | |
| | | | |
| /// The within-query-frequency of this term. | | /// The within-query-frequency of this term. | |
| Xapian::termcount wqf_; | | Xapian::termcount wqf_; | |
| | | | |
|
| /// An lower bound on the maximum length of any document in the databas
e. | | /// A lower bound on the minimum length of any document in the database
. | |
| Xapian::termcount doclength_lower_bound_; | | Xapian::termcount doclength_lower_bound_; | |
| | | | |
| /// An upper bound on the maximum length of any document in the databas
e. | | /// An upper bound on the maximum length of any document in the databas
e. | |
| Xapian::termcount doclength_upper_bound_; | | Xapian::termcount doclength_upper_bound_; | |
| | | | |
| /// An upper bound on the wdf of this term. | | /// An upper bound on the wdf of this term. | |
| Xapian::termcount wdf_upper_bound_; | | Xapian::termcount wdf_upper_bound_; | |
| | | | |
| public: | | public: | |
| class Internal; | | class Internal; | |
| | | | |
| skipping to change at line 292 | | skipping to change at line 297 | |
| | | | |
| /// The number of relevant documents which this term indexes. | | /// The number of relevant documents which this term indexes. | |
| Xapian::doccount get_reltermfreq() const { return reltermfreq_; } | | Xapian::doccount get_reltermfreq() const { return reltermfreq_; } | |
| | | | |
| /// The length of the query. | | /// The length of the query. | |
| Xapian::termcount get_query_length() const { return query_length_; } | | Xapian::termcount get_query_length() const { return query_length_; } | |
| | | | |
| /// The within-query-frequency of this term. | | /// The within-query-frequency of this term. | |
| Xapian::termcount get_wqf() const { return wqf_; } | | Xapian::termcount get_wqf() const { return wqf_; } | |
| | | | |
|
| /** An lower bound on the maximum length of any document in the databas
e. | | /** An upper bound on the maximum length of any document in the databas
e. | |
| * | | * | |
| * This should only be used by get_maxpart() and get_maxextra(). | | * This should only be used by get_maxpart() and get_maxextra(). | |
| */ | | */ | |
| Xapian::termcount get_doclength_upper_bound() const { | | Xapian::termcount get_doclength_upper_bound() const { | |
| return doclength_upper_bound_; | | return doclength_upper_bound_; | |
| } | | } | |
| | | | |
|
| /** An upper bound on the maximum length of any document in the databas | | /** A lower bound on the minimum length of any document in the database | |
| e. | | . | |
| | | * | |
| | | * This bound does not include any zero-length documents. | |
| * | | * | |
| * This should only be used by get_maxpart() and get_maxextra(). | | * This should only be used by get_maxpart() and get_maxextra(). | |
| */ | | */ | |
| Xapian::termcount get_doclength_lower_bound() const { | | Xapian::termcount get_doclength_lower_bound() const { | |
| return doclength_lower_bound_; | | return doclength_lower_bound_; | |
| } | | } | |
| | | | |
| /** An upper bound on the wdf of this term. | | /** An upper bound on the wdf of this term. | |
| * | | * | |
| * This should only be used by get_maxpart() and get_maxextra(). | | * This should only be used by get_maxpart() and get_maxextra(). | |
| | | | |
| skipping to change at line 343 | | skipping to change at line 350 | |
| BoolWeight * unserialise(const std::string & s) const; | | BoolWeight * unserialise(const std::string & s) const; | |
| | | | |
| double get_sumpart(Xapian::termcount wdf, | | double get_sumpart(Xapian::termcount wdf, | |
| Xapian::termcount doclen) const; | | Xapian::termcount doclen) const; | |
| double get_maxpart() const; | | double get_maxpart() const; | |
| | | | |
| double get_sumextra(Xapian::termcount doclen) const; | | double get_sumextra(Xapian::termcount doclen) const; | |
| double get_maxextra() const; | | double get_maxextra() const; | |
| }; | | }; | |
| | | | |
|
| | | /// Xapian::Weight subclass implementing the tf-idf weighting scheme. | |
| | | class XAPIAN_VISIBILITY_DEFAULT TfIdfWeight : public Weight { | |
| | | /* Three character string indicating the normalizations for tf(wdf), id | |
| | | f and | |
| | | tfidf weight. */ | |
| | | std::string normalizations; | |
| | | | |
| | | TfIdfWeight * clone() const; | |
| | | | |
| | | void init(double factor); | |
| | | | |
| | | /* When additional normalizations are implemented in the future, the ad | |
| | | ditional statistics for them | |
| | | should be accessed by these functions. */ | |
| | | double get_wdfn(Xapian::termcount wdf, char c) const; | |
| | | double get_idfn(Xapian::doccount termfreq, char c) const; | |
| | | double get_wtn(double wt, char c) const; | |
| | | | |
| | | public: | |
| | | /** Construct a TfIdfWeight | |
| | | * | |
| | | * @param normalizations A three character string indicating the norm | |
| | | alizations | |
| | | * to be used for the tf(wdf), idf and document | |
| | | weight | |
| | | * respectively. | |
| | | * | |
| | | * The first character specifies the normalizat | |
| | | ion | |
| | | * for the wdf for which the following normaliz | |
| | | ations | |
| | | * are currently available: | |
| | | * | |
| | | * 'n':None. wdfn=wdf | |
| | | * 'b':Boolean wdfn=1 if term in document el | |
| | | se wdfn=0 | |
| | | * 's':Square wdfn=wdf*wdf | |
| | | * 'l':Logarithmic wdfn=1+log<sub>e</sub>(wdf) | |
| | | * | |
| | | * The Max-wdf and Augmented Max wdf normalizat | |
| | | ions aren't yet implemented. | |
| | | * | |
| | | * | |
| | | * The second character indicates the normaliza | |
| | | tion | |
| | | * for the idf, the following of which are curr | |
| | | ently | |
| | | * available: | |
| | | * | |
| | | * 'n':None idfn=1 | |
| | | * 't':TfIdf idfn=log(N/Termfreq) where N is t | |
| | | he number of documents in | |
| | | * collection and Termfreq is the nu | |
| | | mber of documents which are | |
| | | * indexed by the term t. | |
| | | * 'p':Prob idfn=log((N-Termfreq)/Termfreq) | |
| | | * | |
| | | * | |
| | | * The third and the final character indicates | |
| | | the | |
| | | * normalization for the document weight of whi | |
| | | ch | |
| | | * the following are currently available: | |
| | | * | |
| | | * 'n':None wtn=tfn*idfn | |
| | | * Implementing more normalizations for the wei | |
| | | ght requires access to | |
| | | * statistics such as the weight of all terms i | |
| | | n the document indexed by | |
| | | * the term in the query. This is not available | |
| | | from the current backend. | |
| | | * | |
| | | * | |
| | | * More normalizations for all components can b | |
| | | e implemented by | |
| | | * changing the backend to acquire the statisti | |
| | | cs | |
| | | * required for the normalizations which are no | |
| | | t | |
| | | * currently available from Xapian::Weight. | |
| | | * | |
| | | * | |
| | | * The default string is "ntn". | |
| | | */ | |
| | | | |
| | | explicit TfIdfWeight(const std::string &normalizations); | |
| | | | |
| | | TfIdfWeight() | |
| | | : normalizations("ntn") | |
| | | { | |
| | | need_stat(TERMFREQ); | |
| | | need_stat(WDF); | |
| | | need_stat(WDF_MAX); | |
| | | need_stat(COLLECTION_SIZE); | |
| | | } | |
| | | | |
| | | std::string name() const; | |
| | | | |
| | | std::string serialise() const; | |
| | | TfIdfWeight * unserialise(const std::string & s) const; | |
| | | | |
| | | double get_sumpart(Xapian::termcount wdf, | |
| | | Xapian::termcount doclen) const; | |
| | | double get_maxpart() const; | |
| | | | |
| | | double get_sumextra(Xapian::termcount doclen) const; | |
| | | double get_maxextra() const; | |
| | | }; | |
| | | | |
| /// Xapian::Weight subclass implementing the BM25 probabilistic formula. | | /// Xapian::Weight subclass implementing the BM25 probabilistic formula. | |
| class XAPIAN_VISIBILITY_DEFAULT BM25Weight : public Weight { | | class XAPIAN_VISIBILITY_DEFAULT BM25Weight : public Weight { | |
| /// Factor to multiply the document length by. | | /// Factor to multiply the document length by. | |
| mutable Xapian::doclength len_factor; | | mutable Xapian::doclength len_factor; | |
| | | | |
| /// Factor combining all the document independent factors. | | /// Factor combining all the document independent factors. | |
| mutable double termweight; | | mutable double termweight; | |
| | | | |
| /// The BM25 parameters. | | /// The BM25 parameters. | |
| double param_k1, param_k2, param_k3, param_b; | | double param_k1, param_k2, param_k3, param_b; | |
| | | | |
| skipping to change at line 407 | | skipping to change at line 503 | |
| param_b = 0; | | param_b = 0; | |
| } else if (param_b > 1) { | | } else if (param_b > 1) { | |
| param_b = 1; | | param_b = 1; | |
| } | | } | |
| need_stat(COLLECTION_SIZE); | | need_stat(COLLECTION_SIZE); | |
| need_stat(RSET_SIZE); | | need_stat(RSET_SIZE); | |
| need_stat(TERMFREQ); | | need_stat(TERMFREQ); | |
| need_stat(RELTERMFREQ); | | need_stat(RELTERMFREQ); | |
| need_stat(WDF); | | need_stat(WDF); | |
| need_stat(WDF_MAX); | | need_stat(WDF_MAX); | |
|
| need_stat(WDF); | | | |
| if (param_k2 != 0 || (param_k1 != 0 && param_b != 0)) { | | if (param_k2 != 0 || (param_k1 != 0 && param_b != 0)) { | |
| need_stat(DOC_LENGTH_MIN); | | need_stat(DOC_LENGTH_MIN); | |
| need_stat(AVERAGE_LENGTH); | | need_stat(AVERAGE_LENGTH); | |
| } | | } | |
| if (param_k1 != 0 && param_b != 0) need_stat(DOC_LENGTH); | | if (param_k1 != 0 && param_b != 0) need_stat(DOC_LENGTH); | |
| if (param_k2 != 0) need_stat(QUERY_LENGTH); | | if (param_k2 != 0) need_stat(QUERY_LENGTH); | |
| if (param_k3 != 0) need_stat(WQF); | | if (param_k3 != 0) need_stat(WQF); | |
| } | | } | |
| | | | |
| BM25Weight() | | BM25Weight() | |
| : param_k1(1), param_k2(0), param_k3(1), param_b(0.5), | | : param_k1(1), param_k2(0), param_k3(1), param_b(0.5), | |
| param_min_normlen(0.5) | | param_min_normlen(0.5) | |
| { | | { | |
| need_stat(COLLECTION_SIZE); | | need_stat(COLLECTION_SIZE); | |
| need_stat(RSET_SIZE); | | need_stat(RSET_SIZE); | |
| need_stat(TERMFREQ); | | need_stat(TERMFREQ); | |
| need_stat(RELTERMFREQ); | | need_stat(RELTERMFREQ); | |
| need_stat(WDF); | | need_stat(WDF); | |
| need_stat(WDF_MAX); | | need_stat(WDF_MAX); | |
|
| need_stat(WDF); | | | |
| need_stat(DOC_LENGTH_MIN); | | need_stat(DOC_LENGTH_MIN); | |
| need_stat(AVERAGE_LENGTH); | | need_stat(AVERAGE_LENGTH); | |
| need_stat(DOC_LENGTH); | | need_stat(DOC_LENGTH); | |
| need_stat(WQF); | | need_stat(WQF); | |
| } | | } | |
| | | | |
| std::string name() const; | | std::string name() const; | |
| | | | |
| std::string serialise() const; | | std::string serialise() const; | |
| BM25Weight * unserialise(const std::string & s) const; | | BM25Weight * unserialise(const std::string & s) const; | |
| | | | |
| skipping to change at line 476 | | skipping to change at line 570 | |
| TradWeight * clone() const; | | TradWeight * clone() const; | |
| | | | |
| void init(double factor); | | void init(double factor); | |
| | | | |
| public: | | public: | |
| /** Construct a TradWeight. | | /** Construct a TradWeight. | |
| * | | * | |
| * @param k A non-negative parameter controlling how influential | | * @param k A non-negative parameter controlling how influential | |
| * within-document-frequency (wdf) and document length are. | | * within-document-frequency (wdf) and document length are. | |
| * k=0 means that wdf and document length don't affect the | | * k=0 means that wdf and document length don't affect the | |
|
| * weights. The larger k1 is, the more they do. (default 1) | | * weights. The larger k is, the more they do. (default 1) | |
| */ | | */ | |
| explicit TradWeight(double k = 1.0) : param_k(k) { | | explicit TradWeight(double k = 1.0) : param_k(k) { | |
| if (param_k < 0) param_k = 0; | | if (param_k < 0) param_k = 0; | |
| if (param_k != 0.0) { | | if (param_k != 0.0) { | |
| need_stat(AVERAGE_LENGTH); | | need_stat(AVERAGE_LENGTH); | |
| need_stat(DOC_LENGTH); | | need_stat(DOC_LENGTH); | |
| } | | } | |
| need_stat(COLLECTION_SIZE); | | need_stat(COLLECTION_SIZE); | |
| need_stat(RSET_SIZE); | | need_stat(RSET_SIZE); | |
| need_stat(TERMFREQ); | | need_stat(TERMFREQ); | |
| need_stat(RELTERMFREQ); | | need_stat(RELTERMFREQ); | |
| need_stat(DOC_LENGTH_MIN); | | need_stat(DOC_LENGTH_MIN); | |
| need_stat(WDF); | | need_stat(WDF); | |
| need_stat(WDF_MAX); | | need_stat(WDF_MAX); | |
|
| need_stat(WDF); | | | |
| } | | } | |
| | | | |
| std::string name() const; | | std::string name() const; | |
| | | | |
| std::string serialise() const; | | std::string serialise() const; | |
| TradWeight * unserialise(const std::string & s) const; | | TradWeight * unserialise(const std::string & s) const; | |
| | | | |
| double get_sumpart(Xapian::termcount wdf, | | double get_sumpart(Xapian::termcount wdf, | |
| Xapian::termcount doclen) const; | | Xapian::termcount doclen) const; | |
| double get_maxpart() const; | | double get_maxpart() const; | |
| | | | |
End of changes. 9 change blocks. |
| 8 lines changed or deleted | | 121 lines changed or added | |
|
| xapian.h | | xapian.h | |
| /** @file xapian.h | | /** @file xapian.h | |
| * @brief Public interfaces for the Xapian library. | | * @brief Public interfaces for the Xapian library. | |
| */ | | */ | |
|
| // Copyright (C) 2003,2004,2005,2007,2008,2009,2010 Olly Betts | | // Copyright (C) 2003,2004,2005,2007,2008,2009,2010,2012,2013 Olly Betts | |
| // | | // | |
| // This program is free software; you can redistribute it and/or modify | | // This program is free software; you can redistribute it and/or modify | |
| // it under the terms of the GNU General Public License as published by | | // it under the terms of the GNU General Public License as published by | |
| // the Free Software Foundation; either version 2 of the License, or | | // the Free Software Foundation; either version 2 of the License, or | |
| // (at your option) any later version. | | // (at your option) any later version. | |
| // | | // | |
| // This program is distributed in the hope that it will be useful, | | // This program is distributed in the hope that it will be useful, | |
| // but WITHOUT ANY WARRANTY; without even the implied warranty of | | // but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| // GNU General Public License for more details. | | // GNU General Public License for more details. | |
| // | | // | |
| // You should have received a copy of the GNU General Public License | | // You should have received a copy of the GNU General Public License | |
| // along with this program; if not, write to the Free Software | | // along with this program; if not, write to the Free Software | |
| // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 US
A | | // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 US
A | |
| | | | |
| #ifndef XAPIAN_INCLUDED_XAPIAN_H | | #ifndef XAPIAN_INCLUDED_XAPIAN_H | |
| #define XAPIAN_INCLUDED_XAPIAN_H | | #define XAPIAN_INCLUDED_XAPIAN_H | |
| | | | |
|
| | | #ifdef slots | |
| | | # ifdef Q_OBJECT | |
| | | // Qt headers '#define slots' by default, which clashes with us using it as | |
| | | a | |
| | | // class member name. Including <xapian.h> first is a simple workaround, o | |
| | | r | |
| | | // you can use 'no_keywords' to stop Qt polluting the global macro namespac | |
| | | e, | |
| | | // as described here: | |
| | | // | |
| | | // http://qt-project.org/doc/qt-5.0/signalsandslots.html#using-qt-with-3rd- | |
| | | party-signals-and-slots | |
| | | # error "Include <xapian.h> before Qt headers, or put 'CONFIG += no_keywor | |
| | | ds' in your .pro file and use Q_SLOTS instead of slots, etc" | |
| | | # endif | |
| | | # ifdef WT_API | |
| | | // Argh, copycat polluters! | |
| | | # error "Include <xapian.h> before Wt headers, or define WT_NO_SLOT_MACROS | |
| | | to stop Wt from defining the macros 'slots' and 'SLOT()'" | |
| | | # endif | |
| | | #endif | |
| | | | |
| | | // Define so that deprecation warnings are given to API users, but not | |
| | | // while building the library. | |
| | | #define XAPIAN_IN_XAPIAN_H | |
| | | | |
| // Set defines for library version and check C++ ABI versions match. | | // Set defines for library version and check C++ ABI versions match. | |
| #include <xapian/version.h> | | #include <xapian/version.h> | |
| | | | |
| // Types | | // Types | |
| #include <xapian/types.h> | | #include <xapian/types.h> | |
| | | | |
|
| | | // Function attributes | |
| | | #include <xapian/attributes.h> | |
| | | | |
| // Exceptions | | // Exceptions | |
| #include <xapian/error.h> | | #include <xapian/error.h> | |
| #include <xapian/errorhandler.h> | | #include <xapian/errorhandler.h> | |
| | | | |
| // Access to databases, documents, etc. | | // Access to databases, documents, etc. | |
| #include <xapian/database.h> | | #include <xapian/database.h> | |
| #include <xapian/dbfactory.h> | | #include <xapian/dbfactory.h> | |
| #include <xapian/document.h> | | #include <xapian/document.h> | |
| #include <xapian/positioniterator.h> | | #include <xapian/positioniterator.h> | |
| #include <xapian/postingiterator.h> | | #include <xapian/postingiterator.h> | |
| | | | |
| skipping to change at line 85 | | skipping to change at line 108 | |
| namespace Xapian { | | namespace Xapian { | |
| | | | |
| // Functions returning library version: | | // Functions returning library version: | |
| | | | |
| /** Report the version string of the library which the program is linked wi
th. | | /** Report the version string of the library which the program is linked wi
th. | |
| * | | * | |
| * This may be different to the version compiled against (given by | | * This may be different to the version compiled against (given by | |
| * XAPIAN_VERSION) if shared libraries are being used. | | * XAPIAN_VERSION) if shared libraries are being used. | |
| */ | | */ | |
| XAPIAN_VISIBILITY_DEFAULT | | XAPIAN_VISIBILITY_DEFAULT | |
|
| const char * version_string(); | | const char * XAPIAN_NOTHROW(version_string()) XAPIAN_CONST_FUNCTION; | |
| | | | |
| /** Report the major version of the library which the program is linked wit
h. | | /** Report the major version of the library which the program is linked wit
h. | |
| * | | * | |
| * This may be different to the version compiled against (given by | | * This may be different to the version compiled against (given by | |
| * XAPIAN_MAJOR_VERSION) if shared libraries are being used. | | * XAPIAN_MAJOR_VERSION) if shared libraries are being used. | |
| */ | | */ | |
| XAPIAN_VISIBILITY_DEFAULT | | XAPIAN_VISIBILITY_DEFAULT | |
|
| int major_version(); | | int XAPIAN_NOTHROW(major_version()) XAPIAN_CONST_FUNCTION; | |
| | | | |
| /** Report the minor version of the library which the program is linked wit
h. | | /** Report the minor version of the library which the program is linked wit
h. | |
| * | | * | |
| * This may be different to the version compiled against (given by | | * This may be different to the version compiled against (given by | |
| * XAPIAN_MINOR_VERSION) if shared libraries are being used. | | * XAPIAN_MINOR_VERSION) if shared libraries are being used. | |
| */ | | */ | |
| XAPIAN_VISIBILITY_DEFAULT | | XAPIAN_VISIBILITY_DEFAULT | |
|
| int minor_version(); | | int XAPIAN_NOTHROW(minor_version()) XAPIAN_CONST_FUNCTION; | |
| | | | |
| /** Report the revision of the library which the program is linked with. | | /** Report the revision of the library which the program is linked with. | |
| * | | * | |
| * This may be different to the version compiled against (given by | | * This may be different to the version compiled against (given by | |
| * XAPIAN_REVISION) if shared libraries are being used. | | * XAPIAN_REVISION) if shared libraries are being used. | |
| */ | | */ | |
| XAPIAN_VISIBILITY_DEFAULT | | XAPIAN_VISIBILITY_DEFAULT | |
|
| int revision(); | | int XAPIAN_NOTHROW(revision()) XAPIAN_CONST_FUNCTION; | |
| | | | |
| } | | } | |
| | | | |
|
| | | #undef XAPIAN_IN_XAPIAN_H | |
| | | | |
| #endif /* XAPIAN_INCLUDED_XAPIAN_H */ | | #endif /* XAPIAN_INCLUDED_XAPIAN_H */ | |
| | | | |
End of changes. 8 change blocks. |
| 5 lines changed or deleted | | 36 lines changed or added | |
|