Program Listing for File MoveStructure.h
↰ Return to documentation for file (ADS/succinct/MoveStructure.h)
/*--------------------------------------------------------------------------*/
/*-------------------------- File MoveStructure.h --------------------------*/
/*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*/
/*----------------------------- DEFINITIONS --------------------------------*/
/*--------------------------------------------------------------------------*/
#ifndef __ADS_MoveStructure
#define __ADS_MoveStructure
/* self-identification: #endif constant */
/*--------------------------------------------------------------------------*/
/*------------------------------ INCLUDES ----------------------------------*/
/*--------------------------------------------------------------------------*/
#include "ADS/Contract.h"
#include "ADS/succinct/BitVector.h"
#include <algorithm>
#include <bit>
#include <cstddef>
#include <cstdint>
#include <map>
#include <span>
#include <utility>
#include <vector>
/*--------------------------------------------------------------------------*/
/*--------------------------- NAMESPACE ------------------------------------*/
/*--------------------------------------------------------------------------*/
namespace ADS {
/*--------------------------------------------------------------------------*/
/*--------------------------- CLASS MoveStructure --------------------------*/
/*--------------------------------------------------------------------------*/
class MoveStructure {
/*--------------------------------------------------------------------------*/
public:
MoveStructure( void ) = default;
MoveStructure( std::span< const std::uint64_t > p ,
std::span< const std::uint64_t > q ,
std::span< const std::uint32_t > tag , std::uint64_t n );
[[nodiscard]] std::size_t intervals( void ) const { return( f_m ); }
[[nodiscard]] std::uint64_t size( void ) const { return( f_n ); }
[[nodiscard]] std::uint64_t start( std::size_t i ) const {
return( i == f_m ? f_n : f_P.get( i * std::size_t( f_wp ) , f_wp ) );
}
[[nodiscard]] std::uint32_t tag( std::size_t i ) const {
return( std::uint32_t( f_tag.get( i * std::size_t( f_wt ) , f_wt ) ) );
}
[[nodiscard]] std::pair< std::uint64_t , std::size_t > move(
std::uint64_t x , std::size_t i ) const;
[[nodiscard]] std::size_t interval( std::uint64_t x ) const;
[[nodiscard]] std::size_t sizeInBits( void ) const;
/*--------------------------------------------------------------------------*/
private:
std::uint64_t f_n = 0;
std::size_t f_m = 0;
int f_wp = 1 , f_wd = 1 , f_wt = 1;
BitVector f_P;
BitVector f_Q;
BitVector f_D;
BitVector f_tag;
}; // end( class MoveStructure )
/*--------------------------------------------------------------------------*/
} // end( namespace ADS )
/*--------------------------------------------------------------------------*/
/*-------------------------- IMPLEMENTATION --------------------------------*/
/*--------------------------------------------------------------------------*/
#include "ADS/succinct/impl/MoveStructure.tpp"
/*--------------------------------------------------------------------------*/
#endif /* MoveStructure.h included */
/*--------------------------------------------------------------------------*/
/*------------------------ End File MoveStructure.h ------------------------*/
/*--------------------------------------------------------------------------*/