HyperGraphLib
                                
                                
                                
                                    HyperGraphLib copied to clipboard
                            
                            
                            
                        C++ Hypergraph modelling Library using Boost and OpenMP with some algorithms, including isomorphism using Gecode.
HyperGraphLib
Hypergraphs modelling library with algorithms, the official page for more informations.

How to build and install HyperGraphLib
In a terminal:
git clone https://github.com/alex-87/HyperGraphLib.git
cd HyperGraphLib
cmake CMakeLists.txt
make
make install #Some privileges could be required
See the official page for more informations :)
Where is the documentation ?
The documentation, generated using Doxygen is available at the technical documentation page.
Minimum required
To compile HyperGraphLib, you need:
Example
#include <iostream>
#include <boost/shared_ptr.hpp>
#include <Hypergraph/model/Hypergraphe.hh>
#include <Hypergraph/model/HyperFactory.hh>
#include <Hypergraph/model/MotorAlgorithm.hh>
#include <Hypergraph/algorithm/Isomorph.hh>
#include <Hypergraph/algorithm/Simple.hh>
int main(int argc, char * argv[]) {
    // Creating the hypergraph inside smart pointer
    boost::shared_ptr<HypergrapheAbstrait> ptrHpg( new Hypergraphe() );
    // Starting the create session
    HyperFactory::startSession(ptrHpg);
    // Creating the hyper-edges
    boost::shared_ptr<HyperEdge> ptrEdge1 ( HyperFactory::newHyperEdge() );
    boost::shared_ptr<HyperEdge> ptrEdge2 ( HyperFactory::newHyperEdge() );
    // Creating the hyper-vertexes
    boost::shared_ptr<HyperVertex> ptrVertexA( HyperFactory::newHyperVertex() );
    boost::shared_ptr<HyperVertex> ptrVertexB( HyperFactory::newHyperVertex() );
    // The hyper-vertex A is contained inside the hyper-edge 1
    HyperFactory::link(ptrVertexA, ptrEdge1);
    // The hyper-vertex B is contained inside the hyper-edge 2
    HyperFactory::link(ptrVertexB, ptrEdge2);
    // Adding the hyper-vertexes in the hypergraph
    ptrHpg->addHyperVertex( ptrVertexA );
    ptrHpg->addHyperVertex( ptrVertexB );
    // Adding the hyper-edges in the hypergraph
    ptrHpg->addHyperEdge(ptrEdge1);
    ptrHpg->addHyperEdge(ptrEdge2);
    // Creating the adjacent matrix inside the hypergraph
    ptrHpg->flush();
    // Closing the session
    HyperFactory::closeSession();
    // -- -- --
    // Initializing the Isomorphism algorithm with ptrHpg (twice, just for the example)
    boost::shared_ptr<AlgorithmeAbstrait> isomorphPtr( new Isomorph( ptrHpg , ptrHpg ) );
    // Setting the motor's algorithm
    MotorAlgorithm::setAlgorithme( isomorphPtr );
    // Running the motor
    MotorAlgorithm::runAlgorithme();
    // Getting the result
    RStructure r1( isomorphPtr->getResult() );
    if( r1.getBooleanResult() ) {
    	std::cout << "The hypergraph is isomorph with itself" << std::endl;
    }
    // -- -- --
    // Initializing the Simple algorithm with ptrHpg (twice, just for the example)
    boost::shared_ptr<AlgorithmeAbstrait> simplephPtr( new Simple( ptrHpg ) );
    // Setting the motor's algorithm
    MotorAlgorithm::setAlgorithme( simplephPtr );
    // Running the motor
    MotorAlgorithm::runAlgorithme();
    // Getting the result
    RStructure r2( simplephPtr->getResult() );
    if( r2.getBooleanResult() ) {
        std::cout << "The hypergraph is simple." << std::endl;
    }
    return 0;
}
Compiling the example (Unix / Linux)
g++ example.cpp -o example -lhypergraph
The output is:
$ ./example
The hypergraph is isomorph with itself
The hypergraph is simple.
Boost Library
This software uses the Boost Library. Please see the Boost license at http://www.boost.org/LICENSE_1_0.txt
Gecode Library
This software uses the Gecode Library. Please see the Boost license at https://www.gecode.org/license.html
License
This software is licensed under the MIT License.