%module simutry

%include "std_vector.i"

%inline {

namespace simuPOP
{
  // some simple pop class
  template <class Type>
  struct Population {
    int m_a;
    Population(int a):m_a(a){}
  };

  // base operator, output pop.m_a
  template<class Pop>
  struct Operator
  {
    Pop m_pop;
    Operator(int a):m_pop(a){}
    virtual ~Operator()
    {
    }
    
    virtual int funk() const 
    { return m_pop.m_a; }
  };

  // derived operator, output double of pop.m_a
  template<class Pop>
  struct DerivedOperator: public Operator<Pop>
  {
    DerivedOperator(int a):Operator<Pop>(a){}
    virtual int funk() const 
    { return 2*this->m_pop.m_a; }
  };

}

}

#if 1
namespace simuPOP
{
  %template(population)   Population< std::pair<unsigned long,unsigned long> >;
}      

%inline 
{
  namespace simuPOP
  {
    typedef Population< std::pair<unsigned long,unsigned long> > pop;
  }
}
#else
%inline 
{
  namespace simuPOP
  {
    //  %template(population)          Population< std::pair<unsigned long,unsigned long> >;
    
    struct pop {
      int m_a;
      pop(int a):m_a(a){}
    };
  }
}
#endif


namespace simuPOP
{
 %template(baseOperator)        Operator< pop >;
 %template(derivedOperator)     DerivedOperator< pop >;
}



namespace std
{
  %template(vectorop)   vector< simuPOP::Operator<simuPOP::pop> * >;
}

%inline
{
namespace simuPOP
{
  // test function, use of a vector of Operator*
  void test( const std::vector< Operator<pop>*>& para)
  {
    for( size_t i =0; i < para.size(); ++i)
    para[i]->funk();
  }
}
}


