Program Listing for File ChungLuGeneratorAlamEtAl.hpp

Return to documentation for file (include/networkit/generators/ChungLuGeneratorAlamEtAl.hpp)

/*
 * ChungLuGeneratorAlamEtAl.hpp
 *
 *  Created on: Dec 23, 2013
 *      Author: Henning
 *      Contributors: Hoske/Weisbarth/Hering
 */

#ifndef NETWORKIT_GENERATORS_CHUNG_LU_GENERATOR_ALAM_ET_AL_HPP_
#define NETWORKIT_GENERATORS_CHUNG_LU_GENERATOR_ALAM_ET_AL_HPP_

#include <networkit/generators/StaticDegreeSequenceGenerator.hpp>
#include <networkit/generators/StaticGraphGenerator.hpp>

namespace NetworKit {

class ChungLuGeneratorAlamEtAl final : StaticGraphGenerator {
    struct VertexGroup {
        count degrees;
        count vertexCount;
        count startIndex;
    };
    std::vector<VertexGroup> groups;
    count sum_deg;
    count n;
    bool parallel;

    template <typename F>
    void edgeSkipping(std::mt19937_64 &generator, F &&addEdge, index i, index j, double p,
                      index end);
    Graph generateSequential();
    Graph generateParallel();

public:
    ChungLuGeneratorAlamEtAl(const std::vector<count> &degreeSequence, bool parallel = false);

    Graph generate() override;
};

} /* namespace NetworKit */
#endif // NETWORKIT_GENERATORS_CHUNG_LU_GENERATOR_ALAM_ET_AL_HPP_