Program Listing for File FMConstrMgr.hpp¶
↰ Return to documentation for file (ckpttncpp/FMConstrMgr.hpp)
#pragma once
#include "netlist.hpp"
#include <cinttypes>
#include <cmath>
#include <gsl/span>
#include <vector>
enum class LegalCheck
{
notsatisfied,
getbetter,
allsatisfied
};
class FMConstrMgr
{
private:
const SimpleNetlist& H;
double BalTol;
unsigned int totalweight {0};
unsigned int weight {}; // cache value
protected:
std::vector<unsigned int> diff;
unsigned int lowerbound {};
std::uint8_t K;
FMConstrMgr(const SimpleNetlist& H, double BalTol)
: FMConstrMgr(H, BalTol, 2)
{
}
FMConstrMgr(const SimpleNetlist& H, double BalTol, std::uint8_t K);
public:
using node_t = typename SimpleNetlist::node_t;
auto init(gsl::span<const std::uint8_t> part) -> void;
auto check_legal(const MoveInfoV<node_t>& move_info_v) -> LegalCheck;
auto check_constraints(const MoveInfoV<node_t>& move_info_v) -> bool;
auto update_move(const MoveInfoV<node_t>& move_info_v) -> void;
};