Branch data Line data Source code
1 : : /** @file valueiterator.cc
2 : : * @brief Class for iterating over document values.
3 : : */
4 : : /* Copyright (C) 2008,2009 Olly Betts
5 : : *
6 : : * This program is free software; you can redistribute it and/or modify
7 : : * it under the terms of the GNU General Public License as published by
8 : : * the Free Software Foundation; either version 2 of the License, or
9 : : * (at your option) any later version.
10 : : *
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.
15 : : *
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
19 : : */
20 : :
21 : : #include <config.h>
22 : :
23 : : #include "xapian/valueiterator.h"
24 : :
25 : : #include "debuglog.h"
26 : : #include "omassert.h"
27 : : #include "valuelist.h"
28 : :
29 : : using namespace std;
30 : :
31 : : namespace Xapian {
32 : :
33 : 770412 : ValueIterator::ValueIterator() : internal(NULL) { }
34 : :
35 : 1576911 : ValueIterator::~ValueIterator() { }
36 : :
37 : 711518 : ValueIterator::ValueIterator(Internal *internal_) : internal(internal_)
38 : : {
39 : 711518 : internal->next();
40 [ + + # # ]: 711518 : if (internal->at_end()) internal = NULL;
41 : 711518 : }
42 : :
43 : 47491 : ValueIterator::ValueIterator(const ValueIterator & o)
44 : 47491 : : internal(o.internal) { }
45 : :
46 : 47490 : ValueIterator::ValueIterator(const ValueIteratorEnd_ &)
47 : 47490 : : internal(NULL) { }
48 : :
49 : : ValueIterator &
50 : 549509 : ValueIterator::operator=(const ValueIterator & o)
51 : : {
52 : 549509 : internal = o.internal;
53 : 549509 : return *this;
54 : : }
55 : :
56 : : ValueIterator &
57 : 40 : ValueIterator::operator=(const ValueIteratorEnd_ &)
58 : : {
59 : 40 : internal = NULL;
60 : 40 : return *this;
61 : : }
62 : :
63 : : string
64 : 7042922 : ValueIterator::operator*() const
65 : : {
66 : : LOGCALL(API, string, "ValueIterator::operator*", NO_ARGS);
67 : : Assert(internal.get());
68 : 7042922 : RETURN(internal->get_value());
69 : : }
70 : :
71 : : ValueIterator &
72 : 6387887 : ValueIterator::operator++()
73 : : {
74 : : LOGCALL(API, ValueIterator &, "ValueIterator::operator++", NO_ARGS);
75 : : Assert(internal.get());
76 : 6387887 : internal->next();
77 [ + + ]: 6387887 : if (internal->at_end()) internal = NULL;
78 : 6387887 : RETURN(*this);
79 : : }
80 : :
81 : : Xapian::docid
82 : 269734 : ValueIterator::get_docid() const
83 : : {
84 : : LOGCALL(API, Xapian::docid, "ValueIterator::get_docid", NO_ARGS);
85 : : Assert(internal.get());
86 : 269734 : RETURN(internal->get_docid());
87 : : }
88 : :
89 : : Xapian::valueno
90 : 6646367 : ValueIterator::get_valueno() const
91 : : {
92 : : LOGCALL(API, Xapian::valueno, "ValueIterator::get_valueno", NO_ARGS);
93 : : Assert(internal.get());
94 : 6646367 : RETURN(internal->get_valueno());
95 : : }
96 : :
97 : : void
98 : 168867 : ValueIterator::skip_to(Xapian::docid docid_or_slot)
99 : : {
100 : : LOGCALL_VOID(API, "ValueIterator::skip_to", docid_or_slot);
101 : : Assert(internal.get());
102 : 168867 : internal->skip_to(docid_or_slot);
103 [ + + ]: 168867 : if (internal->at_end()) internal = NULL;
104 : 168867 : }
105 : :
106 : : bool
107 : 103898 : ValueIterator::check(Xapian::docid docid)
108 : : {
109 : : LOGCALL(API, bool, "ValueIterator::check", docid);
110 : : Assert(internal.get());
111 [ + + ]: 103898 : if (!internal->check(docid)) return false;
112 [ + + ]: 96006 : if (internal->at_end()) internal = NULL;
113 : 103898 : return true;
114 : : }
115 : :
116 : : std::string
117 : 1 : ValueIterator::get_description() const
118 : : {
119 : 1 : string desc = "ValueIterator(";
120 [ - + ]: 1 : if (internal.get()) desc += internal->get_description();
121 : 1 : desc += ')';
122 : 0 : return desc;
123 : : }
124 : :
125 : : }
|