minor preps for dynamic dimension

This commit is contained in:
Marc Glisse 2012-05-16 14:49:32 +00:00
parent ec3428bbfc
commit a031abe9a0
3 changed files with 14 additions and 8 deletions

View File

@ -35,10 +35,17 @@ const int UNKNOWN_DIMENSION=Eigen::Dynamic;
const int UNKNOWN_DIMENSION=std::numeric_limits<int>::max(); const int UNKNOWN_DIMENSION=std::numeric_limits<int>::max();
#endif #endif
inline bool check_dimension(int d1, int d2){ inline bool check_dimension_lt(int d1, int d2){
//return (d2==UNKNOWN_DIMENSION)||(d1<d2);
return d1<d2;
}
inline bool check_dimension_le(int d1, int d2){
//return (d2==UNKNOWN_DIMENSION)||(d1<=d2); //return (d2==UNKNOWN_DIMENSION)||(d1<=d2);
return d1<=d2; return d1<=d2;
} }
inline bool check_dimension_eq(int d1, int d2){
return d2==UNKNOWN_DIMENSION || d1==d2;
}
// These tag classes help dispatching functions based on a geometric dimension. // These tag classes help dispatching functions based on a geometric dimension.

View File

@ -48,7 +48,7 @@ template<class R_,class Zero_> struct Construct_LA_vector
typedef typename R_::Default_ambient_dimension Dimension; typedef typename R_::Default_ambient_dimension Dimension;
static const int dim=Dimension::value; static const int dim=Dimension::value;
result_type operator()(int d)const{ result_type operator()(int d)const{
CGAL_assertion(d==dim); CGAL_assertion(check_dimension_eq(d,dim));
return typename Constructor::Dimension()(d); return typename Constructor::Dimension()(d);
} }
result_type operator()()const{ result_type operator()()const{
@ -86,8 +86,8 @@ template<class R_,class Zero_> struct Construct_LA_vector
(Iter f,Iter g,Cartesian_tag)const (Iter f,Iter g,Cartesian_tag)const
{ {
int d=std::distance(f,g); int d=std::distance(f,g);
CGAL_assertion(d==dim); CGAL_assertion(check_dimension_eq(d,dim));
return typename Constructor::Iterator()(dim,f,g); return typename Constructor::Iterator()(d,f,g);
} }
template<class Iter> typename boost::enable_if<is_iterator_type<Iter,std::bidirectional_iterator_tag>,result_type>::type operator() template<class Iter> typename boost::enable_if<is_iterator_type<Iter,std::bidirectional_iterator_tag>,result_type>::type operator()
(Iter f,Iter g,Homogeneous_tag)const (Iter f,Iter g,Homogeneous_tag)const
@ -104,9 +104,9 @@ template<class R_,class Zero_> struct Construct_LA_vector
(Iter f,Iter g,NT const&l)const (Iter f,Iter g,NT const&l)const
{ {
int d=std::distance(f,g); int d=std::distance(f,g);
CGAL_assertion(d==dim); CGAL_assertion(check_dimension_eq(d,dim));
// RT? better be safe for now // RT? better be safe for now
return typename Constructor::Iterator()(dim,CGAL::make_transforming_iterator(f,Divide<FT,NT>(l)),CGAL::make_transforming_iterator(g,Divide<FT,NT>(l))); return typename Constructor::Iterator()(d,CGAL::make_transforming_iterator(f,Divide<FT,NT>(l)),CGAL::make_transforming_iterator(g,Divide<FT,NT>(l)));
} }
}; };
@ -269,7 +269,6 @@ template<class R_> struct PV_dimension {
template<class T> template<class T>
result_type operator()(T const& v) const { result_type operator()(T const& v) const {
//FIXME: size_of_vector comes from Vector, not LA
return LA::size_of_vector(v); return LA::size_of_vector(v);
} }
}; };

View File

@ -6,7 +6,7 @@
namespace CGAL { namespace CGAL {
template<class=Dynamic_dimension_tag> struct Dimension_base { template<class=Dynamic_dimension_tag> struct Dimension_base {
//TODO: add some assertions //TODO: add some assertions
Dimension_base(int dim=-1):dim_(dim){} Dimension_base(int dim=UNKNOWN_DIMENSION):dim_(dim){}
int dimension()const{return dim_;} int dimension()const{return dim_;}
void set_dimension(int dim){dim_=dim;} void set_dimension(int dim){dim_=dim;}
private: private: