#ifdef VHDL_TESTBENCH

#ifndef morpheo_behavioural_Vhdl_Testbench_h
#define morpheo_behavioural_Vhdl_Testbench_h

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

#include "Behavioural/include/Environnement.h"
#include "Behavioural/include/Vhdl.h"
#include "Include/ToString.h"
#include "Include/ToBase2.h"
#include <stdint.h>
#include <iostream>
#include <list>

using namespace std;

namespace morpheo              {
namespace behavioural          {

  class Vhdl_Testbench
  {
    class label_t
    {
    public : const uint32_t _cycle;
    public : const string   _label;

      label_t (uint32_t cycle,
	       string   label) :
	_cycle (cycle),
	_label (label)
      {};
    };

//     // -----[ fields ]----------------------------------------------------
//   private   : const string     _name       ;
//   private   : const bool       _exhaustive ;

//   private   : string           _clock_name ;
//   private   : uint32_t         _num_cycle  ;

//   private   : uint32_t         _size_input ;
//   private   : uint32_t         _size_output;

//   private   : list<string>     _list_input ;
//   private   : list<string>     _list_input_cycle;
//   private   : list<uint32_t>   _list_input_size ;

//   private   : list<string>     _list_output;
//   private   : list<string>     _list_output_cycle;
//   private   : list<uint32_t>   _list_output_size ;

//   private   : list<bool>       _list_test;
//   private   : list<string>     _list_port;
//   private   : list<label_t>    _list_label;

//   private   : list<uint32_t>::iterator   _num_input ;
//   private   : list<uint32_t>::iterator   _num_output;

//   private   : Vhdl           * _vhdl;
    
    // -----[ methods ]---------------------------------------------------
  public    :                  Vhdl_Testbench              (string   name,
							    bool     exhaustive=true){};
  public    :                  ~Vhdl_Testbench             (){};
						           
  public    : void             generate_file               (void){};

  public    : void             set_port                    (string      name      ,
							    direction_t direction ,
							    uint32_t    size      ){};
  public    : void             set_clock                   (string      name      ,
							    bool        model_have_clock){};
  public    : void             new_cycle                   (void){};

  private   : uint32_t         get_input                   (void){return 0;};
  private   : void             set_input                   (void){};
  public    : void             add_input                   (uint32_t    value     ){};

  private   : uint32_t         get_output                  (void){return 0;};
  private   : void             set_output                  (void){};
  public    : void             add_output                  (uint32_t    value     ){};

  private   : uint32_t         get_test                    (void){return 0;};
  public    : void             add_test                    (bool        must_test ){};

  private   : void             get_label                   (void){};
  public    : void             add_label                   (string      label     ){};

  private   : void             generate_process_clock      (uint32_t    counter   ){};
  private   : void             generate_instance           (void){};
  };

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

#endif
#endif
