#ifndef morpheo_behavioural_Parameters_h
#define morpheo_behavioural_Parameters_h

/*
 * $Id$
 *
 * [ Description ]
 * 
 */

#include <stdint.h>
#include <iostream>
#include <math.h>
#include "Behavioural/Constant/Constant_OpenRISC.h"
#include "Behavioural/include/Environnement.h"
#include "Include/ErrorMorpheo.h"
#include "Include/ToString.h"

using namespace morpheo::behavioural::constant;
using namespace std;

namespace morpheo     {
namespace behavioural {

  // Virtual Class - Interface of each component
  class Parameters
  {
    // -----[ fields ]----------------------------------------------------
    // Constant
  public   : const uint32_t _size_condition;
  public   : const uint32_t _size_instruction;
  public   : const uint32_t _size_instruction_log2;

    // -----[ methods ]---------------------------------------------------
  public   :                  Parameters            (void);
  public   : virtual          ~Parameters           ();
	
    // methods to print and test parameters
  public   : virtual string   print                 (uint32_t depth) = 0;
  public   : virtual string   msg_error             (void) = 0;

    // methods to generate configuration file

    
    // methods to test
  public   :         void     test                  (void);
  public   :         bool     is_natural            (double  val );
  public   :         bool     is_positive           (double  val );
  public   :         bool     is_multiple           (uint32_t val1,
		 	    	                     uint32_t val2);
  public   :         bool     is_between_inclusive  (uint32_t val,
						     uint32_t min,
						     uint32_t max);
  public   :         bool     is_between_exclusive  (uint32_t val,
						     uint32_t min,
						     uint32_t max);
  };

}; // end namespace behavioural          
}; // end namespace morpheo              

#endif
