#include "util.h"
#include "vpr_types.h"
#include "OptionTokens.h"

/* OptionBaseTokenList is for command line arg tokens. We will track how 
 * many times each of these things exist in a file */
const struct s_TokenPair OptionBaseTokenList[] = {
    {"nodisp", OT_NODISP},
    {"auto", OT_AUTO},
    {"recompute_crit_iter", OT_RECOMPUTE_CRIT_ITER},
    {"inner_loop_recompute_divider", OT_INNER_LOOP_RECOMPUTE_DIVIDER},
    {"fix_pins", OT_FIX_PINS},
    {"full_stats", OT_FULL_STATS},
    {"fast", OT_FAST},
    {"timing_analysis", OT_TIMING_ANALYSIS},
    {"timing_analyze_only_with_net_delay",
     OT_TIMING_ANALYZE_ONLY_WITH_NET_DELAY},
    {"init_t", OT_INIT_T},
    {"alpha_t", OT_ALPHA_T},
    {"exit_t", OT_EXIT_T},
    {"inner_num", OT_INNER_NUM},
    {"seed", OT_SEED},
    {"place_cost_exp", OT_PLACE_COST_EXP},
    {"td_place_exp_first", OT_TD_PLACE_EXP_FIRST},
    {"td_place_exp_last", OT_TD_PLACE_EXP_LAST},
    {"place_algorithm", OT_PLACE_ALGORITHM},
    {"timing_tradeoff", OT_TIMING_TRADEOFF},
    {"enable_timing_computations", OT_ENABLE_TIMING_COMPUTATIONS},
    {"block_dist", OT_BLOCK_DIST},
    {"place_cost_type", OT_PLACE_COST_TYPE},
    {"num_regions", OT_NUM_REGIONS},
    {"place_chan_width", OT_PLACE_CHAN_WIDTH},
    {"max_router_iterations", OT_MAX_ROUTER_ITERATIONS},
    {"bb_factor", OT_BB_FACTOR},
    {"router_algorithm", OT_ROUTER_ALGORITHM},
    {"first_iter_pres_fac", OT_FIRST_ITER_PRES_FAC},
    {"initial_pres_fac", OT_INITIAL_PRES_FAC},
    {"pres_fac_mult", OT_PRES_FAC_MULT},
    {"acc_fac", OT_ACC_FAC},
    {"astar_fac", OT_ASTAR_FAC},
    {"max_criticality", OT_MAX_CRITICALITY},
    {"criticality_exp", OT_CRITICALITY_EXP},
    {"base_cost_type", OT_BASE_COST_TYPE},
    {"bend_cost", OT_BEND_COST},
    {"route_type", OT_ROUTE_TYPE},
    {"route_chan_width", OT_ROUTE_CHAN_WIDTH},
    {"route", OT_ROUTE},
    {"place", OT_PLACE},
    {"verify_binary_search", OT_VERIFY_BINARY_SEARCH},
    {"outfile_prefix", OT_OUTFILE_PREFIX},
	{"blif_file", OT_BLIF_FILE},
	{"net_file", OT_NET_FILE},
	{"place_file", OT_PLACE_FILE},
	{"route_file", OT_ROUTE_FILE},
	{"global_clocks", OT_GLOBAL_CLOCKS},
	{"hill_climbing", OT_HILL_CLIMBING_FLAG},
	{"sweep_hanging_nets_and_inputs", OT_SWEEP_HANGING_NETS_AND_INPUTS},
	{"no_clustering", OT_SKIP_CLUSTERING},
	{"allow_unrelated_clustering", OT_ALLOW_UNRELATED_CLUSTERING},
	{"allow_early_exit", OT_ALLOW_EARLY_EXIT},
	{"connection_driven_clustering", OT_CONNECTION_DRIVEN_CLUSTERING},
	{"timing_driven_clustering", OT_TIMING_DRIVEN_CLUSTERING},
	{"cluster_seed_type", OT_CLUSTER_SEED},
	{"alpha_clustering", OT_ALPHA_CLUSTERING},
	{"beta_clustering", OT_BETA_CLUSTERING},
	{"recompute_timing_after", OT_RECOMPUTE_TIMING_AFTER},
	{"cluster_block_delay", OT_CLUSTER_BLOCK_DELAY},
	{"intra_cluster_net_delay", OT_INTRA_CLUSTER_NET_DELAY},
	{"inter_cluster_net_delay", OT_INTER_CLUSTER_NET_DELAY},
	{"pack", OT_PACK},
	{"packer_algorithm", OT_PACKER_ALGORITHM},
    {"hack_no_legal_frac_lut", OT_HACK_NO_LEGAL_FRAC_LUT},
	{"hack_safe_latch", OT_HACK_SAFE_LATCH},
    {NULL, OT_BASE_UNKNOWN}	/* End of list marker */
};


const struct s_TokenPair OptionArgTokenList[] = {
    {"on", OT_ON},
    {"off", OT_OFF},
    {"random", OT_RANDOM},
    {"bounding_box", OT_BOUNDING_BOX},
    {"net_timing_driven", OT_NET_TIMING_DRIVEN},
    {"path_timing_driven", OT_PATH_TIMING_DRIVEN},
    {"linear", OT_LINEAR},
    {"nonlinear", OT_NONLINEAR},
    {"breadth_first", OT_BREADTH_FIRST},
    {"timing_driven", OT_TIMING_DRIVEN},
    {"directed_search", OT_DIRECTED_SEARCH},
	{"intrinsic_delay", OT_INTRINSIC_DELAY},
	{"delay_normalized", OT_DELAY_NORMALIZED},
	{"demand_only", OT_DEMAND_ONLY},
    {"global", OT_GLOBAL},
    {"detailed", OT_DETAILED},
	{"timing", OT_TIMING},
	{"max_inputs", OT_MAX_INPUTS},
	{"greedy", OT_GREEDY},
	{"lp", OT_LP},
	{"brute_force", OT_BRUTE_FORCE},
    {NULL, OT_BASE_UNKNOWN}	/* End of list marker */
};
