.. _program_listing_file_src_sparsebase_partition_pulp_partition.cc: Program Listing for File pulp_partition.cc ========================================== |exhale_lsh| :ref:`Return to documentation for file ` (``src/sparsebase/partition/pulp_partition.cc``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #include "sparsebase/partition/pulp_partition.h" #include "sparsebase/format/csr.h" #include "sparsebase/partition/partitioner.h" namespace sparsebase::partition { #ifdef USE_PULP #include template PulpPartition::PulpPartition() { this->RegisterFunction( {format::CSR::get_id_static()}, PartitionCSR); this->params_ = std::unique_ptr(new PulpPartitionParams); } template PulpPartition::PulpPartition( PulpPartitionParams params) { this->RegisterFunction( {format::CSR::get_id_static()}, PartitionCSR); this->params_ = std::unique_ptr(new PulpPartitionParams(params)); } template IDType *PulpPartition::PartitionCSR( std::vector formats, utils::Parameters *params) { format::CSR *csr = formats[0]->AsAbsolute>(); PulpPartitionParams *pparams = static_cast(params); format::DimensionType n = csr->get_dimensions()[0]; format::DimensionType m = csr->get_num_nnz(); pulp_part_control_t con; con.vert_balance = pparams->vert_balance; con.edge_balance = pparams->edge_balance; con.pulp_seed = pparams->seed; con.do_lp_init = pparams->do_lp_init; con.do_bfs_init = pparams->do_bfs_init; con.do_repart = pparams->do_repart; con.do_edge_balance = pparams->do_edge_balance; con.do_maxcut_balance = pparams->do_maxcut_balance; int np = pparams->num_partitions; IDType *partition = new IDType[n]; if constexpr (std::is_same_v && std::is_same_v) { pulp_graph_t graph; graph.n = n; graph.m = m; graph.out_array = csr->get_col(); graph.out_degree_list = csr->get_row_ptr(); graph.vertex_weights = nullptr; graph.edge_weights = nullptr; graph.vertex_weights_sum = 0; pulp_run(&graph, &con, partition, np); } else { throw utils::TypeException( "Pulp Partitioner requires IDType=int, NNZType=long"); } return partition; } #endif #if !defined(_HEADER_ONLY) #include "init/pulp_partition.inc" #endif } // namespace sparsebase::partition