#ifndef CALLBACKS_H
#define CALLBACKS_H

#include <fnobjTfn.h>

/** Callback with 0 arguments */
template< typename A0, typename T >
fnobj0<A0>* callback0createnew( T & data, A0 (T::*fn)() )
{
  return new fnobj0Tfn<T,A0>(data,fn);
}

/** Callback with 1 argument */
template< typename A0, typename A1, typename T >
fnobj1<A0,A1>* callback1createnew( T & data, A0 (T::*fn)(A1) )
{
  return new fnobj1Tfn<T,A0,A1>(data,fn);
}

/** Callback with 2 arguments */
template< typename A0, typename A1, typename A2, typename T >
fnobj2<A0,A1,A2>* callback2createnew( T & data, A0 (T::*fn)(A1,A2) )
{
  return new fnobj2Tfn<T,A0,A1,A2>(data,fn);
}

/** Callback with 3 arguments */
template< typename A0, typename A1, typename A2, typename A3, typename T >
fnobj3<A0,A1,A2,A3>* callback3createnew( T & data, A0 (T::*fn)(A1,A2,A3) )
{
  return new fnobj3Tfn<T,A0,A1,A2,A3>(data,fn);
}



#endif


