template < class Point > class PD_D_iterator { // ... // data members Point_it points; // iterator referring to C matrix int i; // row index public: PD_D_iterator( Point_it it) : points( it), i( 0) { } Row_it operator * ( ) { return Row_it( points, i);} // other operators required for random access iterators // ... }; typedef CGAL::QP_transform_iterator_1< Matrix::const_iterator> Vector_iterator; struct QPSolverTraits { typedef GMP::Double ET; typedef Vector_iterator A_iterator; typedef CGAL::QP_const_value_iterator B_iterator; typedef CGAL::QP_const_value_iterator C_iterator; typedef PD_D_iterator D_iterator; enum Row_type { LESS_EQUAL, EQUAL, GREATER_EQUAL}; typedef CGAL::QP_const_value_iterator Row_type_iterator; typedef CGAL::Tag_false Is_linear; typedef CGAL::Tag_true Is_symmetric; typedef CGAL::Tag_true Has_full_row_rank; typedef CGAL::Tag_false Use_perturbation; };