add 1 parameter version of Dispatch_*_iterator in non-variadic case

This commit is contained in:
Sébastien Loriot 2009-05-05 21:05:58 +00:00
parent e4cb94b35e
commit ac1b06a265
1 changed files with 81 additions and 3 deletions

View File

@ -1315,6 +1315,87 @@ dispatch_or_drop_output(O... o)
template < typename V, typename O >
class Dispatch_output_iterator;
template < typename V, typename O >
class Dispatch_or_drop_output_iterator;
// Version with 1 parameters
template<class V1,class O1>
class Dispatch_output_iterator<cpp0x::tuple<V1>,cpp0x::tuple<O1> >:public cpp0x::tuple<O1>{
typedef Dispatch_output_iterator Self;
public:
typedef cpp0x::tuple<V1> Value_type_tuple;
typedef cpp0x::tuple<O1> Iterator_tuple;
typedef std::output_iterator_tag iterator_category;
typedef void value_type;
typedef void difference_type;
typedef void pointer;
typedef void reference;
Self& operator*(){ return *this; }
Self& operator++(){ return *this; }
Self& operator++(int){ return *this; }
Dispatch_output_iterator(O1 out1):Iterator_tuple(out1){}
Self& operator=(const V1& obj){
*cpp0x::get<0>(static_cast<Iterator_tuple& >(*this))++=obj;
return *this;
}
Self& operator=(const Self& s){
static_cast< Iterator_tuple& >(*this) = static_cast< const Iterator_tuple& >(s);
return *this;
}
const Iterator_tuple& get_iterator_tuple() const
{ return *this; }
};
template<class V1,class O1>
inline
Dispatch_output_iterator<cpp0x::tuple<V1>,cpp0x::tuple<O1> >
dispatch_output(O1 out1){
return Dispatch_output_iterator<cpp0x::tuple<V1>,cpp0x::tuple<O1> >(out1);
}
//Version with DROP
template<class V1,class O1>
class Dispatch_or_drop_output_iterator<cpp0x::tuple<V1>,cpp0x::tuple<O1> >:
public Dispatch_output_iterator<cpp0x::tuple<V1>,cpp0x::tuple<O1> >
{
typedef Dispatch_or_drop_output_iterator Self;
typedef Dispatch_output_iterator<cpp0x::tuple<V1>,cpp0x::tuple<O1> > Base;
public:
Self& operator*(){ return *this; }
Self& operator++(){ return *this; }
Self& operator++(int){ return *this; }
Dispatch_or_drop_output_iterator(O1 out1):Base(out1){}
using Base::operator=;
template <class T>
Self& operator=(const T&){
return *this;
}
};
template<class V1,class O1>
inline
Dispatch_or_drop_output_iterator<cpp0x::tuple<V1>,cpp0x::tuple<O1> >
dispatch_or_drop_output(O1 out1){
return Dispatch_or_drop_output_iterator<cpp0x::tuple<V1>,cpp0x::tuple<O1> >(out1);
}
// Version with 2 parameters
template<class V1,class O1,class V2,class O2>
class Dispatch_output_iterator<cpp0x::tuple<V1,V2>,cpp0x::tuple<O1,O2> >:public cpp0x::tuple<O1,O2>{
@ -1365,9 +1446,6 @@ dispatch_output(O1 out1,O2 out2){
}
//Version with DROP
template < typename V, typename O >
class Dispatch_or_drop_output_iterator;
template<class V1,class O1,class V2,class O2>
class Dispatch_or_drop_output_iterator<cpp0x::tuple<V1,V2>,cpp0x::tuple<O1,O2> >: