#ifndef VPR_CLB_DELAY_CALC_H
#define VPR_CLB_DELAY_CALC_H
#include "DelayType.h"

//Delay Calculator for routing internal to a clustered logic block
class ClbDelayCalc {
    public:
        ClbDelayCalc();

        //Delay from a CLB input (driven outside the CLB) to specified internal sink pin
        float clb_input_to_internal_sink_delay(const ClusterBlockId block_id, const int pin_index, int internal_sink_pin, DelayType delay_type) const;

        //Delay from an internal driver to the CLB's output pin
        float internal_src_to_clb_output_delay(const ClusterBlockId block_id, const int pin_index, int internal_src_pin, DelayType delay_type) const;

        //Delay from an internal driver to an internal sink within the same CLB
        float internal_src_to_internal_sink_delay(const ClusterBlockId clb, int internal_src_pin, int internal_sink_pin, DelayType delay_type) const;

    private:
        float trace_delay(ClusterBlockId clb, int src_pb_route_pin, int sink_pb_route_pin, DelayType delay_type) const;

        float pb_route_delay(ClusterBlockId clb, int pb_route_idx, DelayType delay_type) const;
        const t_pb_graph_edge* find_pb_graph_edge(ClusterBlockId clb, int pb_route_idx) const;
        const t_pb_graph_edge* find_pb_graph_edge(const t_pb_graph_pin* driver, const t_pb_graph_pin* sink) const;

    private:
        IntraLbPbPinLookup intra_lb_pb_pin_lookup_;
};

#include "clb_delay_calc.inl"

#endif
