From e7a2cf26bbfc531af005aac18a657d3f8cafead0 Mon Sep 17 00:00:00 2001 From: nvalimak Date: Mon, 20 Apr 2009 11:27:16 +0000 Subject: [PATCH] Removed git-svn-id: svn+ssh://idea.nguyen.vg/svn/sxsi/trunk/TextCollection@332 3cdefd35-fc62-479d-8e8d-bae585ffb9ca --- BSGAP.h | 119 -------------------------------------------------------- 1 file changed, 119 deletions(-) delete mode 100644 BSGAP.h diff --git a/BSGAP.h b/BSGAP.h deleted file mode 100644 index a1fba5d..0000000 --- a/BSGAP.h +++ /dev/null @@ -1,119 +0,0 @@ -/** - * Binary-searchable gap encoding scheme (BSGAP) - * Niko Välimäki - * - * Based on: - * - * Ankur Gupta and Wing-Kai Hon and Rahul Shah and Jeffrey Scott Vitter. Compressed data structures: - * Dictionaries and data-aware measures, Theor. Comput. Sci., Volume 387, Issue 3 (November 2007). - */ -#ifndef _BSGAP_H_ -#define _BSGAP_H_ - -#include "Tools.h" -#include "BlockArray.h" - -class BSGAP -{ -public: - BSGAP(ulong *, ulong, bool = false, ulong = 0); - BSGAP(FILE *); - ~BSGAP(); - ulong rank(ulong); - ulong rank0(ulong); - ulong rank(bool b, ulong i) {return b?rank(i):i+1-rank(i);}; - ulong select(ulong); - ulong select0(ulong); - ulong select(bool b, ulong i) {return b?select(i):select0(i);}; - - bool IsBitSet(ulong pos); - // Returns also the rank_1(pos) via the second param - bool IsBitSet(ulong pos, ulong *); - - ulong size() {return u;}; - ulong bitsSet() {return n;} - void Save(FILE *) const; -private: - static const uchar bit_table[]; - ulong u, n; // Universe size, number of 1-bits in B - ulong topCount; // Top structure and the number of substructures - ulong bitsInP; // Length of bit vector P - ulong *P; // Pointer to BSGAP structures - unsigned b; // Subdictionary size (\log^2 n) - BlockArray *offsetA; // Array of pointers (into bitvector P) - BlockArray *firstKeyA; // Array of first key positions of the substructures - - ulong rank(ulong *, ulong, ulong, ulong, ulong, ulong, ulong, bool); - bool IsBitSet(ulong *, ulong, ulong, ulong, ulong, ulong, ulong, bool); - bool IsBitSet(ulong *, ulong, ulong, ulong, ulong, ulong, ulong, bool, ulong *); - ulong select(ulong *, ulong, ulong, ulong, ulong, ulong, ulong, bool); - ulong select0(ulong *, ulong, ulong, ulong, ulong, ulong, ulong, bool); - ulong * GetSubtree(ulong *, ulong, ulong, ulong, ulong, bool, ulong &); - ulong DeltaDecode(ulong *, ulong &); - ulong DeltaDecode(ulong *, ulong &, bool &); - ulong * DeltaEncode(ulong, ulong &, bool = true, bool = false); - void BitCopy(ulong *, ulong *, ulong, ulong); - ulong FindMedian(ulong *, ulong, ulong, ulong, ulong); - unsigned FindLowestBit(ulong); - - inline bool IsSubtreeFull(ulong firstKey, ulong l, ulong r, ulong n) - { - if (l == firstKey) - n --; - - if (r - l - 1 == n) - return true; - return false; - } - /** - * Returns the number of zeros in the left subtree - */ - inline ulong numberOfZeros(ulong firstKey, ulong l, ulong key, ulong n) - { - ulong z = key - l - 1 - n/2; - if (l == firstKey) - ++z; - if (z == -1lu) - z = 0; - return z; - } - - inline ulong FindRightSubtree(ulong *B, ulong offset, ulong firstKey, ulong key, ulong l, ulong r, ulong n) - { - if (n - n/2 - 1 == 0) - return 0; // Does not exists - - if (IsSubtreeFull(firstKey, key, r, n - n/2 - 1)) - return 0; // Right subtree is full (does not exists) - - if (n/2 == 0) - return offset; // Left subtree does not exists - - if (IsSubtreeFull(firstKey, l, key, n/2)) - return offset; // Left subtree is full (does not exists) - - ulong len = DeltaDecode(B, offset); - return offset + len; // Skipping left subtree - } - - inline ulong FindLeftSubtree(ulong *B, ulong offset, ulong firstKey, ulong key, ulong l, ulong r, ulong n) - { - if (n/2 == 0) - return 0; // Does not exists - - if (IsSubtreeFull(firstKey, l, key, n/2)) - return 0; // Left subtree is full - - if (n - n/2 - 1 == 0) - return offset; // Right subtree does not exists - - if (IsSubtreeFull(firstKey, key, r, n - n/2 - 1)) - return offset; // Right subtree is full - - DeltaDecode(B, offset); // Calculate new offset - return offset; // Left subtree is the first one - } - -}; - -#endif -- 2.17.1