#include <vector>
#include <string>

#ifndef CONFIG_T_H
#define CONFIG_T_H

/* This is the data structure that holds config file details */
struct config_t
{
	std::vector<std::string> list_of_file_names;

	std::string output_type; // string name of the type of output file

	std::string debug_output_path; // path for where to output the debug outputs
	bool output_ast_graphs; // switch that outputs ast graphs per node for use with GRaphViz tools
	bool output_netlist_graphs; // switch that outputs netlist graphs per node for use with GraphViz tools
	bool print_parse_tokens; // switch that controls whether or not each token is printed during parsing
	bool output_preproc_source; // TODO: unused
	
	int min_hard_multiplier; // threshold from hard to soft logic
	int mult_padding; // setting how multipliers are padded to fit fixed size
	// Flag for fixed or variable hard mult (1 or 0)
	int fixed_hard_multiplier;
	// Flag for splitting hard multipliers If fixed_hard_multiplier is set, this must be 1.
	int split_hard_multiplier;
	// 1 to split memory width down to a size of 1. 0 to split to arch width.
	char split_memory_width;
	// Set to a positive integer to split memory depth to that address width. 0 to split to arch width.
	int split_memory_depth;

	//add by Sen
	// Threshold from hard to soft logic(extra bits)
	int min_hard_adder;
	int add_padding; // setting how multipliers are padded to fit fixed size
	// Flag for fixed or variable hard mult (1 or 0)
	int fixed_hard_adder;
	// Flag for splitting hard multipliers If fixed_hard_multiplier is set, this must be 1.
	int split_hard_adder;
	//  Threshold from hard to soft logic
	int min_threshold_adder;
    // defines if the first cin of an adder/subtractor is connected to a global gnd/vdd
    // or generated using a dummy adder with both inputs set to gnd/vdd
    bool adder_cin_global;

	// If the memory is smaller than both of these, it will be converted to soft logic.
	int soft_logic_memory_depth_threshold;
	int soft_logic_memory_width_threshold;

	std::string arch_file; // Name of the FPGA architecture file
};

extern config_t configuration;

#endif
