#ifndef READOPTIONS_H
#define READOPTIONS_H

#include "OptionTokens.h"

typedef struct s_options t_options;
struct s_options {
	/* File names */
	char *ArchFile;
	char *SettingsFile;
	char *CircuitName;
	char *NetFile;
	char *PlaceFile;
	char *RouteFile;
	char *BlifFile;
	char *ActFile;
	char *PowerFile;
	char *CmosTechFile;
	char *out_file_prefix;
	char *SDCFile;

	/* General options */
	int GraphPause;
	float constant_net_delay;
	boolean TimingAnalysis;
	boolean CreateEchoFile;
	boolean Generate_Post_Synthesis_Netlist;
	/* Clustering options */
	boolean global_clocks;
	int cluster_size;
	int inputs_per_cluster;
	int lut_size;
	boolean hill_climbing_flag;
	boolean sweep_hanging_nets_and_inputs;
	boolean timing_driven;
	enum e_cluster_seed cluster_seed_type;
	float alpha;
	float beta;
	int recompute_timing_after;
	float block_delay;
	float intra_cluster_net_delay;
	float inter_cluster_net_delay;
	boolean skip_clustering;
	boolean allow_unrelated_clustering;
	boolean allow_early_exit;
	boolean connection_driven;
	enum e_packer_algorithm packer_algorithm;

	/* Placement options */
	enum e_place_algorithm PlaceAlgorithm;
	float PlaceInitT;
	float PlaceExitT;
	float PlaceAlphaT;
	float PlaceInnerNum;
	int Seed;
	float place_cost_exp;
	int PlaceChanWidth;
	char *PinFile;
	boolean ShowPlaceTiming;
	int block_dist;

	/* Timing-driven placement options only */
	float PlaceTimingTradeoff;
	int RecomputeCritIter;
	int inner_loop_recompute_divider;
	float place_exp_first;
	float place_exp_last;

	/* Router Options */
	int max_router_iterations;
	int bb_factor;
	float initial_pres_fac;
	float pres_fac_mult;
	float acc_fac;
	float first_iter_pres_fac;
	float bend_cost;
	enum e_route_type RouteType;
	int RouteChanWidth;
	boolean TrimEmptyChan;
	boolean TrimObsChan;
	enum e_router_algorithm RouterAlgorithm;
	enum e_base_cost_type base_cost_type;

#ifdef INTERPOSER_BASED_ARCHITECTURE
	int percent_wires_cut;
	int num_cuts;
	int delay_increase;
	float placer_cost_constant;
	int constant_type;
	/* architecture experiments */
	boolean allow_chanx_interposer_connections;
	boolean transfer_interposer_fanins;
	boolean allow_additional_interposer_fanins;
	int  pct_of_interposer_nodes_each_chany_can_drive;
	boolean transfer_interposer_fanouts;
	boolean allow_additional_interposer_fanouts;
	int  pct_of_chany_wires_an_interposer_node_can_drive;
	boolean allow_bidir_interposer_wires;
#endif

	/* Timing-driven router options only */
	float astar_fac;
	float criticality_exp;
	float max_criticality;
	enum e_routing_failure_predictor routing_failure_predictor;

	/* State and metadata about various settings */
	int Count[OT_BASE_UNKNOWN];
	int Provenance[OT_BASE_UNKNOWN];

	/* Last read settings file */
	int read_settings;
};

enum e_echo_files {
	E_ECHO_INITIAL_CLB_PLACEMENT = 0,
	E_ECHO_INITIAL_PLACEMENT_TIMING_GRAPH,
	E_ECHO_INITIAL_PLACEMENT_SLACK,
	E_ECHO_INITIAL_PLACEMENT_CRITICALITY,
	E_ECHO_END_CLB_PLACEMENT,
	E_ECHO_PLACEMENT_SINK_DELAYS,
	E_ECHO_FINAL_PLACEMENT_TIMING_GRAPH,
	E_ECHO_FINAL_PLACEMENT_SLACK,
	E_ECHO_FINAL_PLACEMENT_CRITICALITY,
	E_ECHO_PLACEMENT_CRIT_PATH,
	E_ECHO_PB_GRAPH,
	E_ECHO_LB_TYPE_RR_GRAPH,
	E_ECHO_ARCH,
	E_ECHO_PLACEMENT_CRITICAL_PATH,
	E_ECHO_PLACEMENT_LOWER_BOUND_SINK_DELAYS,
	E_ECHO_PLACEMENT_LOGIC_SINK_DELAYS,
	E_ECHO_ROUTING_SINK_DELAYS,
	E_ECHO_POST_FLOW_TIMING_GRAPH,
	E_ECHO_POST_PACK_NETLIST,
	E_ECHO_BLIF_INPUT,
	E_ECHO_COMPRESSED_NETLIST,
	E_ECHO_NET_DELAY,
	E_ECHO_TIMING_GRAPH,
	E_ECHO_LUT_REMAPPING,
	E_ECHO_PRE_PACKING_TIMING_GRAPH,
	E_ECHO_PRE_PACKING_TIMING_GRAPH_AS_BLIF,
	E_ECHO_CLUSTERING_TIMING_INFO,
	E_ECHO_PRE_PACKING_SLACK,
	E_ECHO_PRE_PACKING_CRITICALITY,
	E_ECHO_CLUSTERING_BLOCK_CRITICALITIES,
	E_ECHO_PRE_PACKING_MOLECULES_AND_PATTERNS,
	E_ECHO_MEM,
	E_ECHO_RR_GRAPH,
	E_ECHO_TIMING_CONSTRAINTS,
	E_ECHO_CRITICAL_PATH,
	E_ECHO_SLACK,
	E_ECHO_COMPLETE_NET_TRACE,
	E_ECHO_SEG_DETAILS,
	E_ECHO_CHAN_DETAILS,
	E_ECHO_SBLOCK_PATTERN,
	E_ECHO_END_TOKEN
};


enum e_output_files {
	E_CRIT_PATH_FILE,
	E_SLACK_FILE,
	E_CRITICALITY_FILE,
	E_FILE_END_TOKEN
};


void ReadOptions(INP int argc,
		INP char **argv,
		OUTP t_options * Options);

boolean getEchoEnabled(void);
void setEchoEnabled(boolean echo_enabled);

void setAllEchoFileEnabled(boolean value);
void setEchoFileEnabled(enum e_echo_files echo_option, boolean value);
void setEchoFileName(enum e_echo_files echo_option, const char *name);

boolean isEchoFileEnabled(enum e_echo_files echo_option);
char *getEchoFileName(enum e_echo_files echo_option);

void alloc_and_load_echo_file_info();
void free_echo_file_info();

void setOutputFileName(enum e_output_files ename, const char *name, const char* default_name);
char *getOutputFileName(enum e_output_files ename);
void alloc_and_load_output_file_names(const char* default_name);
void free_output_file_names();

boolean IsTimingEnabled(INP t_options *Options);
boolean IsEchoEnabled(INP t_options *Options);

boolean GetPostSynthesisOption(void);
void SetPostSynthesisOption(boolean post_synthesis_enabled);

boolean IsPostSynthesisEnabled(INP t_options *Options);
#endif
