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 --------------------------*/
/*--------------------------------------------------------------------------*/