#ifndef morpheo_behavioural_core_multi_ooo_engine_ooo_engine_rename_unit_load_store_pointer_unit_Parameters_h
#define morpheo_behavioural_core_multi_ooo_engine_ooo_engine_rename_unit_load_store_pointer_unit_Parameters_h

/*
 * $Id: Parameters.h 110 2009-02-19 16:31:47Z rosiere $
 *
 * [ Description ]
 * 
 */

#include "Common/include/Debug.h"
#include "Behavioural/include/Parameters.h"

namespace morpheo {
namespace behavioural {
namespace core {
namespace multi_ooo_engine {
namespace ooo_engine {
namespace rename_unit {
namespace load_store_pointer_unit {


  class Parameters : public morpheo::behavioural::Parameters
  {
    //-----[ fields ]------------------------------------------------------------
  public : uint32_t    _nb_front_end                    ;
  public : uint32_t  * _nb_context                      ; //[nb_front_end]
  public : uint32_t    _nb_load_store_queue             ;
  public : uint32_t  * _size_store_queue                ; //[nb_load_store_queue]
  public : uint32_t  * _size_load_queue                 ; //[nb_load_store_queue]
  public : uint32_t  * _nb_inst_memory                  ; //[nb_load_store_queue]
  public : uint32_t ** _link_load_store_unit_with_thread; //[nb_front_end][nb_context]
  public : uint32_t    _nb_inst_insert                  ;
  public : uint32_t    _nb_inst_retire                  ;

  public : uint32_t    _max_size_store_queue            ;
  public : uint32_t    _max_size_load_queue             ;

//public : uint32_t    _size_front_end_id               ;
//public : uint32_t    _size_context_id                 ;    
//public : uint32_t    _size_store_queue_ptr            ;
//public : uint32_t    _size_load_queue_ptr             ;

//public : uint32_t    _have_port_front_end_id          ;
//public : uint32_t    _have_port_context_id            ;
//public : uint32_t    _have_port_load_queue_ptr        ;

    //-----[ methods ]-----------------------------------------------------------
  public : Parameters  (uint32_t    nb_front_end                    ,
			uint32_t  * nb_context                      ,
//                      uint32_t    size_front_end_id               ,
//                      uint32_t    size_context_id                 ,
			uint32_t    nb_load_store_queue             ,
			uint32_t  * size_store_queue                ,
			uint32_t  * size_load_queue                 ,
			uint32_t  * nb_inst_memory                  ,
			uint32_t ** link_load_store_unit_with_thread,
			uint32_t    nb_inst_insert                  ,
			uint32_t    nb_inst_retire                  ,
                        bool        is_toplevel=false
                        );

//   public : Parameters  (Parameters & param) ;
  public : ~Parameters () ;

  public :        void            copy       (void);

  public :        Parameters_test msg_error  (void);

  public :        std::string     print      (uint32_t depth);
  public : friend std::ostream&   operator<< (std::ostream& output_stream,
					      morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::load_store_pointer_unit::Parameters & x);
  };

}; // end namespace load_store_pointer_unit
}; // end namespace rename_unit
}; // end namespace ooo_engine
}; // end namespace multi_ooo_engine
}; // end namespace core
}; // end namespace behavioural
}; // end namespace morpheo              

#endif
