- Fix protect macro

- Extend operators till 10 arguments.
This commit is contained in:
Sylvain Pion 2006-01-28 20:31:56 +00:00
parent edc635d52f
commit 08ea450d0d
1 changed files with 182 additions and 4 deletions

View File

@ -21,8 +21,8 @@
//
// Author(s) : Sylvain Pion
#ifndef CGAL_FILTER_PREDICATE_H
#define CGAL_FILTER_PREDICATE_H
#ifndef CGAL_FILTERED_PREDICATE_H
#define CGAL_FILTERED_PREDICATE_H
#include <CGAL/basic.h>
#include <CGAL/Interval_nt.h>
@ -244,7 +244,87 @@ public:
}
#endif
// Idem for more than 7 arguments. Do it on demand.
template <class A1, class A2, class A3, class A4, class A5, class A6,
class A7, class A8>
result_type
operator()(const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4,
const A5 &a5, const A6 &a6, const A7 &a7, const A8 &a8) const
#ifndef CGAL_CFG_OUTOFLINE_TEMPLATE_MEMBER_DEFINITION_BUG
;
#else
{
try
{
CGAL_PROFILER(std::string("calls to : ") + std::string(__PRETTY_FUNCTION__));
Protect_FPU_rounding<Protection> P;
Ares res = ap(c2a(a1), c2a(a2), c2a(a3), c2a(a4),
c2a(a5), c2a(a6), c2a(a7), c2a(a8) );
if (! is_indeterminate(res))
return res;
}
catch (Interval_nt_advanced::unsafe_comparison) {}
CGAL_PROFILER(std::string("failures of : ") + std::string(__PRETTY_FUNCTION__));
Protect_FPU_rounding<!Protection> P(CGAL_FE_TONEAREST);
return ep(c2e(a1), c2e(a2), c2e(a3), c2e(a4),
c2e(a5), c2e(a6), c2e(a7), c2e(a8) );
}
#endif
template <class A1, class A2, class A3, class A4, class A5, class A6,
class A7, class A8, class A9>
result_type
operator()(const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4,
const A5 &a5, const A6 &a6, const A7 &a7, const A8 &a8,
const A9 &a9) const
#ifndef CGAL_CFG_OUTOFLINE_TEMPLATE_MEMBER_DEFINITION_BUG
;
#else
{
try
{
CGAL_PROFILER(std::string("calls to : ") + std::string(__PRETTY_FUNCTION__));
Protect_FPU_rounding<Protection> P;
Ares res = ap(c2a(a1), c2a(a2), c2a(a3), c2a(a4),
c2a(a5), c2a(a6), c2a(a7), c2a(a8), c2a(a9) );
if (! is_indeterminate(res))
return res;
}
catch (Interval_nt_advanced::unsafe_comparison) {}
CGAL_PROFILER(std::string("failures of : ") + std::string(__PRETTY_FUNCTION__));
Protect_FPU_rounding<!Protection> P(CGAL_FE_TONEAREST);
return ep(c2e(a1), c2e(a2), c2e(a3), c2e(a4),
c2e(a5), c2e(a6), c2e(a7), c2e(a8), c2e(a9) );
}
#endif
template <class A1, class A2, class A3, class A4, class A5, class A6,
class A7, class A8, class A9, class A10>
result_type
operator()(const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4,
const A5 &a5, const A6 &a6, const A7 &a7, const A8 &a8,
const A9 &a9, const A10 &a10) const
#ifndef CGAL_CFG_OUTOFLINE_TEMPLATE_MEMBER_DEFINITION_BUG
;
#else
{
try
{
CGAL_PROFILER(std::string("calls to : ") + std::string(__PRETTY_FUNCTION__));
Protect_FPU_rounding<Protection> P;
Ares res = ap(c2a(a1), c2a(a2), c2a(a3), c2a(a4),
c2a(a5), c2a(a6), c2a(a7), c2a(a8), c2a(a9), c2a(a10) );
if (! is_indeterminate(res))
return res;
}
catch (Interval_nt_advanced::unsafe_comparison) {}
CGAL_PROFILER(std::string("failures of : ") + std::string(__PRETTY_FUNCTION__));
Protect_FPU_rounding<!Protection> P(CGAL_FE_TONEAREST);
return ep(c2e(a1), c2e(a2), c2e(a3), c2e(a4),
c2e(a5), c2e(a6), c2e(a7), c2e(a8), c2e(a9), c2e(a10) );
}
#endif
// Idem for more than 10 arguments. Do it on demand.
};
#ifndef CGAL_CFG_OUTOFLINE_TEMPLATE_MEMBER_DEFINITION_BUG
@ -369,8 +449,106 @@ Filtered_predicate<EP,AP,C2E,C2A,Protection>::
Protect_FPU_rounding<!Protection> P(CGAL_FE_TONEAREST);
return ep(c2e(a1), c2e(a2), c2e(a3), c2e(a4), c2e(a5), c2e(a6));
}
template <class EP, class AP, class C2E, class C2A, bool Protection>
template <class A1, class A2, class A3, class A4, class A5, class A6,
class A7>
typename Filtered_predicate<EP,AP,C2E,C2A,Protection>::result_type
Filtered_predicate<EP,AP,C2E,C2A,Protection>::
operator()(const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4,
const A5 &a5, const A6 &a6, const A7 &a7) const
{
try
{
CGAL_PROFILER(std::string("calls to : ") + std::string(CGAL_PRETTY_FUNCTION));
Protect_FPU_rounding<Protection> P;
Ares res = ap(c2a(a1), c2a(a2), c2a(a3), c2a(a4), c2a(a5), c2a(a6),
c2a(a7));
if (! is_indeterminate(res))
return res;
}
catch (Interval_nt_advanced::unsafe_comparison) {}
CGAL_PROFILER(std::string("failures of : ") + std::string(CGAL_PRETTY_FUNCTION));
Protect_FPU_rounding<!Protection> P(CGAL_FE_TONEAREST);
return ep(c2e(a1), c2e(a2), c2e(a3), c2e(a4), c2e(a5), c2e(a6), c2e(a7));
}
template <class EP, class AP, class C2E, class C2A, bool Protection>
template <class A1, class A2, class A3, class A4, class A5, class A6,
class A7, class A8>
typename Filtered_predicate<EP,AP,C2E,C2A,Protection>::result_type
Filtered_predicate<EP,AP,C2E,C2A,Protection>::
operator()(const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4,
const A5 &a5, const A6 &a6, const A7 &a7, const A8 &a8) const
{
try
{
CGAL_PROFILER(std::string("calls to : ") + std::string(CGAL_PRETTY_FUNCTION));
Protect_FPU_rounding<Protection> P;
Ares res = ap(c2a(a1), c2a(a2), c2a(a3), c2a(a4), c2a(a5), c2a(a6),
c2a(a7), c2a(a8));
if (! is_indeterminate(res))
return res;
}
catch (Interval_nt_advanced::unsafe_comparison) {}
CGAL_PROFILER(std::string("failures of : ") + std::string(CGAL_PRETTY_FUNCTION));
Protect_FPU_rounding<!Protection> P(CGAL_FE_TONEAREST);
return ep(c2e(a1), c2e(a2), c2e(a3), c2e(a4), c2e(a5), c2e(a6), c2e(a7),
c2e(a8));
}
template <class EP, class AP, class C2E, class C2A, bool Protection>
template <class A1, class A2, class A3, class A4, class A5, class A6,
class A7, class A8, class A9>
typename Filtered_predicate<EP,AP,C2E,C2A,Protection>::result_type
Filtered_predicate<EP,AP,C2E,C2A,Protection>::
operator()(const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4,
const A5 &a5, const A6 &a6, const A7 &a7, const A8 &a8,
const A9 &a9) const
{
try
{
CGAL_PROFILER(std::string("calls to : ") + std::string(CGAL_PRETTY_FUNCTION));
Protect_FPU_rounding<Protection> P;
Ares res = ap(c2a(a1), c2a(a2), c2a(a3), c2a(a4), c2a(a5), c2a(a6),
c2a(a7), c2a(a8), c2a(a9));
if (! is_indeterminate(res))
return res;
}
catch (Interval_nt_advanced::unsafe_comparison) {}
CGAL_PROFILER(std::string("failures of : ") + std::string(CGAL_PRETTY_FUNCTION));
Protect_FPU_rounding<!Protection> P(CGAL_FE_TONEAREST);
return ep(c2e(a1), c2e(a2), c2e(a3), c2e(a4), c2e(a5), c2e(a6), c2e(a7),
c2e(a8), c2e(a9));
}
template <class EP, class AP, class C2E, class C2A, bool Protection>
template <class A1, class A2, class A3, class A4, class A5, class A6,
class A7, class A8, class A9, class A10>
typename Filtered_predicate<EP,AP,C2E,C2A,Protection>::result_type
Filtered_predicate<EP,AP,C2E,C2A,Protection>::
operator()(const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4,
const A5 &a5, const A6 &a6, const A7 &a7, const A8 &a8,
const A9 &a9, const A10 &a10) const
{
try
{
CGAL_PROFILER(std::string("calls to : ") + std::string(CGAL_PRETTY_FUNCTION));
Protect_FPU_rounding<Protection> P;
Ares res = ap(c2a(a1), c2a(a2), c2a(a3), c2a(a4), c2a(a5), c2a(a6),
c2a(a7), c2a(a8), c2a(a9), c2a(a10));
if (! is_indeterminate(res))
return res;
}
catch (Interval_nt_advanced::unsafe_comparison) {}
CGAL_PROFILER(std::string("failures of : ") + std::string(CGAL_PRETTY_FUNCTION));
Protect_FPU_rounding<!Protection> P(CGAL_FE_TONEAREST);
return ep(c2e(a1), c2e(a2), c2e(a3), c2e(a4), c2e(a5), c2e(a6), c2e(a7),
c2e(a8), c2e(a9), c2e(a10));
}
#endif
CGAL_END_NAMESPACE
#endif // CGAL_FILTER_PREDICATE_H
#endif // CGAL_FILTERED_PREDICATE_H