#ifdef STATISTICS
#ifndef morpheo_behavioural_core_multi_front_end_front_end_prediction_unit_direction_meta_predictor_two_level_branch_predictor_branch_history_table_Statistics_h
#define morpheo_behavioural_core_multi_front_end_front_end_prediction_unit_direction_meta_predictor_two_level_branch_predictor_branch_history_table_Statistics_h

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

#include "Common/include/Debug.h"
#include "Behavioural/include/Statistics.h"
#include "Behavioural/include/Parameters_Statistics.h"
#include "Behavioural/Generic/Shifter/include/Statistics.h"
#include "Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/Statistics.h"
//#include "Behavioural/Generic/Group/include/Statistics.h"
#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/Branch_History_Table/include/Parameters.h"

//using namespace morpheo::behavioural::generic::group;

namespace morpheo                    {
namespace behavioural {
namespace core {
namespace multi_front_end {
namespace front_end {
namespace prediction_unit {
namespace direction {

namespace meta_predictor {
namespace two_level_branch_predictor {
namespace branch_history_table {


  class Statistics : public morpheo::behavioural::Statistics
  {
    // -----[ fields ]----------------------------------------------------
  private  : const Parameters                                   _parameters;

    // -----[ methods ]---------------------------------------------------
  public   : Statistics  (string                                      name                       ,
			  morpheo::behavioural::Parameters_Statistics parameters_statistics      ,
			  Parameters                                  parameters
			  );
//public   : Statistics  (Statistics & stat);
  public   : ~Statistics () ;

  public   : string   print_body (uint32_t depth);
  public   : string   print      (uint32_t depth);
  public   : string   print      (uint32_t depth          ,
				  string   component_stat );
  public   : void     add        ();

  public   : friend ostream& operator<< (ostream& output_stream,
					 const Statistics & x);

  };

}; // end namespace branch_history_table
}; // end namespace two_level_branch_predictor
}; // end namespace meta_predictor

}; // end namespace core
}; // end namespace multi_front_end
}; // end namespace front_end
}; // end namespace prediction_unit
}; // end namespace direction


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

#endif
#endif
