--- /dev/null
+/* static_bitsequence_brw32.h
+ Copyright (C) 2005, Rodrigo Gonzalez, all rights reserved.
+
+ New RANK, SELECT, SELECT-NEXT and SPARSE RANK implementations.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+*/
+
+#ifndef _STATIC_BITSEQUENCE_BRW32_H
+#define _STATIC_BITSEQUENCE_BRW32_H
+
+#include <basics.h>
+#include <static_bitsequence.h>
+/////////////
+//Rank(B,i)//
+/////////////
+//_factor = 0 => s=W*lgn
+//_factor = P => s=W*P
+//Is interesting to notice
+//factor=2 => overhead 50%
+//factor=3 => overhead 33%
+//factor=4 => overhead 25%
+//factor=20=> overhead 5%
+
+/** Implementation of Rodrigo Gonzalez et al. practical rank/select solution [1].
+ * The interface was adapted.
+ *
+ * [1] Rodrigo Gonzalez, Szymon Grabowski, Veli Makinen, and Gonzalo Navarro.
+ * Practical Implementation of Rank and Select Queries. WEA05.
+ *
+ * @author Rodrigo Gonzalez
+ */
+class static_bitsequence_brw32 : public static_bitsequence {
+private:
+ uint *data;
+ //bool owner;
+ uint n,integers;
+ uint factor,b,s;
+ uint *Rs; //superblock array
+
+ uint BuildRankSub(uint ini,uint fin); //uso interno para contruir el indice rank
+ void BuildRank(); //crea indice para rank
+ static_bitsequence_brw32();
+
+public:
+ static_bitsequence_brw32(uint *bitarray, uint n, uint factor);
+ ~static_bitsequence_brw32(); //destructor
+ virtual bool access(uint i);
+ virtual uint rank1(uint i); //Nivel 1 bin, nivel 2 sec-pop y nivel 3 sec-bit
+
+ uint prev(uint start); // gives the largest index i<=start such that IsBitSet(i)=true
+ uint prev2(uint start); // gives the largest index i<=start such that IsBitSet(i)=true
+ uint next(uint start); // gives the smallest index i>=start such that IsBitSet(i)=true
+ virtual uint select0(uint x); // gives the position of the x:th 1.
+ virtual uint select1(uint x); // gives the position of the x:th 1.
+ uint SpaceRequirementInBits();
+ uint SpaceRequirement();
+ virtual uint size();
+
+ /*load-save functions*/
+ virtual int save(FILE *f);
+ static static_bitsequence_brw32 * load(FILE * fp);
+};
+
+#endif