/usr/include/xapian/eset.h is in libxapian-dev 1.4.3-2+deb9u3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 | /** @file eset.h
* @brief Class representing a list of query expansion terms
*/
/* Copyright (C) 2015,2016 Olly Betts
*
* 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 the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
* USA
*/
#ifndef XAPIAN_INCLUDED_ESET_H
#define XAPIAN_INCLUDED_ESET_H
#if !defined XAPIAN_IN_XAPIAN_H && !defined XAPIAN_LIB_BUILD
# error "Never use <xapian/eset.h> directly; include <xapian.h> instead."
#endif
#include <iterator>
#include <string>
#include <xapian/attributes.h>
#include <xapian/intrusive_ptr.h>
#include <xapian/stem.h>
#include <xapian/types.h>
#include <xapian/visibility.h>
namespace Xapian {
class ESetIterator;
/// Class representing a list of search results.
class XAPIAN_VISIBILITY_DEFAULT ESet {
friend class ESetIterator;
public:
/// Class representing the ESet internals.
class Internal;
/// @private @internal Reference counted internals.
Xapian::Internal::intrusive_ptr<Internal> internal;
/** Copying is allowed.
*
* The internals are reference counted, so copying is cheap.
*/
ESet(const ESet & o);
/** Copying is allowed.
*
* The internals are reference counted, so assignment is cheap.
*/
ESet & operator=(const ESet & o);
/** Default constructor.
*
* Creates an empty ESet, mostly useful as a placeholder.
*/
ESet();
/// Destructor.
~ESet();
/** Return number of items in this ESet object. */
Xapian::doccount size() const;
/** Return true if this ESet object is empty. */
bool empty() const { return size() == 0; }
/** Return a bound on the full size of this ESet object.
*
* This is a bound on size() if get_eset() had been called with
* maxitems set high enough that all results were returned.
*/
Xapian::termcount get_ebound() const;
/** Efficiently swap this ESet object with another. */
void swap(ESet & o) { internal.swap(o.internal); }
/** Return iterator pointing to the first item in this ESet. */
ESetIterator begin() const;
/** Return iterator pointing to just after the last item in this ESet. */
ESetIterator end() const;
/** Return iterator pointing to the i-th object in this ESet. */
ESetIterator operator[](Xapian::doccount i) const;
/** Return iterator pointing to the last object in this ESet. */
ESetIterator back() const;
/// Return a string describing this object.
std::string get_description() const;
/** @private @internal ESet is what the C++ STL calls a container.
*
* The following typedefs allow the class to be used in templates in the
* same way the standard containers can be.
*
* These are deliberately hidden from the Doxygen-generated docs, as the
* machinery here isn't interesting to API users. They just need to know
* that Xapian container classes are compatible with the STL.
*
* See "The C++ Programming Language", 3rd ed. section 16.3.1:
*/
// @{
/// @private
typedef Xapian::ESetIterator value_type;
/// @private
typedef Xapian::termcount size_type;
/// @private
typedef Xapian::termcount_diff difference_type;
/// @private
typedef Xapian::ESetIterator iterator;
/// @private
typedef Xapian::ESetIterator const_iterator;
/// @private
typedef value_type * pointer;
/// @private
typedef const value_type * const_pointer;
/// @private
typedef value_type & reference;
/// @private
typedef const value_type & const_reference;
// @}
//
/** @private @internal ESet is what the C++ STL calls a container.
*
* The following methods allow the class to be used in templates in the
* same way the standard containers can be.
*
* These are deliberately hidden from the Doxygen-generated docs, as the
* machinery here isn't interesting to API users. They just need to know
* that Xapian container classes are compatible with the STL.
*/
// @{
// The size is fixed once created.
Xapian::doccount max_size() const { return size(); }
// @}
};
/// Iterator over a Xapian::ESet.
class XAPIAN_VISIBILITY_DEFAULT ESetIterator {
friend class ESet;
ESetIterator(const Xapian::ESet & eset_, Xapian::doccount off_from_end_)
: eset(eset_), off_from_end(off_from_end_) { }
public:
/** @private @internal The ESet we are iterating over. */
Xapian::ESet eset;
/** @private @internal The current position of the iterator.
*
* We store the offset from the end of @a eset, since that means
* ESet::end() just needs to set this member to 0.
*/
Xapian::ESet::size_type off_from_end;
/** Create an unpositioned ESetIterator. */
ESetIterator() : off_from_end(0) { }
/** Get the term at the current position. */
std::string operator*() const;
/// Advance the iterator to the next position.
ESetIterator & operator++() {
--off_from_end;
return *this;
}
/// Advance the iterator to the next position (postfix version).
ESetIterator operator++(int) {
ESetIterator retval = *this;
--off_from_end;
return retval;
}
/// Move the iterator to the previous position.
ESetIterator & operator--() {
++off_from_end;
return *this;
}
/// Move the iterator to the previous position (postfix version).
ESetIterator operator--(int) {
ESetIterator retval = *this;
++off_from_end;
return retval;
}
/** @private @internal ESetIterator is what the C++ STL calls an
* random_access_iterator.
*
* The following typedefs allow std::iterator_traits<> to work so that
* this iterator can be used with the STL.
*
* These are deliberately hidden from the Doxygen-generated docs, as the
* machinery here isn't interesting to API users. They just need to know
* that Xapian iterator classes are compatible with the STL.
*/
// @{
/// @private
typedef std::random_access_iterator_tag iterator_category;
/// @private
typedef std::string value_type;
/// @private
typedef Xapian::termcount_diff difference_type;
/// @private
typedef std::string * pointer;
/// @private
typedef std::string & reference;
// @}
/// Move the iterator forwards by n positions.
ESetIterator & operator+=(difference_type n) {
off_from_end -= n;
return *this;
}
/// Move the iterator back by n positions.
ESetIterator & operator-=(difference_type n) {
off_from_end += n;
return *this;
}
/** Return the iterator incremented by @a n positions.
*
* If @a n is negative, decrements by (-n) positions.
*/
ESetIterator operator+(difference_type n) const {
return ESetIterator(eset, off_from_end - n);
}
/** Return the iterator decremented by @a n positions.
*
* If @a n is negative, increments by (-n) positions.
*/
ESetIterator operator-(difference_type n) const {
return ESetIterator(eset, off_from_end + n);
}
/** Return the number of positions between @a o and this iterator. */
difference_type operator-(const ESetIterator& o) const {
return difference_type(o.off_from_end) - difference_type(off_from_end);
}
/** Get the weight for the current position. */
double get_weight() const;
/// Return a string describing this object.
std::string get_description() const;
};
bool
XAPIAN_NOTHROW(operator==(const ESetIterator &a, const ESetIterator &b));
/// Equality test for ESetIterator objects.
inline bool
operator==(const ESetIterator &a, const ESetIterator &b) XAPIAN_NOEXCEPT
{
return a.off_from_end == b.off_from_end;
}
inline bool
XAPIAN_NOTHROW(operator!=(const ESetIterator &a, const ESetIterator &b));
/// Inequality test for ESetIterator objects.
inline bool
operator!=(const ESetIterator &a, const ESetIterator &b) XAPIAN_NOEXCEPT
{
return !(a == b);
}
bool
XAPIAN_NOTHROW(operator<(const ESetIterator &a, const ESetIterator &b));
/// Inequality test for ESetIterator objects.
inline bool
operator<(const ESetIterator &a, const ESetIterator &b) XAPIAN_NOEXCEPT
{
return a.off_from_end > b.off_from_end;
}
inline bool
XAPIAN_NOTHROW(operator>(const ESetIterator &a, const ESetIterator &b));
/// Inequality test for ESetIterator objects.
inline bool
operator>(const ESetIterator &a, const ESetIterator &b) XAPIAN_NOEXCEPT
{
return b < a;
}
inline bool
XAPIAN_NOTHROW(operator>=(const ESetIterator &a, const ESetIterator &b));
/// Inequality test for ESetIterator objects.
inline bool
operator>=(const ESetIterator &a, const ESetIterator &b) XAPIAN_NOEXCEPT
{
return !(a < b);
}
inline bool
XAPIAN_NOTHROW(operator<=(const ESetIterator &a, const ESetIterator &b));
/// Inequality test for ESetIterator objects.
inline bool
operator<=(const ESetIterator &a, const ESetIterator &b) XAPIAN_NOEXCEPT
{
return !(b < a);
}
/** Return ESetIterator @a it incremented by @a n positions.
*
* If @a n is negative, decrements by (-n) positions.
*/
inline ESetIterator
operator+(ESetIterator::difference_type n, const ESetIterator& it)
{
return it + n;
}
// Inlined methods of ESet which need ESetIterator to have been defined:
inline ESetIterator
ESet::begin() const {
return ESetIterator(*this, size());
}
inline ESetIterator
ESet::end() const {
// Decrementing the result of end() needs to work, so we must pass in
// *this here.
return ESetIterator(*this, 0);
}
inline ESetIterator
ESet::operator[](Xapian::doccount i) const {
return ESetIterator(*this, size() - i);
}
inline ESetIterator
ESet::back() const {
return ESetIterator(*this, 1);
}
}
#endif // XAPIAN_INCLUDED_ESET_H
|