32 lines
1.0 KiB
C++
32 lines
1.0 KiB
C++
#ifndef VPR_MOVE_GENERATOR_H
|
|
#define VPR_MOVE_GENERATOR_H
|
|
#include "vpr_types.h"
|
|
#include "move_utils.h"
|
|
|
|
#include <limits>
|
|
|
|
struct MoveOutcomeStats {
|
|
float delta_cost_norm = std::numeric_limits<float>::quiet_NaN();
|
|
float delta_bb_cost_norm = std::numeric_limits<float>::quiet_NaN();
|
|
float delta_timing_cost_norm = std::numeric_limits<float>::quiet_NaN();
|
|
|
|
float delta_bb_cost_abs = std::numeric_limits<float>::quiet_NaN();
|
|
float delta_timing_cost_abs = std::numeric_limits<float>::quiet_NaN();
|
|
|
|
e_move_result outcome = ABORTED;
|
|
float elapsed_time = std::numeric_limits<float>::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
|