template<typename Gnl>
FMConstrMgr class

Fiduccia-Mattheyses Partition Constraint Manager.

Template parameters
Gnl

Derived classes

template<typename Gnl>
class FMBiConstrMgr
Constraint Manager.
template<typename Gnl>
class FMKWayConstrMgr
Fiduccia-Mattheyses num_parts-Way Partition Constraint Manager.

Constructors, destructors, conversion operators

FMConstrMgr(const Gnl& hyprgraph, double bal_tol) protected
Constructs a new FMConstrMgr object with the given hypergraph and balance tolerance, using a default of 2 partitions.
FMConstrMgr(const Gnl& hyprgraph, double bal_tol, std::uint8_t num_parts) protected
Constructs a new FMConstrMgr object with the given hypergraph, balance tolerance, and number of partitions.

Public functions

auto init(gsl::span<const std::uint8_t> part) -> void -> auto
Initializes the FMConstrMgr with the given partition information.
auto check_legal(const MoveInfoV<node_t>& move_info_v) -> LegalCheck -> auto
Check if the proposed move of the given nodes can be legally performed, and if so, whether it would improve the current partitioning.
auto check_constraints(const MoveInfoV<node_t>& move_info_v) -> bool -> auto
Check if the proposed moves in the given vector of move information can be legally performed while satisfying the constraints.
auto update_move(const MoveInfoV<node_t>& move_info_v) -> void -> auto
Update the partitioning based on the proposed node moves.

Protected types

using node_t = typename Gnl::node_t

Protected variables

std::vector<unsigned int> diff
unsigned int lowerbound
std::uint8_t num_parts

Function documentation

template<typename Gnl>
FMConstrMgr<Gnl>::FMConstrMgr(const Gnl& hyprgraph, double bal_tol) protected

Constructs a new FMConstrMgr object with the given hypergraph and balance tolerance, using a default of 2 partitions.

Parameters
hyprgraph in The hypergraph to use for the FMConstrMgr.
bal_tol in The balance tolerance to use for the FMConstrMgr.

template<typename Gnl>
FMConstrMgr<Gnl>::FMConstrMgr(const Gnl& hyprgraph, double bal_tol, std::uint8_t num_parts) protected

Constructs a new FMConstrMgr object with the given hypergraph, balance tolerance, and number of partitions.

Parameters
hyprgraph in The hypergraph to use for the FMConstrMgr.
bal_tol in The balance tolerance to use for the FMConstrMgr.
num_parts in The number of partitions to use for the FMConstrMgr.

template<typename Gnl>
auto FMConstrMgr<Gnl>::init(gsl::span<const std::uint8_t> part) -> void

Initializes the FMConstrMgr with the given partition information.

Parameters
part in The partition information to initialize the FMConstrMgr with.

template<typename Gnl>
auto FMConstrMgr<Gnl>::check_legal(const MoveInfoV<node_t>& move_info_v) -> LegalCheck

Check if the proposed move of the given nodes can be legally performed, and if so, whether it would improve the current partitioning.

Parameters
move_info_v in A vector of information about the proposed node moves.
Returns LegalCheck Indicates whether the move is not satisfied, would get better, or is fully satisfied.

template<typename Gnl>
auto FMConstrMgr<Gnl>::check_constraints(const MoveInfoV<node_t>& move_info_v) -> bool

Check if the proposed moves in the given vector of move information can be legally performed while satisfying the constraints.

Parameters
move_info_v in A vector of information about the proposed node moves.
Returns true If the proposed moves can be legally performed while satisfying the constraints.

template<typename Gnl>
auto FMConstrMgr<Gnl>::update_move(const MoveInfoV<node_t>& move_info_v) -> void

Update the partitioning based on the proposed node moves.

Parameters
move_info_v in A vector of information about the proposed node moves.