#ifndef VPR_MOVE_GENERATOR_H #define VPR_MOVE_GENERATOR_H #include "vpr_types.h" #include "move_utils.h" #include struct MoveOutcomeStats { float delta_cost_norm = std::numeric_limits::quiet_NaN(); float delta_bb_cost_norm = std::numeric_limits::quiet_NaN(); float delta_timing_cost_norm = std::numeric_limits::quiet_NaN(); float delta_bb_cost_abs = std::numeric_limits::quiet_NaN(); float delta_timing_cost_abs = std::numeric_limits::quiet_NaN(); e_move_result outcome = ABORTED; float elapsed_time = std::numeric_limits::quiet_NaN(); }; class MoveGenerator { public: virtual ~MoveGenerator() {} //Updates affected_blocks with the proposed move, while respecting the current rlim virtual e_create_move propose_move(t_pl_blocks_to_be_moved& affected_blocks, float rlim) = 0; //Recieves feedback about the outcome of the previously proposed move virtual void process_outcome(const MoveOutcomeStats& /*move_outcome*/) {} }; #endif