2 * @brief Metadata for a term in a document
4 /* Copyright 2017 Olly Betts
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation; either version 2 of the
9 * License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
28 TermInfo::add_position(Xapian::termcount wdf_inc
, Xapian::termpos termpos
)
33 positions
.push_back(termpos
);
39 // Optimise the common case of adding positions in ascending order.
40 if (positions
.empty() || termpos
> positions
.back()) {
41 positions
.push_back(termpos
);
45 // We keep positions sorted, so use lower_bound() which can binary chop to
47 auto i
= lower_bound(positions
.cbegin(), positions
.cend(), termpos
);
48 // Add unless termpos is already in the list.
49 if (i
== positions
.cend() || *i
!= termpos
) {
50 positions
.insert(i
, termpos
);
56 TermInfo::remove_position(Xapian::termpos termpos
)
60 if (rare(positions
.empty()))
63 // Special case removing the final position, which we can handle in O(1).
64 if (positions
.back() == termpos
) {
69 // We keep positions sorted, so use lower_bound() which can binary chop to
71 auto i
= lower_bound(positions
.cbegin(), positions
.cend(), termpos
);
72 if (i
== positions
.cend() || *i
!= termpos
) {