Lucene++ - a full-featured, c++ search engine
API Documentation


Loading...
Searching...
No Matches
OpenBitSet.h
Go to the documentation of this file.
1
2// Copyright (c) 2009-2014 Alan Wright. All rights reserved.
3// Distributable under the terms of either the Apache License (Version 2.0)
4// or the GNU Lesser General Public License.
6
7#ifndef OPENBITSET_H
8#define OPENBITSET_H
9
10#include "DocIdSet.h"
11
12namespace Lucene {
13
19class LPPAPI OpenBitSet : public DocIdSet {
20public:
22 OpenBitSet(int64_t numBits = 64);
23
33 OpenBitSet(LongArray bits, int32_t numWords);
34
35 virtual ~OpenBitSet();
36
38
39protected:
40 LongArray bits;
41 int32_t wlen; // number of words (elements) used in the array
42
43public:
45
47 virtual bool isCacheable();
48
50 int64_t capacity();
51
54 int64_t size();
55
57 bool isEmpty();
58
60 LongArray getBits();
61
63 void setBits(LongArray bits);
64
66 int32_t getNumWords();
67
69 void setNumWords(int32_t numWords);
70
72 bool get(int32_t index);
73
76 bool fastGet(int32_t index);
77
79 bool get(int64_t index);
80
83 bool fastGet(int64_t index);
84
87 int32_t getBit(int32_t index);
88
90 void set(int64_t index);
91
94 void fastSet(int32_t index);
95
98 void fastSet(int64_t index);
99
103 void set(int64_t startIndex, int64_t endIndex);
104
107 void fastClear(int32_t index);
108
111 void fastClear(int64_t index);
112
114 void clear(int64_t index);
115
119 void clear(int32_t startIndex, int32_t endIndex);
120
124 void clear(int64_t startIndex, int64_t endIndex);
125
128 bool getAndSet(int32_t index);
129
132 bool getAndSet(int64_t index);
133
136 void fastFlip(int32_t index);
137
140 void fastFlip(int64_t index);
141
143 void flip(int64_t index);
144
147 bool flipAndGet(int32_t index);
148
151 bool flipAndGet(int64_t index);
152
156 void flip(int64_t startIndex, int64_t endIndex);
157
159 int64_t cardinality();
160
163 static int64_t intersectionCount(const OpenBitSetPtr& a, const OpenBitSetPtr& b);
164
167 static int64_t unionCount(const OpenBitSetPtr& a, const OpenBitSetPtr& b);
168
171 static int64_t andNotCount(const OpenBitSetPtr& a, const OpenBitSetPtr& b);
172
175 static int64_t xorCount(const OpenBitSetPtr& a, const OpenBitSetPtr& b);
176
179 int32_t nextSetBit(int32_t index);
180
183 int64_t nextSetBit(int64_t index);
184
186
188 void intersect(const OpenBitSetPtr& other);
189
191 void _union(const OpenBitSetPtr& other);
192
194 void remove(const OpenBitSetPtr& other);
195
197 void _xor(const OpenBitSetPtr& other);
198
200 void _and(const OpenBitSetPtr& other);
201
203 void _or(const OpenBitSetPtr& other);
204
206 void andNot(const OpenBitSetPtr& other);
207
209 bool intersects(const OpenBitSetPtr& other);
210
213 void ensureCapacityWords(int32_t numWords);
214
217 void ensureCapacity(int64_t numBits);
218
221
223 static int32_t bits2words(int64_t numBits);
224
226 virtual bool equals(const LuceneObjectPtr& other);
227
228 virtual int32_t hashCode();
229
230protected:
231 int32_t expandingWordNum(int64_t index);
232};
233
234}
235
236#endif
#define LUCENE_CLASS(Name)
Definition LuceneObject.h:24
A DocIdSet contains a set of doc ids. Implementing classes must only implement iterator to provide ac...
Definition DocIdSet.h:16
An "open" BitSet implementation that allows direct access to the array of words storing the bits.
Definition OpenBitSet.h:19
static int64_t unionCount(const OpenBitSetPtr &a, const OpenBitSetPtr &b)
Returns the popcount or cardinality of the union of the two sets. Neither set is modified.
void set(int64_t index)
Sets a bit, expanding the set size if necessary.
OpenBitSet(LongArray bits, int32_t numWords)
Constructs an OpenBitSet from an existing LongArray.
virtual bool equals(const LuceneObjectPtr &other)
Returns true if both sets have the same bits set.
virtual LuceneObjectPtr clone(const LuceneObjectPtr &other=LuceneObjectPtr())
Return clone of this object.
virtual bool isCacheable()
This DocIdSet implementation is cacheable.
bool getAndSet(int32_t index)
Sets a bit and returns the previous value. The index should be less than the OpenBitSet size.
int64_t nextSetBit(int64_t index)
Returns the index of the first set bit starting at the index specified. -1 is returned if there are n...
void flip(int64_t index)
Flips a bit, expanding the set size if necessary.
void andNot(const OpenBitSetPtr &other)
see remove
void clear(int64_t startIndex, int64_t endIndex)
Clears a range of bits. Clearing past the end does not change the size of the set.
bool get(int64_t index)
Returns true or false for the specified bit index.
virtual int32_t hashCode()
Return hash code for this object.
int32_t nextSetBit(int32_t index)
Returns the index of the first set bit starting at the index specified. -1 is returned if there are n...
void set(int64_t startIndex, int64_t endIndex)
Sets a range of bits, expanding the set size if necessary.
void fastFlip(int64_t index)
Flips a bit. The index should be less than the OpenBitSet size.
LongArray getBits()
Returns the long[] storing the bits.
static int64_t andNotCount(const OpenBitSetPtr &a, const OpenBitSetPtr &b)
Returns the popcount or cardinality of "a and not b" or "intersection(a, not(b))"....
static int64_t xorCount(const OpenBitSetPtr &a, const OpenBitSetPtr &b)
Returns the popcount or cardinality of the exclusive-or of the two sets. Neither set is modified.
void remove(const OpenBitSetPtr &other)
Remove all elements set in other. this = this AND_NOT other.
int32_t getNumWords()
Gets the number of longs in the array that are in use.
void fastSet(int32_t index)
Sets the bit at the specified index. The index should be less than the OpenBitSet size.
int64_t size()
Returns the current capacity of this set. Included for compatibility. This is not equal to cardinalit...
void fastClear(int32_t index)
Clears a bit. The index should be less than the OpenBitSet size.
void intersect(const OpenBitSetPtr &other)
this = this AND other
int32_t expandingWordNum(int64_t index)
bool flipAndGet(int64_t index)
Flips a bit and returns the resulting bit value. The index should be less than the OpenBitSet size.
void ensureCapacityWords(int32_t numWords)
Expand the LongArray with the size given as a number of words (64 bit longs). getNumWords() is unchan...
bool isEmpty()
Returns true if there are no set bits.
bool intersects(const OpenBitSetPtr &other)
Returns true if the sets have any elements in common.
void setNumWords(int32_t numWords)
Sets the number of longs in the array that are in use.
bool flipAndGet(int32_t index)
Flips a bit and returns the resulting bit value. The index should be less than the OpenBitSet size.
virtual DocIdSetIteratorPtr iterator()
Provides a DocIdSetIterator to access the set. This implementation can return null or EmptyDocIdSet....
void ensureCapacity(int64_t numBits)
Ensure that the LongArray is big enough to hold numBits, expanding it if necessary....
void _or(const OpenBitSetPtr &other)
see union
void flip(int64_t startIndex, int64_t endIndex)
Flips a range of bits, expanding the set size if necessary.
bool fastGet(int64_t index)
Returns true or false for the specified bit index. The index should be less than the OpenBitSet size.
void trimTrailingZeros()
Lowers numWords, the number of words in use, by checking for trailing zero words.
void setBits(LongArray bits)
Sets a new long[] to use as the bit storage.
bool getAndSet(int64_t index)
Sets a bit and returns the previous value. The index should be less than the OpenBitSet size.
LongArray bits
Definition OpenBitSet.h:40
void _xor(const OpenBitSetPtr &other)
this = this XOR other
void clear(int64_t index)
Clears a bit, allowing access beyond the current set size without changing the size.
bool fastGet(int32_t index)
Returns true or false for the specified bit index. The index should be less than the OpenBitSet size.
bool get(int32_t index)
Returns true or false for the specified bit index.
void fastClear(int64_t index)
Clears a bit. The index should be less than the OpenBitSet size.
void _union(const OpenBitSetPtr &other)
this = this OR other
void fastSet(int64_t index)
Sets the bit at the specified index. The index should be less than the OpenBitSet size.
OpenBitSet(int64_t numBits=64)
Constructs an OpenBitSet large enough to hold numBits.
void fastFlip(int32_t index)
Flips a bit. The index should be less than the OpenBitSet size.
void _and(const OpenBitSetPtr &other)
see intersect
int64_t capacity()
Returns the current capacity in bits (1 greater than the index of the last bit)
int32_t wlen
Definition OpenBitSet.h:41
void clear(int32_t startIndex, int32_t endIndex)
Clears a range of bits. Clearing past the end does not change the size of the set.
int64_t cardinality()
static int64_t intersectionCount(const OpenBitSetPtr &a, const OpenBitSetPtr &b)
Returns the popcount or cardinality of the intersection of the two sets. Neither set is modified.
int32_t getBit(int32_t index)
Returns 1 if the bit is set, 0 if not. The index should be less than the OpenBitSet size.
static int32_t bits2words(int64_t numBits)
Returns the number of 64 bit words it would take to hold numBits.
virtual ~OpenBitSet()
Definition AbstractAllTermDocs.h:12
boost::shared_ptr< LuceneObject > LuceneObjectPtr
Definition LuceneTypes.h:539
boost::shared_ptr< DocIdSetIterator > DocIdSetIteratorPtr
Definition LuceneTypes.h:324
boost::shared_ptr< OpenBitSet > OpenBitSetPtr
Definition LuceneTypes.h:543

clucene.sourceforge.net