#include <utils/Partitioner.hpp>

#include <utils/PTScotchPartitioner.hpp>
#include <utils/ParMETISPartitioner.hpp>

Partitioner::Partitioner(const PartitionerOptions& options) : m_partitioner_options{options} {}

Array<int>
Partitioner::partition(const CRSGraph& graph)
{
  switch (m_partitioner_options.library()) {
  case PartitionerLibrary::parmetis: {
    return ParMETISPartitioner::partition(graph);
  }
  case PartitionerLibrary::ptscotch: {
    return PTScotchPartitioner::partition(graph);
  }
  default: {
    throw UnexpectedError("invalid partition library");
  }
  }
}