Split instantaneous and kinetic versions of predicate as the compiler was having trouble telling the templates apart.

This commit is contained in:
Daniel Russel 2008-04-01 18:01:39 +00:00
parent b28d073a9f
commit 7bd75414f2
1 changed files with 77 additions and 46 deletions

View File

@ -30,76 +30,107 @@ struct Certificate_generator {
Certificate_generator(typename KK_t::Function_kernel fk): fk_(fk){}
Certificate_generator(){}
enum When {AT, AFTER};
template <class A, class B, class C, class D, class E, class Time>
CGAL::Sign sign_at(const A &a, const B &b, const C &c, const D &d, const E &e,
const Time &begin) const {
return eval_sign_at(gen_(a,b,c,d,e), begin);
}
template <class A, class B, class C, class D, class E, class Time>
CGAL::Sign sign_after(const A &a, const B &b, const C &c, const D &d, const E &e,
const Time &begin) const {
//if (when==AFTER) {
return eval_sign_after(gen_(a, b, c, d, e), begin);
/*} elsee {
return sign_at(gen_(a,b,c,d,e), begin);
}*/
}
template <class A, class B, class C, class D>
CGAL::Sign sign_at(const A &a, const B &b, const C &c, const D &d,
const Time &begin) const {
return eval_sign_at(gen_(a, b, c, d), begin);
}
template <class A, class B, class C, class D>
CGAL::Sign sign_after(const A &a, const B &b, const C &c, const D &d,
const Time &begin) const {
return eval_sign_after(gen_(a, b, c, d), begin);
}
template <class A, class B, class C>
CGAL::Sign sign_at(const A &a, const B &b, const C &c,
const Time &begin) const {
return eval_sign_at(gen_(a,b,c), begin);
}
template <class A, class B, class C>
CGAL::Sign sign_after(const A &a, const B &b, const C &c,
const Time &begin) const {
return eval_sign_after(gen_(a,b,c), begin);
}
template <class A, class B>
CGAL::Sign sign_at(const A &a, const B &b,
const Time &begin) const {
return eval_sign_at(gen_(a, b), begin);
}
template <class A, class B>
CGAL::Sign sign_after(const A &a, const B &b,
const Time &begin) const {
return eval_sign_after(gen_(a, b), begin);
}
template <class A>
CGAL::Sign sign_at(const A &a, const Time &begin) const {
return eval_sign_at(gen_(a), begin);
}
template <class A>
CGAL::Sign sign_after(const A &a, const Time &begin) const {
return eval_sign_after(gen_(a), begin);
}
template <class A, class B, class C, class D, class E>
result_type operator()(const A &a, const B &b, const C &c, const D &d, const E &e, const Time &begin, const Time &end) const {
result_type operator()(const A &a, const B &b, const C &c, const D &d, const E &e,
const Time &begin, const Time &end) const {
return result_type(gen_(a, b, c, d, e), fk_, begin, end);
}
template <class A, class B, class C, class D>
result_type operator()(const A &a, const B &b, const C &c, const D &d, const Time &begin, const Time &end) const {
result_type operator()(const A &a, const B &b, const C &c, const D &d,
const Time &begin, const Time &end) const {
return result_type(gen_(a, b, c, d), fk_, begin, end);
}
template <class A, class B, class C>
result_type operator()(const A &a, const B &b, const C &c, const Time &begin, const Time &end) const {
result_type operator()(const A &a, const B &b, const C &c, const Time &begin,
const Time &end) const {
return result_type(gen_(a, b, c), fk_, begin, end);
}
template <class A, class B>
result_type operator()(const A &a, const B &b, const Time &begin, const Time &end) const {
return result_type(gen_(a, b), fk_, begin, end);
}
template <class A>
result_type operator()(const A &a, const Time &begin, const Time &end) const {
return result_type(gen_(a), fk_,begin,end);
}
template <class A, class B, class C, class D, class E>
CGAL::Sign operator()(const A &a, const B &b, const C &c, const D &d, const E &e, const Time &begin, bool after=false) const {
if (after) {
return sign_after(gen_(a, b, c, d, e), begin);
} else {
return sign_at(gen_(a,b,c,d,e), begin);
}
}
template <class A, class B, class C, class D>
CGAL::Sign operator()(const A &a, const B &b, const C &c, const D &d, const Time &begin, bool after=false) const {
if (after) {
return sign_after(gen_(a, b, c, d), begin);
} else {
return sign_at(gen_(a,b,c,d), begin);
}
}
template <class A, class B, class C>
CGAL::Sign operator()(const A &a, const B &b, const C &c, const Time &begin, bool after=false) const {
if (after) {
return sign_after(gen_(a, b, c), begin);
} else {
return sign_at(gen_(a,b,c), begin);
}
}
template <class A, class B>
CGAL::Sign operator()(const A &a, const B &b, const Time &begin, bool after=false) const {
if (after) {
return sign_after(gen_(a, b), begin);
} else {
return sign_at(gen_(a, b), begin);
}
}
template <class A>
CGAL::Sign operator()(const A &a, const Time &begin, bool after=false) const {
if (after) {
return sign_after(gen_(a), begin);
} else {
return sign_at(gen_(a), begin);
}
}
protected:
CGAL::Sign sign_after(const typename KK_t::Function_kernel::Function &f,
CGAL::Sign eval_sign_after(const typename KK_t::Function_kernel::Function &f,
const Time &t) const {
return fk_.sign_after_object()(f,t);
}
CGAL::Sign sign_at(const typename KK_t::Function_kernel::Function &f,
CGAL::Sign eval_sign_at(const typename KK_t::Function_kernel::Function &f,
const Time &t) const {
return fk_.sign_at_object()(f,t);
}