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;
};