Program Listing for File EliasFanoGraph.h

↰ Return to documentation for file (ADS/succinct/EliasFanoGraph.h)

/*--------------------------------------------------------------------------*/
/*-------------------------- File EliasFanoGraph.h -------------------------*/
/*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*/
/*----------------------------- DEFINITIONS --------------------------------*/
/*--------------------------------------------------------------------------*/

#ifndef __ADS_EliasFanoGraph
 #define __ADS_EliasFanoGraph
                      /* self-identification: #endif constant */

/*--------------------------------------------------------------------------*/
/*------------------------------ INCLUDES ----------------------------------*/
/*--------------------------------------------------------------------------*/

#include "ADS/Contract.h"
#include "ADS/succinct/EliasFano.h"

#include <algorithm>
#include <cstddef>
#include <cstdint>
#include <vector>

/*--------------------------------------------------------------------------*/
/*--------------------------- NAMESPACE ------------------------------------*/
/*--------------------------------------------------------------------------*/

namespace ADS {

/*--------------------------------------------------------------------------*/
/*-------------------------- CLASS EliasFanoGraph --------------------------*/
/*--------------------------------------------------------------------------*/

class EliasFanoGraph {

/*--------------------------------------------------------------------------*/
 public:

 EliasFanoGraph( void ) = default;

 explicit EliasFanoGraph(
                       const std::vector< std::vector< std::size_t > > & a );

 [[nodiscard]] std::size_t order( void ) const;

 [[nodiscard]] std::size_t edges( void ) const;

 [[nodiscard]] std::size_t outdegree( std::size_t u ) const;

 [[nodiscard]] std::size_t successor( std::size_t u , std::size_t i ) const;

 [[nodiscard]] std::vector< std::size_t > successors( std::size_t u ) const;

 [[nodiscard]] bool hasEdge( std::size_t u , std::size_t v ) const;

 [[nodiscard]] std::size_t sizeInBits( void ) const;

/*--------------------------------------------------------------------------*/
 private:

 std::size_t f_n = 0;
 EliasFano f_edges;
 EliasFano f_start;

 };  // end( class EliasFanoGraph )

/*--------------------------------------------------------------------------*/

}  // end( namespace ADS )

/*--------------------------------------------------------------------------*/
/*-------------------------- IMPLEMENTATION --------------------------------*/
/*--------------------------------------------------------------------------*/

#include "ADS/succinct/impl/EliasFanoGraph.tpp"

/*--------------------------------------------------------------------------*/

#endif  /* EliasFanoGraph.h included */

/*--------------------------------------------------------------------------*/
/*------------------------ End File EliasFanoGraph.h -----------------------*/
/*--------------------------------------------------------------------------*/