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


OpenBitSet.h
Go to the documentation of this file.
1 // 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 
12 namespace Lucene {
13 
19 class LPPAPI OpenBitSet : public DocIdSet {
20 public:
22  OpenBitSet(int64_t numBits = 64);
23 
33  OpenBitSet(LongArray bits, int32_t numWords);
34 
35  virtual ~OpenBitSet();
36 
38 
39 protected:
40  LongArray bits;
41  int32_t wlen; // number of words (elements) used in the array
42 
43 public:
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 
230 protected:
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:37
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