Skip to content
Snippets Groups Projects
test_dep.cpp 4.5 KiB
Newer Older
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 * Copyright Projet VISTA / IRISA, 2003
 *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 *
 * File:      test_categorie.cc
 * Project:   Traces
 * Author:    Nicolas Mansard
 *
 * Version control
 * ===============
 *
 *  $Id: test_boost.cpp,v 1.1.1.1 2006-07-03 05:17:37 nmansard Exp $
 *
 * Description
 * ============
 *
 * Test la classe CategorieTrace.
 *
 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

/* -------------------------------------------------------------------------- */
/* --- INCLUDES ------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */
// #include <dynamic-graph/all-signals.h>
#include <dynamic-graph/all-signals.h>
//#include <sot/TimeDependancy.h>
#include <iostream>

#include <MatrixAbstractLayer/boost.h>

using namespace std;

namespace ml = maal::boost;




template< class Res=double >
class DummyClass
{

public:
  DummyClass( void ) : res(),appel(0),timedata(0) {}

  Res& fun( Res& res,int t) 
  {
    appel++;  timedata=t; 

    cout << "Inside " << endl;
    for( list< SignalTimeDependant<double,int>* >::iterator it=inputsig.begin();
	 it!=inputsig.end();++it )
       { cout << *(*it) << endl; (*it)->access(timedata);}
    for( list< SignalTimeDependant<ml::Vector,int>* >::iterator it=inputsigV.begin();
	 it!=inputsigV.end();++it )
      { cout << *(*it) << endl; (*it)->access(timedata);}

    return res=(*this)();
  }

  list< SignalTimeDependant<double,int>* > inputsig;
  list< SignalTimeDependant<ml::Vector,int>* > inputsigV;

  void add( SignalTimeDependant<double,int>& sig ){ inputsig.push_back(&sig); }
  void add( SignalTimeDependant<ml::Vector,int>& sig ){ inputsigV.push_back(&sig); }

  Res operator() ( void );

  Res res;
  int appel;
  int timedata;
  
};

template< class Res >
Res DummyClass<Res>::operator() (void)
{ return this->res; }

template<>
double DummyClass<double>::operator() (void)
{
  res=appel*timedata; return res;
}
template<>
ml::Vector DummyClass<ml::Vector>::operator() (void)
{
  res.resize(3);
  res.fill(appel*timedata); return res;
}


// void dispArray( const SignalArray<int> &ar )
// {
//   for( unsigned int i=0;i<ar.rank;++i ) cout<<*ar.array[i]<<endl;
// }

#include <vector>
int main( void )
{
   DummyClass<double> pro1,pro3,pro5;
   DummyClass<ml::Vector> pro2,pro4,pro6;

   SignalTimeDependant<double,int> sig5("Sig5");
   SignalTimeDependant<ml::Vector,int> sig6("Sig6");
   
   SignalTimeDependant<ml::Vector,int> sig4(sig5,"Sig4");
   SignalTimeDependant<ml::Vector,int> sig2(sig4<<sig4<<sig4<<sig6,"Sig2");
   SignalTimeDependant<double,int> sig3(sig2<<sig5<<sig6,"Sig3");
   SignalTimeDependant<double,int> sig1( boost::bind(&DummyClass<double>::fun,pro1,_1,_2),
					   sig2<<sig3,"Sig1");

//    cout << "--- Test Array ------ "<<endl;
//    SignalArray<int> tarr(12);
//    tarr<<sig3<<sig2;//+sig2+sig3;
//    dispArray(sig4<<sig2<<sig3);
//    dispArray(tarr);
  



   //sig1.set( &DummyClass<double>::fun,pro1 );
   sig2.setFunction( boost::bind(&DummyClass<ml::Vector>::fun,pro2,_1,_2) );
   sig3.setFunction( boost::bind(&DummyClass<double>::fun,pro3,_1,_2) );
   sig4.setFunction( boost::bind(&DummyClass<ml::Vector>::fun,pro4,_1,_2) );
   sig5.setFunction( boost::bind(&DummyClass<double>::fun,pro5,_1,_2) );
   sig6.setFunction( boost::bind(&DummyClass<ml::Vector>::fun,pro6,_1,_2) );

   //    sig1.addDependancy(sig2);   
   //     sig1.addDependancy(sig3);   
   //      sig2.addDependancy(sig4);   
   //      sig2.addDependancy(sig4);   
   //     sig2.addDependancy(sig4);   
   //      sig3.addDependancy(sig2);   
   //      sig4.addDependancy(sig5);   
   //      sig2.addDependancy(sig6);   
   //      sig3.addDependancy(sig5);   
   //      sig3.addDependancy(sig6);   

   pro1.add(sig2);
   pro1.add(sig3);
   pro2.add(sig4);
   pro2.add(sig4);
   pro2.add(sig4);
   pro3.add(sig2);
   pro4.add(sig5);
   pro2.add(sig6);
   pro3.add(sig5);
   pro3.add(sig6);
   
   //sig5.setDependancyType(TimeDependancy<int>::ALWAYS_READY);
   //sig6.setDependancyType(TimeDependancy<int>::BOOL_DEPENDANT);

    sig6.setReady();

   sig1.displayDependancies(cout)<<endl;
 
   cout << "Needs update?"<< endl <<  sig1.needUpdate(2) << endl;
   sig1.access(2);
   sig1.displayDependancies(cout)<<endl;
   sig2.access(4);
   sig1.displayDependancies(cout)<<endl;
   sig1.access(4);
   sig1.displayDependancies(cout)<<endl;
   sig1.needUpdate(6);
   sig1.needUpdate(6);

  return 0;

}