#ifndef morpheo_behavioural_custom_random_h
#define morpheo_behavioural_custom_random_h

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

#include "Behavioural/Custom/include/Custom.h"

namespace morpheo {
namespace behavioural {
namespace custom {
namespace random {

  enum 
    {
      num_register_random,
      num_register_cst1  ,
      num_register_cst2  , 
      num_register_max   
    };

  class Random
  {
  public  : Random (uint32_t num_group);
    
  public  : uint32_t                      get_nb_register               (void);
  public  : access_mode_t                 get_access_mode               (uint32_t     reg);
  public  : custom_decod_t              * get_custom_decod              (Toperation_t operation);
  public  : custom_execute_genMoore_t   * get_custom_execute_genMoore   (Toperation_t operation);
  public  : custom_execute_transition_t * get_custom_execute_transition (void);
  public  : custom_execute_transition_t * get_custom_execute_reset      (void);

  private : static void Random::function_transition (morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::execute_register_t  * reg,
						      morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::execute_param_t     * param);
  private : static void Random::function_reset      (morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::execute_register_t  * reg,
						      morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::execute_param_t     * param);
    };
  
}; // end namespace random 
}; // end namespace custom
}; // end namespace behavioural
}; // end namespace morpheo              

#endif
