Program Listing for File MoveRIndex.h
↰ Return to documentation for file (ADS/compression/MoveRIndex.h)
/*--------------------------------------------------------------------------*/
/*---------------------------- File MoveRIndex.h ---------------------------*/
/*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*/
/*----------------------------- DEFINITIONS --------------------------------*/
/*--------------------------------------------------------------------------*/
#ifndef __ADS_MoveRIndex
#define __ADS_MoveRIndex
/* self-identification: #endif constant */
/*--------------------------------------------------------------------------*/
/*------------------------------ INCLUDES ----------------------------------*/
/*--------------------------------------------------------------------------*/
#include "ADS/Contract.h"
#include "ADS/compression/BurrowsWheeler.h"
#include "ADS/succinct/BitVector.h"
#include "ADS/succinct/RankSelect.h"
#include "ADS/succinct/HuffmanWaveletTree.h"
#include "ADS/succinct/MoveStructure.h"
#include <algorithm>
#include <array>
#include <bit>
#include <cstddef>
#include <cstdint>
#include <string>
#include <string_view>
#include <tuple>
#include <utility>
#include <vector>
/*--------------------------------------------------------------------------*/
/*--------------------------- NAMESPACE ------------------------------------*/
/*--------------------------------------------------------------------------*/
namespace ADS {
/*--------------------------------------------------------------------------*/
/*---------------------------- CLASS MoveRIndex ----------------------------*/
/*--------------------------------------------------------------------------*/
class MoveRIndex {
/*--------------------------------------------------------------------------*/
public:
MoveRIndex( void ) : MoveRIndex( std::string_view() ) {}
explicit MoveRIndex( std::string_view s );
[[nodiscard]] std::size_t size( void ) const { return( f_n ); }
[[nodiscard]] std::size_t intervals( void ) const {
return( f_lf.intervals() );
}
[[nodiscard]] std::size_t count( std::string_view P ) const;
[[nodiscard]] std::vector< std::size_t > locate( std::string_view P ) const;
[[nodiscard]] std::size_t sizeInBits( void ) const;
/*--------------------------------------------------------------------------*/
private:
template< bool Toehold >
[[nodiscard]] bool search( std::string_view P , std::uint64_t & s ,
std::size_t & is , std::uint64_t & e ,
std::size_t & ie , std::uint64_t & v ,
std::size_t & iv ) const;
std::size_t f_n = 0;
int f_w = 1 , f_wi = 1;
MoveStructure f_lf;
HuffmanWaveletTree< RankSelect > f_tag;
std::array< std::size_t , 257 > f_cnt{};
MoveStructure f_phi;
BitVector f_end;
BitVector f_endPhi;
#if ADS_CONTRACTS >= 3
std::string f_text;
#endif
}; // end( class MoveRIndex )
/*--------------------------------------------------------------------------*/
} // end( namespace ADS )
/*--------------------------------------------------------------------------*/
/*-------------------------- IMPLEMENTATION --------------------------------*/
/*--------------------------------------------------------------------------*/
#include "ADS/compression/impl/MoveRIndex.tpp"
/*--------------------------------------------------------------------------*/
#endif /* MoveRIndex.h included */
/*--------------------------------------------------------------------------*/
/*-------------------------- End File MoveRIndex.h -------------------------*/
/*--------------------------------------------------------------------------*/