/******** Function prototypes for functions in route_common.c that ***********
 ******** are used outside the router modules.                     ***********/

boolean try_route(int width_fac, struct s_router_opts router_opts,
		struct s_det_routing_arch det_routing_arch, t_segment_inf * segment_inf,
		t_timing_inf timing_inf, float **net_delay, t_slack * slacks,
		t_chan_width_dist chan_width_dist, t_ivec ** clb_opins_used_locally,
		boolean * Fc_clipped, t_direct_inf *directs, int num_directs,
        /*Xifan TANG: Switch Segment Pattern Support*/
        t_swseg_pattern_inf* swseg_patterns);

boolean feasible_routing(void);

t_ivec **alloc_route_structs(void);

void free_route_structs();

struct s_trace **alloc_saved_routing(t_ivec ** clb_opins_used_locally,
		t_ivec *** saved_clb_opins_used_locally_ptr);

void free_saved_routing(struct s_trace **best_routing,
		t_ivec ** saved_clb_opins_used_locally);

void save_routing(struct s_trace **best_routing,
		t_ivec ** clb_opins_used_locally,
		t_ivec ** saved_clb_opins_used_locally);

void restore_routing(struct s_trace **best_routing,
		t_ivec ** clb_opins_used_locally,
		t_ivec ** saved_clb_opins_used_locally);

void get_serial_num(void);

void print_route(char *name);