svd_predicates_ftc2.h
来自「CGAL is a collaborative effort of severa」· C头文件 代码 · 共 523 行
H
523 行
// Copyright (c) 2003,2004 INRIA Sophia-Antipolis (France) and// Notre Dame University (U.S.A.). All rights reserved.//// This file is part of CGAL (www.cgal.org); you may redistribute it under// the terms of the Q Public License version 1.0.// See the file LICENSE.QPL distributed with CGAL.//// Licensees holding a valid commercial license may use this file in// accordance with the commercial license agreement provided with the software.//// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.//// $Source: /CVSROOT/CGAL/Packages/Segment_Voronoi_diagram_2/include/CGAL/Arithmetic_filter/predicates/svd_predicates_ftC2.h,v $// $Revision: 1.14 $ $Date: 2004/06/04 09:19:56 $// $Name: $//// Author(s) : Menelaos Karavelas <mkaravel@cse.nd.edu>#ifndef CGAL_ARITHMETIC_FILTER_SVD_PREDICATES_FTC2_H#define CGAL_ARITHMETIC_FILTER_SVD_PREDICATES_FTC2_H#include <CGAL/Interval_arithmetic.h>#include <CGAL/Filtered_exact.h>#include <CGAL/predicates/Segment_Voronoi_diagram_predicates_ftC2.h>CGAL_BEGIN_NAMESPACE//----------------------------------------------------------------------------//----------------------------------------------------------------------------//----------------------------------------------------------------------------static unsigned int num_failures_are_same_points = 0;static unsigned int num_failures_side_of_bisector = 0;static unsigned int num_failures_vertex_conflict = 0;static unsigned int num_failures_finite_edge_conflict = 0;static unsigned int num_failures_infinite_edge_conflict = 0;static unsigned int num_failures_is_degenerate_edge = 0;static unsigned int num_failures_arrangement_type = 0;static unsigned int num_failures_are_parallel = 0;static unsigned int num_failures_oriented_side = 0;//----------------------------------------------------------------------------//----------------------------------------------------------------------------//----------------------------------------------------------------------------//----------------------------------------------------------------------------template < class CT, class ET, bool Protected, class Cache, class ITag>class Svd_are_same_points_ftC2< Filtered_exact<CT,ET,Dynamic,Protected,Cache>, ITag>{private: typedef Interval_nt_advanced IT; typedef Filtered_exact<CT,ET,Dynamic,Protected,Cache> FT; typedef Svd_are_same_points_ftC2<IT,ITag> IT_Predicate; typedef Svd_are_same_points_ftC2<ET,ITag> ET_Predicate;public: inline bool operator()(const FT v[], const char site_types[]) const { try { Protect_FPU_rounding<Protected> Protection; IT v_IT[24]; for (unsigned int i = 0; i < 24; i++) { v_IT[i] = v[i].interval(); } return IT_Predicate()(v_IT, site_types); } catch (Interval_nt_advanced::unsafe_comparison) { Protect_FPU_rounding<!Protected> Protection(CGAL_FE_TONEAREST); num_failures_are_same_points++; ET v_ET[24]; for (unsigned int i = 0; i < 24; i++) { v_ET[i] = v[i].exact(); } return ET_Predicate()(v_ET, site_types); } }};//----------------------------------------------------------------------------template < class CT, class ET, bool Protected, class Cache, class ITag>class Svd_orientation_ftC2< Filtered_exact<CT,ET,Dynamic,Protected,Cache>, ITag>{private: typedef Interval_nt_advanced IT; typedef Filtered_exact<CT,ET,Dynamic,Protected,Cache> FT; typedef Svd_orientation_ftC2<IT,ITag> IT_Predicate; typedef Svd_orientation_ftC2<ET,ITag> ET_Predicate;public: inline Orientation operator()(const FT v[], const char site_types[]) const { try { Protect_FPU_rounding<Protected> Protection; IT v_IT[36]; for (unsigned int i = 0; i < 36; i++) { v_IT[i] = v[i].interval(); } return IT_Predicate()(v_IT, site_types); } catch (Interval_nt_advanced::unsafe_comparison) { Protect_FPU_rounding<!Protected> Protection(CGAL_FE_TONEAREST); num_failures_are_same_points++; ET v_ET[36]; for (unsigned int i = 0; i < 36; i++) { v_ET[i] = v[i].exact(); } return ET_Predicate()(v_ET, site_types); } }};//----------------------------------------------------------------------------template < class CT, class ET, bool Protected, class Cache, class MTag, class ITag>class Svd_oriented_side_of_bisector_ftC2< Filtered_exact<CT,ET,Dynamic,Protected,Cache>, MTag,ITag>{private: typedef Interval_nt_advanced IT; typedef Filtered_exact<CT,ET,Dynamic,Protected,Cache> FT; typedef Svd_oriented_side_of_bisector_ftC2<IT,Sqrt_field_tag,ITag> IT_Predicate; typedef Svd_oriented_side_of_bisector_ftC2<ET,MTag,ITag> ET_Predicate;public: inline Oriented_side operator()(const FT v[], const char site_types[]) const { try { Protect_FPU_rounding<Protected> Protection; IT v_IT[36]; for (unsigned int i = 0; i < 36; i++) { v_IT[i] = v[i].interval(); } return IT_Predicate()(v_IT, site_types); } catch (Interval_nt_advanced::unsafe_comparison) { Protect_FPU_rounding<!Protected> Protection(CGAL_FE_TONEAREST); num_failures_side_of_bisector++; ET v_ET[36]; for (unsigned int i = 0; i < 36; i++) { v_ET[i] = v[i].exact(); } return ET_Predicate()(v_ET, site_types); } }};//----------------------------------------------------------------------------template < class CT, class ET, bool Protected, class Cache, class MTag, class ITag, int Num_sites>class Svd_vertex_conflict_ftC2< Filtered_exact<CT,ET,Dynamic,Protected,Cache>, MTag,ITag,Num_sites>{private: typedef Interval_nt_advanced IT; typedef Filtered_exact<CT,ET,Dynamic,Protected,Cache> FT; typedef Svd_vertex_conflict_ftC2<IT,Sqrt_field_tag,ITag,Num_sites> IT_Predicate; typedef Svd_vertex_conflict_ftC2<ET,MTag,ITag,Num_sites> ET_Predicate;public: inline Sign operator()(const FT v[], const char site_types[]) const { try { Protect_FPU_rounding<Protected> Protection; IT v_IT[12 * Num_sites]; for (unsigned int i = 0; i < 12 * Num_sites; i++) { v_IT[i] = v[i].interval(); } return IT_Predicate()(v_IT, site_types); } catch (Interval_nt_advanced::unsafe_comparison) { Protect_FPU_rounding<!Protected> Protection(CGAL_FE_TONEAREST); num_failures_vertex_conflict++; ET v_ET[12 * Num_sites]; for (unsigned int i = 0; i < 12 * Num_sites; i++) { v_ET[i] = v[i].exact(); } return ET_Predicate()(v_ET, site_types); } }};//----------------------------------------------------------------------------template < class CT, class ET, bool Protected, class Cache, class MTag, class ITag, int Num_sites>class Svd_finite_edge_conflict_ftC2< Filtered_exact<CT,ET,Dynamic,Protected,Cache>, MTag,ITag,Num_sites>{private: typedef Interval_nt_advanced IT; typedef Filtered_exact<CT,ET,Dynamic,Protected,Cache> FT; typedef Svd_finite_edge_conflict_ftC2<IT,Sqrt_field_tag,ITag,Num_sites> IT_Predicate; typedef Svd_finite_edge_conflict_ftC2<ET,MTag,ITag,Num_sites> ET_Predicate;public: inline bool operator()(const FT v[], Sign sgn, char site_types[]) const { try { Protect_FPU_rounding<Protected> Protection; IT v_IT[12 * Num_sites]; for (unsigned int i = 0; i < 12 * Num_sites; i++) { v_IT[i] = v[i].interval(); } return IT_Predicate()(v_IT, sgn, site_types); } catch (Interval_nt_advanced::unsafe_comparison) { Protect_FPU_rounding<!Protected> Protection(CGAL_FE_TONEAREST); num_failures_finite_edge_conflict++; ET v_ET[12 * Num_sites]; for (unsigned int i = 0; i < 12 * Num_sites; i++) { v_ET[i] = v[i].exact(); } return ET_Predicate()(v_ET, sgn, site_types); } }};//----------------------------------------------------------------------------template <class CT, class ET, bool Protected, class Cache, class MTag, class ITag>class Svd_infinite_edge_conflict_ftC2< Filtered_exact<CT,ET,Dynamic,Protected,Cache>, MTag,ITag>{private: typedef Interval_nt_advanced IT; typedef Filtered_exact<CT,ET,Dynamic,Protected,Cache> FT; typedef Svd_infinite_edge_conflict_ftC2<IT,Sqrt_field_tag,ITag> IT_Predicate; typedef Svd_infinite_edge_conflict_ftC2<ET,MTag,ITag> ET_Predicate;public: inline bool operator()(const FT v[], Sign sgn, const char site_types[]) const { try { Protect_FPU_rounding<Protected> Protection; IT v_IT[48]; for (unsigned int i = 0; i < 48; i++) { v_IT[i] = v[i].interval(); } return IT_Predicate()(v_IT, sgn, site_types); } catch (Interval_nt_advanced::unsafe_comparison) { Protect_FPU_rounding<!Protected> Protection(CGAL_FE_TONEAREST); num_failures_infinite_edge_conflict++; ET v_ET[48]; for (unsigned int i = 0; i < 48; i++) { v_ET[i] = v[i].exact(); } return ET_Predicate()(v_ET, sgn, site_types); } }};//----------------------------------------------------------------------------template <class CT, class ET, bool Protected, class Cache, class MTag, class ITag>class Svd_is_degenerate_edge_ftC2< Filtered_exact<CT,ET,Dynamic,Protected,Cache>, MTag,ITag>{private: typedef Interval_nt_advanced IT; typedef Filtered_exact<CT,ET,Dynamic,Protected,Cache> FT; typedef Svd_is_degenerate_edge_ftC2<IT,Sqrt_field_tag,ITag> IT_Predicate; typedef Svd_is_degenerate_edge_ftC2<ET,MTag,ITag> ET_Predicate;public: inline bool operator()(const FT v[], const char site_types[]) const { try { Protect_FPU_rounding<Protected> Protection; IT v_IT[48]; for (unsigned int i = 0; i < 48; i++) { v_IT[i] = v[i].interval(); } return IT_Predicate()(v_IT, site_types); } catch (Interval_nt_advanced::unsafe_comparison) { Protect_FPU_rounding<!Protected> Protection(CGAL_FE_TONEAREST); num_failures_is_degenerate_edge++; ET v_ET[48]; for (unsigned int i = 0; i < 48; i++) { v_ET[i] = v[i].exact(); } return ET_Predicate()(v_ET, site_types); } }};//----------------------------------------------------------------------------template <class CT, class ET, bool Protected, class Cache, class MTag, class ITag>class Svd_arrangement_type_ftC2< Filtered_exact<CT,ET,Dynamic,Protected,Cache>, MTag,ITag>{private: typedef Interval_nt_advanced IT; typedef Filtered_exact<CT,ET,Dynamic,Protected,Cache> FT; typedef Svd_arrangement_type_ftC2<IT,Sqrt_field_tag,ITag> IT_Predicate; typedef Svd_arrangement_type_ftC2<ET,MTag,ITag> ET_Predicate;public: typedef typename IT_Predicate::result_type result_type; inline result_type operator()(const FT v[], const char site_types[]) const { try { Protect_FPU_rounding<Protected> Protection; IT v_IT[24]; for (unsigned int i = 0; i < 24; i++) { v_IT[i] = v[i].interval(); } return IT_Predicate()(v_IT, site_types); } catch (Interval_nt_advanced::unsafe_comparison) { Protect_FPU_rounding<!Protected> Protection(CGAL_FE_TONEAREST); num_failures_arrangement_type++; ET v_ET[24]; for (unsigned int i = 0; i < 24; i++) { v_ET[i] = v[i].exact(); } return ET_Predicate()(v_ET, site_types); } }};//----------------------------------------------------------------------------template <class CT, class ET, bool Protected, class Cache, class ITag>class Svd_are_parallel_ftC2< Filtered_exact<CT,ET,Dynamic,Protected,Cache>, ITag>{private: typedef Interval_nt_advanced IT; typedef Filtered_exact<CT,ET,Dynamic,Protected,Cache> FT; typedef Svd_are_parallel_ftC2<IT,ITag> IT_Predicate; typedef Svd_are_parallel_ftC2<ET,ITag> ET_Predicate;public: inline bool operator()(const FT v[], const char site_types[]) const { try { Protect_FPU_rounding<Protected> Protection; IT v_IT[24]; for (unsigned int i = 0; i < 24; i++) { v_IT[i] = v[i].interval(); } return IT_Predicate()(v_IT, site_types); } catch (Interval_nt_advanced::unsafe_comparison) { Protect_FPU_rounding<!Protected> Protection(CGAL_FE_TONEAREST); num_failures_are_parallel++; ET v_ET[24]; for (unsigned int i = 0; i < 24; i++) { v_ET[i] = v[i].exact(); } return ET_Predicate()(v_ET, site_types); } }};//----------------------------------------------------------------------------template <class CT, class ET, bool Protected, class Cache, class MTag, class ITag, int Num_sites>class Svd_oriented_side_ftC2< Filtered_exact<CT,ET,Dynamic,Protected,Cache>, MTag,ITag,Num_sites>{private: typedef Interval_nt_advanced IT; typedef Filtered_exact<CT,ET,Dynamic,Protected,Cache> FT; typedef Svd_oriented_side_ftC2<IT,Sqrt_field_tag,ITag,Num_sites> IT_Predicate; typedef Svd_oriented_side_ftC2<ET,MTag,ITag,Num_sites> ET_Predicate;public: inline Oriented_side operator()(const FT v[], const char site_types[]) const { try { Protect_FPU_rounding<Protected> Protection; IT v_IT[12 * Num_sites]; for (unsigned int i = 0; i < 12 * Num_sites; i++) { v_IT[i] = v[i].interval(); } return IT_Predicate()(v_IT, site_types); } catch (Interval_nt_advanced::unsafe_comparison) { Protect_FPU_rounding<!Protected> Protection(CGAL_FE_TONEAREST); num_failures_oriented_side++; ET v_ET[12 * Num_sites]; for (unsigned int i = 0; i < 12 * Num_sites; i++) { v_ET[i] = v[i].exact(); } return ET_Predicate()(v_ET, site_types); } }};//----------------------------------------------------------------------------CGAL_END_NAMESPACE#endif // CGAL_ARITHMETIC_FILTER_SVD_PREDICATES_FTC2_H
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?