#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_read_unit_read_unit_reservation_station_Types_h
#define morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_read_unit_read_unit_reservation_station_Types_h

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

#include "Behavioural/include/Types.h"

namespace morpheo {
namespace behavioural {
namespace core {
namespace multi_execute_loop {
namespace execute_loop {
namespace multi_read_unit {
namespace read_unit {
namespace reservation_station {

  class Treservation_station_entry_t
  {
  public    : Tcontext_t         _context_id     ;
  public    : Tcontext_t         _front_end_id   ;
  public    : Tcontext_t         _ooo_engine_id  ;
  public    : Tpacket_t          _rob_id         ;
  public    : Toperation_t       _operation   ;
  public    : Ttype_t            _type        ;
  public    : Tlsq_ptr_t         _store_queue_ptr_write;
  public    : Tlsq_ptr_t         _store_queue_ptr_read ;
  public    : Tcontrol_t         _store_queue_empty    ;
  public    : Tlsq_ptr_t         _load_queue_ptr_write ;
  public    : Tcontrol_t         _has_immediat;
  public    : Tgeneral_data_t    _immediat    ;
//public    : Tcontrol_t         _read_ra     ;
  public    : Tgeneral_address_t _num_reg_ra  ;
  public    : Tcontrol_t         _data_ra_val ;
  public    : Tgeneral_data_t    _data_ra     ;
//public    : Tcontrol_t         _read_rb     ;
  public    : Tgeneral_address_t _num_reg_rb  ;
  public    : Tcontrol_t         _data_rb_val ;
  public    : Tgeneral_data_t    _data_rb     ;
//public    : Tcontrol_t         _read_rc     ;
  public    : Tspecial_address_t _num_reg_rc  ;
  public    : Tcontrol_t         _data_rc_val ;
  public    : Tspecial_data_t    _data_rc     ;
  public    : Tcontrol_t         _write_rd    ;
  public    : Tgeneral_address_t _num_reg_rd  ;
  public    : Tcontrol_t         _write_re    ;
  public    : Tspecial_address_t _num_reg_re  ;

    friend std::ostream& operator<< (std::ostream& output_stream,
				morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_read_unit::read_unit::reservation_station::Treservation_station_entry_t & x)
    {
      output_stream << " * _context_id            : " << toString(x._context_id     ) << std::endl
		    << " * _front_end_id          : " << toString(x._front_end_id   ) << std::endl
		    << " * _ooo_engine_id         : " << toString(x._ooo_engine_id  ) << std::endl
		    << " * _rob_id                : " << toString(x._rob_id         ) << std::endl
		    << " * _operation             : " << toString(x._operation      ) << std::endl
		    << " * _type                  : " << toString(x._type           ) << std::endl
		    << " * _store_queue_ptr_write : " << toString(x._store_queue_ptr_write) << std::endl
		    << " * _store_queue_ptr_read  : " << toString(x._store_queue_ptr_read ) << std::endl
		    << " * _store_queue_empty     : " << toString(x._store_queue_empty    ) << std::endl
		    << " * _load_queue_ptr_write  : " << toString(x._load_queue_ptr_write ) << std::endl
		    << " * _has_immediat          : " << toString(x._has_immediat   ) << std::endl
		    << " * _immediat              : " << toString(x._immediat       ) << std::endl
// 		    << " * _read_ra               : " << toString(x._read_ra        ) << std::endl
		    << " * _num_reg_ra            : " << toString(x._num_reg_ra     ) << std::endl
		    << " * _data_ra_val           : " << toString(x._data_ra_val    ) << std::endl
		    << " * _data_ra               : " << toString(x._data_ra        ) << std::endl
// 		    << " * _read_rb               : " << toString(x._read_rb        ) << std::endl
		    << " * _num_reg_rb            : " << toString(x._num_reg_rb     ) << std::endl
		    << " * _data_rb_val           : " << toString(x._data_rb_val    ) << std::endl
		    << " * _data_rb               : " << toString(x._data_rb        ) << std::endl
// 		    << " * _read_rc               : " << toString(x._read_rc        ) << std::endl
		    << " * _num_reg_rc            : " << toString(x._num_reg_rc     ) << std::endl
		    << " * _data_rc_val           : " << toString(x._data_rc_val    ) << std::endl
		    << " * _data_rc               : " << toString(x._data_rc        ) << std::endl
		    << " * _write_rd              : " << toString(x._write_rd       ) << std::endl
		    << " * _num_reg_rd            : " << toString(x._num_reg_rd     ) << std::endl
		    << " * _write_re              : " << toString(x._write_re       ) << std::endl
		    << " * _num_reg_re            : " << toString(x._num_reg_re     ) << std::endl;

      return output_stream;
    }
  };

}; // end namespace reservation_station
}; // end namespace read_unit
}; // end namespace multi_read_unit
}; // end namespace execute_loop
}; // end namespace multi_execute_loop
}; // end namespace core

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

#endif
