/*
 * Testbench_Config.h
 *
 *  Created on: 26.06.2018
 *      Author: edwin
 */

#ifndef TESTBENCH_CONFIG_H_
#define TESTBENCH_CONFIG_H_

#include <iostream>
#include <cstddef>
#include <vector>
#include <string>
#include <stdio.h>

using namespace std;

typedef struct One_Config {
	///parameter of outter boundary for similar function
	float outter_bound_sim_dif;
	///parameter of inner boundary for similar function
	float inner_bound_sim_dif;
	///parameters of outter boundary for drift.
	float outter_bound_drift;
	///parameters of inner boundary for drift.
	float inner_bound_drift;
	///timer telling, after downsampling how many samples after input has changed it is allowed
	///that output is changing, for very slow system high value and for fast system low value
	float bound_broken;
	///length where fuzzy function raises from 0 to 1 or 1 to 0 for the complementery.
	///history of the data depends of it, and should change, if it changes.
	int length;
	//to show if the config was parameterised correctly.
    bool valid;
} One_Config_t;

class Testbench_Config {

private:
	static vector<Testbench_Config*> 	s_vec_all_created_Configs;
	static int 							s_counter_of_all_created_configs;
	static int							s_active_Config;
	const static int 					s_object_is_deleted 		= -1;
	const static int					s_INVALID_INDEX 			= -1;
	const static int					s_MAX_LENGTH_FLOAT_STRING 	= 20;

	int m_current_index;

	One_Config_t configuration;
		void register_Config();
		void deregister_Config();
		void adapt_Indices(int from_index_to_change);
		void cut_number_of_decimal_digits(std::string & str_number);

public:
		Testbench_Config();
		Testbench_Config(One_Config_t& a_config);
		int get_own_index();
		One_Config_t get_Config();
		void print();
		string get_Config_as_String();
		~Testbench_Config();

		static int get_active_Config();
		static void set_active_Config(const int index);

};





#endif /* TESTBENCH_CONFIG_H_ */
