Program Listing for File LoudsTree.h
↰ Return to documentation for file (ADS/succinct/LoudsTree.h)
/*--------------------------------------------------------------------------*/
/*---------------------------- File LoudsTree.h ----------------------------*/
/*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*/
/*----------------------------- DEFINITIONS --------------------------------*/
/*--------------------------------------------------------------------------*/
#ifndef __ADS_LoudsTree
#define __ADS_LoudsTree
/* self-identification: #endif constant */
/*--------------------------------------------------------------------------*/
/*------------------------------ INCLUDES ----------------------------------*/
/*--------------------------------------------------------------------------*/
#include "ADS/Contract.h"
#include "ADS/succinct/BitVector.h"
#include "ADS/succinct/RankSelect.h"
#include <cstddef>
#include <vector>
/*--------------------------------------------------------------------------*/
/*--------------------------- NAMESPACE ------------------------------------*/
/*--------------------------------------------------------------------------*/
namespace ADS {
/*--------------------------------------------------------------------------*/
/*---------------------------- CLASS LoudsTree -----------------------------*/
/*--------------------------------------------------------------------------*/
class LoudsTree {
/*--------------------------------------------------------------------------*/
public:
static constexpr std::size_t nil = std::size_t( -1 );
LoudsTree( void );
explicit LoudsTree( const std::vector< std::vector< std::size_t > > & c );
explicit LoudsTree( BitVector b );
[[nodiscard]] std::size_t size( void ) const;
[[nodiscard]] std::size_t root( void ) const;
[[nodiscard]] std::size_t degree( std::size_t v ) const;
[[nodiscard]] std::size_t parent( std::size_t v ) const;
[[nodiscard]] std::size_t leftmostChild( std::size_t v ) const;
[[nodiscard]] std::size_t rightSibling( std::size_t v ) const;
[[nodiscard]] std::size_t child( std::size_t v , std::size_t i ) const;
[[nodiscard]] bool isLeaf( std::size_t v ) const;
[[nodiscard]] const BitVector & bits( void ) const;
/*--------------------------------------------------------------------------*/
private:
[[nodiscard]] bool valid( void ) const;
RankSelect f_b;
}; // end( class LoudsTree )
/*--------------------------------------------------------------------------*/
} // end( namespace ADS )
/*--------------------------------------------------------------------------*/
/*-------------------------- IMPLEMENTATION --------------------------------*/
/*--------------------------------------------------------------------------*/
#include "ADS/succinct/impl/LoudsTree.tpp"
/*--------------------------------------------------------------------------*/
#endif /* LoudsTree.h included */
/*--------------------------------------------------------------------------*/
/*-------------------------- End File LoudsTree.h --------------------------*/
/*--------------------------------------------------------------------------*/