From ac1b06a2655108e4c574ae7f7daa47be4f38f5f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 5 May 2009 21:05:58 +0000 Subject: [PATCH] add 1 parameter version of Dispatch_*_iterator in non-variadic case --- STL_Extension/include/CGAL/iterator.h | 84 ++++++++++++++++++++++++++- 1 file changed, 81 insertions(+), 3 deletions(-) diff --git a/STL_Extension/include/CGAL/iterator.h b/STL_Extension/include/CGAL/iterator.h index c945fd121e1..e888a04f045 100644 --- a/STL_Extension/include/CGAL/iterator.h +++ b/STL_Extension/include/CGAL/iterator.h @@ -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 Dispatch_output_iterator,cpp0x::tuple >:public cpp0x::tuple{ + typedef Dispatch_output_iterator Self; + +public: + typedef cpp0x::tuple Value_type_tuple; + typedef cpp0x::tuple 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(*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 +inline +Dispatch_output_iterator,cpp0x::tuple > +dispatch_output(O1 out1){ + return Dispatch_output_iterator,cpp0x::tuple >(out1); +} + +//Version with DROP + +template +class Dispatch_or_drop_output_iterator,cpp0x::tuple >: + public Dispatch_output_iterator,cpp0x::tuple > +{ + typedef Dispatch_or_drop_output_iterator Self; + typedef Dispatch_output_iterator,cpp0x::tuple > 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 + Self& operator=(const T&){ + return *this; + } +}; + +template +inline +Dispatch_or_drop_output_iterator,cpp0x::tuple > +dispatch_or_drop_output(O1 out1){ + return Dispatch_or_drop_output_iterator,cpp0x::tuple >(out1); +} + // Version with 2 parameters template class Dispatch_output_iterator,cpp0x::tuple >:public cpp0x::tuple{ @@ -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 Dispatch_or_drop_output_iterator,cpp0x::tuple >: