mirror of https://github.com/CGAL/cgal
Fixed boundary tags
This commit is contained in:
parent
6d0d370423
commit
32aa9d5016
|
|
@ -44,11 +44,11 @@ namespace CGAL {
|
|||
|
||||
struct Arr_boundary_side_tag {};
|
||||
struct Arr_oblivious_side_tag : public virtual Arr_boundary_side_tag {};
|
||||
struct Arr_non_oblivious_side_tag : public virtual Arr_boundary_side_tag {};
|
||||
struct Arr_open_side_tag : public virtual Arr_non_oblivious_side_tag {};
|
||||
struct Arr_closed_side_tag : public virtual Arr_non_oblivious_side_tag {};
|
||||
struct Arr_contracted_side_tag : public virtual Arr_non_oblivious_side_tag {};
|
||||
struct Arr_identified_side_tag : public virtual Arr_non_oblivious_side_tag {};
|
||||
struct Arr_not_oblivious_side_tag : public virtual Arr_boundary_side_tag {};
|
||||
struct Arr_open_side_tag : public virtual Arr_not_oblivious_side_tag {};
|
||||
struct Arr_closed_side_tag : public virtual Arr_not_oblivious_side_tag {};
|
||||
struct Arr_contracted_side_tag : public virtual Arr_not_oblivious_side_tag {};
|
||||
struct Arr_identified_side_tag : public virtual Arr_not_oblivious_side_tag {};
|
||||
|
||||
BOOST_MPL_HAS_XXX_TRAIT_DEF(Left_side_category)
|
||||
BOOST_MPL_HAS_XXX_TRAIT_DEF(Bottom_side_category)
|
||||
|
|
@ -58,184 +58,165 @@ BOOST_MPL_HAS_XXX_TRAIT_DEF(Right_side_category)
|
|||
namespace internal {
|
||||
|
||||
//! type to provide left side tag (is oblivious if not existing)
|
||||
template < class Traits_, bool B >
|
||||
template <typename Traits_, bool B>
|
||||
struct Get_left_side_category {};
|
||||
|
||||
template < class Traits_ >
|
||||
struct Get_left_side_category< Traits_, true > {
|
||||
typedef typename Traits_::Left_side_category Category;
|
||||
template <typename Traits_>
|
||||
struct Get_left_side_category<Traits_, true> {
|
||||
typedef typename Traits_::Left_side_category Category;
|
||||
};
|
||||
|
||||
template < class Traits_ >
|
||||
struct Get_left_side_category< Traits_, false > {
|
||||
typedef Arr_oblivious_side_tag Category;
|
||||
template <typename Traits_>
|
||||
struct Get_left_side_category<Traits_, false> {
|
||||
typedef Arr_oblivious_side_tag Category;
|
||||
};
|
||||
|
||||
template < class Traits_ >
|
||||
template <typename Traits_>
|
||||
struct Arr_complete_left_side_category {
|
||||
public:
|
||||
typedef Traits_ Traits;
|
||||
|
||||
typedef Traits_ Traits;
|
||||
typedef typename
|
||||
Get_left_side_category< Traits, has_Left_side_category< Traits >::value >::Category Category;
|
||||
Get_left_side_category<Traits,
|
||||
has_Left_side_category<Traits>::value>::Category
|
||||
Category;
|
||||
};
|
||||
|
||||
template < class GeometryTraits_2, bool b >
|
||||
template <typename GeometryTraits_2, bool b>
|
||||
struct Validate_left_side_category {};
|
||||
|
||||
template < class GeometryTraits_2 >
|
||||
struct Validate_left_side_category< GeometryTraits_2, true > {
|
||||
template <typename GeometryTraits_2>
|
||||
struct Validate_left_side_category<GeometryTraits_2, true> {
|
||||
template <typename T>
|
||||
void missing__Left_side_category() {}
|
||||
};
|
||||
|
||||
template < class GeometryTraits_2 >
|
||||
struct Validate_left_side_category< GeometryTraits_2, false > {
|
||||
template <typename GeometryTraits_2>
|
||||
struct Validate_left_side_category<GeometryTraits_2, false> {
|
||||
template <typename T>
|
||||
void missing__Left_side_category()
|
||||
{
|
||||
T
|
||||
missing__Left_side_category__assuming__Arr_oblivious_side_tag__instead;
|
||||
}
|
||||
{ T missing__Left_side_category__assuming__Arr_oblivious_side_tag__instead; }
|
||||
};
|
||||
|
||||
|
||||
//! type to provide bottom side tag (is oblivious if not existing)
|
||||
template < class Traits_, bool B >
|
||||
struct Get_bottom_side_category {
|
||||
template <typename Traits_, bool B>
|
||||
struct Get_bottom_side_category {};
|
||||
|
||||
template <typename Traits_>
|
||||
struct Get_bottom_side_category<Traits_, true> {
|
||||
typedef typename Traits_::Bottom_side_category Category;
|
||||
};
|
||||
|
||||
template < class Traits_ >
|
||||
struct Get_bottom_side_category< Traits_, true > {
|
||||
typedef typename Traits_::Bottom_side_category Category;
|
||||
template <typename Traits_>
|
||||
struct Get_bottom_side_category<Traits_, false> {
|
||||
typedef Arr_oblivious_side_tag Category;
|
||||
};
|
||||
|
||||
template < class Traits_ >
|
||||
struct Get_bottom_side_category< Traits_, false > {
|
||||
typedef Arr_oblivious_side_tag Category;
|
||||
};
|
||||
|
||||
template < class Traits_ >
|
||||
template <typename Traits_>
|
||||
struct Arr_complete_bottom_side_category {
|
||||
|
||||
public:
|
||||
|
||||
typedef Traits_ Traits;
|
||||
|
||||
typedef Traits_ Traits;
|
||||
typedef typename
|
||||
Get_bottom_side_category< Traits, has_Bottom_side_category< Traits >::value >::Category
|
||||
Category;
|
||||
Get_bottom_side_category<Traits,
|
||||
has_Bottom_side_category<Traits>::value>::Category
|
||||
Category;
|
||||
};
|
||||
|
||||
template < class GeometryTraits_2, bool b >
|
||||
template <typename GeometryTraits_2, bool b>
|
||||
struct Validate_bottom_side_category {};
|
||||
|
||||
template < class GeometryTraits_2 >
|
||||
struct Validate_bottom_side_category< GeometryTraits_2, true > {
|
||||
template <typename GeometryTraits_2>
|
||||
struct Validate_bottom_side_category<GeometryTraits_2, true> {
|
||||
template <typename T>
|
||||
void missing__Bottom_side_category() {}
|
||||
};
|
||||
|
||||
template < class GeometryTraits_2 >
|
||||
struct Validate_bottom_side_category< GeometryTraits_2, false > {
|
||||
template <typename GeometryTraits_2>
|
||||
struct Validate_bottom_side_category<GeometryTraits_2, false> {
|
||||
template <typename T>
|
||||
void missing__Bottom_side_category()
|
||||
{
|
||||
T
|
||||
missing__Bottom_side_category__assuming__Arr_oblivious_side_tag__instead;
|
||||
}
|
||||
{ T missing__Bottom_side_category__assuming__Arr_oblivious_side_tag__instead; }
|
||||
};
|
||||
|
||||
|
||||
//! type to provide top side tag (is oblivious if not existing)
|
||||
template < class Traits_, bool B >
|
||||
template <typename Traits_, bool B>
|
||||
struct Get_top_side_category {
|
||||
};
|
||||
|
||||
template < class Traits_ >
|
||||
struct Get_top_side_category< Traits_, true > {
|
||||
typedef typename Traits_::Top_side_category Category;
|
||||
template <typename Traits_>
|
||||
struct Get_top_side_category<Traits_, true> {
|
||||
typedef typename Traits_::Top_side_category Category;
|
||||
};
|
||||
|
||||
template < class Traits_ >
|
||||
struct Get_top_side_category< Traits_, false > {
|
||||
typedef Arr_oblivious_side_tag Category;
|
||||
template <typename Traits_>
|
||||
struct Get_top_side_category<Traits_, false> {
|
||||
typedef Arr_oblivious_side_tag Category;
|
||||
};
|
||||
|
||||
template < class Traits_ >
|
||||
template <typename Traits_>
|
||||
struct Arr_complete_top_side_category {
|
||||
|
||||
public:
|
||||
|
||||
typedef Traits_ Traits;
|
||||
|
||||
typedef Traits_ Traits;
|
||||
typedef typename
|
||||
Get_top_side_category< Traits, has_Top_side_category< Traits >::value >::Category Category;
|
||||
Get_top_side_category<Traits, has_Top_side_category<Traits>::value>::Category
|
||||
Category;
|
||||
};
|
||||
|
||||
template < class GeometryTraits_2, bool b >
|
||||
template <typename GeometryTraits_2, bool b>
|
||||
struct Validate_top_side_category {};
|
||||
|
||||
template < class GeometryTraits_2 >
|
||||
struct Validate_top_side_category< GeometryTraits_2, true > {
|
||||
template <typename GeometryTraits_2>
|
||||
struct Validate_top_side_category<GeometryTraits_2, true> {
|
||||
template <typename T>
|
||||
void missing__Top_side_category() {}
|
||||
};
|
||||
|
||||
template < class GeometryTraits_2 >
|
||||
struct Validate_top_side_category< GeometryTraits_2, false > {
|
||||
template <typename GeometryTraits_2>
|
||||
struct Validate_top_side_category<GeometryTraits_2, false> {
|
||||
template <typename T>
|
||||
void missing__Top_side_category()
|
||||
{
|
||||
T missing__Top_side_category__assuming__Arr_oblivious_side_tag__instead;
|
||||
}
|
||||
{ T missing__Top_side_category__assuming__Arr_oblivious_side_tag__instead; }
|
||||
};
|
||||
|
||||
|
||||
//! type to provide right side tag (is oblivious if not existing)
|
||||
template < class Traits_, bool B >
|
||||
struct Get_right_side_category {
|
||||
template <typename Traits_, bool B>
|
||||
struct Get_right_side_category {};
|
||||
|
||||
template <typename Traits_>
|
||||
struct Get_right_side_category<Traits_, true> {
|
||||
typedef typename Traits_::Right_side_category Category;
|
||||
};
|
||||
|
||||
template < class Traits_ >
|
||||
struct Get_right_side_category< Traits_, true > {
|
||||
typedef typename Traits_::Right_side_category Category;
|
||||
template <typename Traits_>
|
||||
struct Get_right_side_category<Traits_, false> {
|
||||
typedef Arr_oblivious_side_tag Category;
|
||||
};
|
||||
|
||||
template < class Traits_ >
|
||||
struct Get_right_side_category< Traits_, false > {
|
||||
typedef Arr_oblivious_side_tag Category;
|
||||
};
|
||||
|
||||
template < class Traits_ >
|
||||
template <typename Traits_>
|
||||
struct Arr_complete_right_side_category {
|
||||
|
||||
public:
|
||||
|
||||
typedef Traits_ Traits;
|
||||
typedef Traits_ Traits;
|
||||
|
||||
typedef typename
|
||||
Get_right_side_category< Traits, has_Right_side_category< Traits >::value >::Category
|
||||
Category;
|
||||
Get_right_side_category<Traits,
|
||||
has_Right_side_category<Traits>::value>::Category
|
||||
Category;
|
||||
};
|
||||
|
||||
template < class GeometryTraits_2, bool b >
|
||||
template <typename GeometryTraits_2, bool b>
|
||||
struct Validate_right_side_category {};
|
||||
|
||||
template < class GeometryTraits_2 >
|
||||
struct Validate_right_side_category< GeometryTraits_2, true > {
|
||||
template <typename GeometryTraits_2>
|
||||
struct Validate_right_side_category<GeometryTraits_2, true> {
|
||||
template <typename T>
|
||||
void missing__Right_side_category() {}
|
||||
};
|
||||
|
||||
template < class GeometryTraits_2 >
|
||||
struct Validate_right_side_category< GeometryTraits_2, false > {
|
||||
template <typename GeometryTraits_2>
|
||||
struct Validate_right_side_category<GeometryTraits_2, false> {
|
||||
template <typename T>
|
||||
void missing__Right_side_category()
|
||||
{
|
||||
T
|
||||
missing__Right_side_category__assuming__Arr_oblivious_side_tag__instead;
|
||||
}
|
||||
{ T missing__Right_side_category__assuming__Arr_oblivious_side_tag__instead; }
|
||||
};
|
||||
|
||||
} // namespace internal
|
||||
|
|
@ -255,198 +236,202 @@ struct Arr_has_open_side_tag :
|
|||
|
||||
struct Arr_all_sides_open_tag : public virtual Arr_not_all_sides_oblivious_tag{};
|
||||
|
||||
struct Arr_all_sides_non_open_tag {};
|
||||
struct Arr_not_all_sides_non_open_tag {};
|
||||
struct Arr_all_sides_not_open_tag {};
|
||||
struct Arr_not_all_sides_not_open_tag {};
|
||||
|
||||
/*!\brief Struct to determine whether all side tags are "oblivious"
|
||||
/* The following tags inherit from the Arr_not_all_sides_oblivious_tag;
|
||||
* They match any parameter space where at least one side of the boundary is not
|
||||
* oblivious.
|
||||
* The former matches any parameter space that none of its sides are either
|
||||
* identified, contracted, or closed. In other words, it matches parameter
|
||||
* spaces that cannot contain points on their boundaries.
|
||||
* The latter matches any parameter space that has at least one side that is
|
||||
* either an identified, contracted, or closed side. In other words, it matches
|
||||
* any parameter space, the boundary of which may contain a point.
|
||||
*/
|
||||
template < class ArrLeftSideCategory, class ArrBottomSideCategory,
|
||||
class ArrTopSideCategory, class ArrRightSideCategory >
|
||||
struct Arr_are_all_sides_oblivious_tag {
|
||||
struct Arr_all_sides_not_finite_tag :
|
||||
public virtual Arr_not_all_sides_oblivious_tag {};
|
||||
struct Arr_not_all_sides_not_finite_tag :
|
||||
public virtual Arr_not_all_sides_oblivious_tag {};
|
||||
|
||||
public:
|
||||
typedef boost::mpl::bool_<true> Arr_true;
|
||||
typedef boost::mpl::bool_<false> Arr_false;
|
||||
|
||||
//! This instance's first template parameter
|
||||
typedef ArrLeftSideCategory Left_side_category;
|
||||
template <typename ArrSideCategory>
|
||||
struct Arr_is_side_oblivious {
|
||||
typedef ArrSideCategory Side_cat;
|
||||
typedef boost::is_same<Side_cat, Arr_oblivious_side_tag> Is_same;
|
||||
typedef boost::mpl::if_<Is_same, Arr_true, Arr_false> result;
|
||||
};
|
||||
|
||||
//! This instance's second template parameter
|
||||
typedef ArrBottomSideCategory Bottom_side_category;
|
||||
template <typename ArrSideCategory>
|
||||
struct Arr_is_side_open {
|
||||
typedef ArrSideCategory Side_cat;
|
||||
typedef boost::is_same<Side_cat, Arr_open_side_tag> Is_same;
|
||||
typedef boost::mpl::if_<Is_same, Arr_true, Arr_false> result;
|
||||
};
|
||||
|
||||
//! This instance's third template parameter
|
||||
typedef ArrTopSideCategory Top_side_category;
|
||||
template <typename ArrSideCategory>
|
||||
struct Arr_is_side_identified {
|
||||
typedef ArrSideCategory Side_cat;
|
||||
typedef boost::is_same<Side_cat, Arr_identified_side_tag> Is_same;
|
||||
typedef boost::mpl::if_<Is_same, Arr_true, Arr_false> result;
|
||||
};
|
||||
|
||||
//! This instance's fourth template parameter
|
||||
typedef ArrRightSideCategory Right_side_category;
|
||||
template <typename ArrSideCategory>
|
||||
struct Arr_is_side_contracted {
|
||||
typedef ArrSideCategory Side_cat;
|
||||
typedef boost::is_same<Side_cat, Arr_contracted_side_tag> Is_same;
|
||||
typedef boost::mpl::if_<Is_same, Arr_true, Arr_false> result;
|
||||
};
|
||||
|
||||
private:
|
||||
template <typename ArrSideCategory>
|
||||
struct Arr_is_side_closed {
|
||||
typedef ArrSideCategory Side_cat;
|
||||
typedef boost::is_same<Side_cat, Arr_closed_side_tag> Is_same;
|
||||
typedef boost::mpl::if_<Is_same, Arr_true, Arr_false> result;
|
||||
};
|
||||
|
||||
typedef boost::mpl::bool_< true > true_;
|
||||
typedef boost::mpl::bool_< false > false_;
|
||||
/*! Struct to determine whether all side tags are "oblivious"
|
||||
*/
|
||||
template <typename ArrLeftSideCategory, typename ArrBottomSideCategory,
|
||||
typename ArrTopSideCategory, typename ArrRightSideCategory>
|
||||
struct Arr_all_sides_oblivious_category {
|
||||
typedef ArrLeftSideCategory Lef_side_cat;
|
||||
typedef ArrRightSideCategory Rig_side_cat;
|
||||
typedef ArrBottomSideCategory Bot_side_cat;
|
||||
typedef ArrTopSideCategory Top_side_cat;
|
||||
|
||||
typedef boost::mpl::if_<
|
||||
boost::is_same< Left_side_category, Arr_oblivious_side_tag >,
|
||||
true_, false_ >
|
||||
Left_oblivious;
|
||||
typedef typename Arr_is_side_oblivious<Lef_side_cat>::result Lef_obl;
|
||||
typedef typename Arr_is_side_oblivious<Rig_side_cat>::result Rig_obl;
|
||||
typedef typename Arr_is_side_oblivious<Bot_side_cat>::result Bot_obl;
|
||||
typedef typename Arr_is_side_oblivious<Top_side_cat>::result Top_obl;
|
||||
|
||||
typedef boost::mpl::if_<
|
||||
boost::is_same< Bottom_side_category, Arr_oblivious_side_tag >,
|
||||
true_, false_ >
|
||||
Bottom_oblivious;
|
||||
|
||||
typedef boost::mpl::if_<
|
||||
boost::is_same< Top_side_category, Arr_oblivious_side_tag >,
|
||||
true_, false_ >
|
||||
Top_oblivious;
|
||||
|
||||
typedef boost::mpl::if_<
|
||||
boost::is_same< Right_side_category, Arr_oblivious_side_tag >,
|
||||
true_, false_ >
|
||||
Right_oblivious;
|
||||
|
||||
public:
|
||||
|
||||
/*!\brief
|
||||
* boolean tag that is Arr_all_sides_oblivious_tag if all sides are
|
||||
/*! Boolean tag that is Arr_all_sides_oblivious_tag if all sides are
|
||||
* oblivious, otherwise Arr_not_all_sides_oblivious_tag
|
||||
*/
|
||||
typedef typename boost::mpl::if_<
|
||||
boost::mpl::and_< Left_oblivious, Bottom_oblivious,
|
||||
Top_oblivious, Right_oblivious >,
|
||||
Arr_all_sides_oblivious_tag,
|
||||
Arr_not_all_sides_oblivious_tag >::type result;
|
||||
|
||||
typedef typename boost::mpl::if_<boost::mpl::and_<Lef_obl, Rig_obl,
|
||||
Bot_obl, Top_obl>,
|
||||
Arr_all_sides_oblivious_tag,
|
||||
Arr_not_all_sides_oblivious_tag>::type
|
||||
result;
|
||||
};
|
||||
|
||||
/*!\brief Struct to determine whether all side tags are "non-open"
|
||||
/*! Struct to determine whether all side tags are "not-open"
|
||||
*/
|
||||
template < class ArrLeftSideCategory, class ArrBottomSideCategory,
|
||||
class ArrTopSideCategory, class ArrRightSideCategory >
|
||||
struct Arr_are_all_sides_non_open_tag {
|
||||
|
||||
template <typename ArrLeftSideCategory, typename ArrBottomSideCategory,
|
||||
typename ArrTopSideCategory, typename ArrRightSideCategory>
|
||||
struct Arr_all_sides_not_open_category {
|
||||
public:
|
||||
|
||||
//! This instance's first template parameter
|
||||
typedef ArrLeftSideCategory Left_side_category;
|
||||
|
||||
//! This instance's second template parameter
|
||||
typedef ArrBottomSideCategory Bottom_side_category;
|
||||
|
||||
//! This instance's third template parameter
|
||||
typedef ArrTopSideCategory Top_side_category;
|
||||
|
||||
//! This instance's fourth template parameter
|
||||
typedef ArrRightSideCategory Right_side_category;
|
||||
typedef ArrLeftSideCategory Lef_side_cat;
|
||||
typedef ArrRightSideCategory Rig_side_cat;
|
||||
typedef ArrBottomSideCategory Bot_side_cat;
|
||||
typedef ArrTopSideCategory Top_side_cat;
|
||||
|
||||
private:
|
||||
typedef typename Arr_is_side_open<Lef_side_cat>::result Lef_ope;
|
||||
typedef typename Arr_is_side_open<Rig_side_cat>::result Rig_ope;
|
||||
typedef typename Arr_is_side_open<Bot_side_cat>::result Bot_ope;
|
||||
typedef typename Arr_is_side_open<Top_side_cat>::result Top_ope;
|
||||
|
||||
typedef boost::mpl::bool_< true > true_;
|
||||
typedef boost::mpl::bool_< false > false_;
|
||||
|
||||
typedef boost::mpl::if_<
|
||||
boost::is_same< Left_side_category, Arr_open_side_tag >,
|
||||
true_, false_ >
|
||||
Left_open;
|
||||
|
||||
typedef boost::mpl::if_<
|
||||
boost::is_same< Bottom_side_category, Arr_open_side_tag >,
|
||||
true_, false_ >
|
||||
Bottom_open;
|
||||
|
||||
typedef boost::mpl::if_<
|
||||
boost::is_same< Top_side_category, Arr_open_side_tag >,
|
||||
true_, false_ >
|
||||
Top_open;
|
||||
|
||||
typedef boost::mpl::if_<
|
||||
boost::is_same< Right_side_category, Arr_open_side_tag >,
|
||||
true_, false_ >
|
||||
Right_open;
|
||||
typedef boost::mpl::not_<Lef_ope> Lef_not_ope;
|
||||
typedef boost::mpl::not_<Rig_ope> Rig_not_ope;
|
||||
typedef boost::mpl::not_<Bot_ope> Bot_not_ope;
|
||||
typedef boost::mpl::not_<Top_ope> Top_not_ope;
|
||||
|
||||
public:
|
||||
|
||||
/*!\brief
|
||||
* boolean tag that is Arr_all_sides_non_open_tag if all sides are non-open,
|
||||
* otherwise Arr_not_all_sides_non_open_tag
|
||||
/*! Boolean tag that is Arr_all_sides_not_open_tag if all sides are not-open,
|
||||
* otherwise Arr_not_all_sides_not_open_tag
|
||||
*/
|
||||
typedef typename boost::mpl::if_<
|
||||
boost::mpl::and_< boost::mpl::not_< Left_open >,
|
||||
boost::mpl::not_< Bottom_open >,
|
||||
boost::mpl::not_< Top_open >,
|
||||
boost::mpl::not_< Right_open > >,
|
||||
Arr_all_sides_non_open_tag,
|
||||
Arr_not_all_sides_non_open_tag >::type result;
|
||||
typedef typename boost::mpl::if_<boost::mpl::and_<Lef_not_ope, Rig_not_ope,
|
||||
Bot_not_ope, Top_not_ope>,
|
||||
Arr_all_sides_not_open_tag,
|
||||
Arr_not_all_sides_not_open_tag>::type
|
||||
result;
|
||||
};
|
||||
|
||||
|
||||
/*!\brief Struct to check consistent tagging of identifications
|
||||
/*! Struct to determine one of the following:
|
||||
* All sides are oblivious,
|
||||
* not all sides are oblivious, and not all sides are not open, or
|
||||
* Not all sides are oblivious, and all sides are not open
|
||||
* One distinct property of parameter spaces that are either oblivious or open
|
||||
* is that points cannot exist on the boundary of such parameter spaces.
|
||||
*/
|
||||
template < class ArrLeftSideCategory, class ArrBottomSideCategory,
|
||||
class ArrTopSideCategory, class ArrRightSideCategory >
|
||||
struct Arr_sane_identified_tagging {
|
||||
|
||||
template <typename ArrLeftSideCategory, typename ArrBottomSideCategory,
|
||||
typename ArrTopSideCategory, typename ArrRightSideCategory>
|
||||
struct Arr_sides_category {
|
||||
public:
|
||||
|
||||
//! This instance's first template parameter
|
||||
typedef ArrLeftSideCategory Left_side_category;
|
||||
|
||||
//! This instance's second template parameter
|
||||
typedef ArrBottomSideCategory Bottom_side_category;
|
||||
|
||||
//! This instance's third template parameter
|
||||
typedef ArrTopSideCategory Top_side_category;
|
||||
|
||||
//! This instance's fourth template parameter
|
||||
typedef ArrRightSideCategory Right_side_category;
|
||||
typedef ArrLeftSideCategory Lef_side_cat;
|
||||
typedef ArrBottomSideCategory Bot_side_cat;
|
||||
typedef ArrTopSideCategory Top_side_cat;
|
||||
typedef ArrRightSideCategory Rig_side_cat;
|
||||
|
||||
private:
|
||||
typedef typename Arr_is_side_oblivious<Lef_side_cat>::result Lef_obl;
|
||||
typedef typename Arr_is_side_oblivious<Rig_side_cat>::result Rig_obl;
|
||||
typedef typename Arr_is_side_oblivious<Bot_side_cat>::result Bot_obl;
|
||||
typedef typename Arr_is_side_oblivious<Top_side_cat>::result Top_obl;
|
||||
|
||||
typedef boost::mpl::bool_< true > true_;
|
||||
typedef boost::mpl::bool_< false > false_;
|
||||
typedef typename Arr_is_side_open<Lef_side_cat>::result Lef_ope;
|
||||
typedef typename Arr_is_side_open<Rig_side_cat>::result Rig_ope;
|
||||
typedef typename Arr_is_side_open<Bot_side_cat>::result Bot_ope;
|
||||
typedef typename Arr_is_side_open<Top_side_cat>::result Top_ope;
|
||||
|
||||
typedef boost::mpl::if_<
|
||||
boost::is_same< Left_side_category, Arr_identified_side_tag >,
|
||||
true_, false_ >
|
||||
Left_identified;
|
||||
typedef boost::mpl::or_<Lef_obl, Lef_ope> Lef_obl_or_ope;
|
||||
typedef boost::mpl::or_<Rig_obl, Rig_ope> Rig_obl_or_ope;
|
||||
typedef boost::mpl::or_<Bot_obl, Bot_ope> Bot_obl_or_ope;
|
||||
typedef boost::mpl::or_<Top_obl, Top_ope> Top_obl_or_ope;
|
||||
|
||||
typedef boost::mpl::if_<
|
||||
boost::is_same< Bottom_side_category, Arr_identified_side_tag >,
|
||||
true_, false_ >
|
||||
Bottom_identified;
|
||||
|
||||
typedef boost::mpl::if_<
|
||||
boost::is_same< Top_side_category, Arr_identified_side_tag >,
|
||||
true_, false_ >
|
||||
Top_identified;
|
||||
|
||||
typedef boost::mpl::if_<
|
||||
boost::is_same< Right_side_category, Arr_identified_side_tag >,
|
||||
true_, false_ >
|
||||
Right_identified;
|
||||
|
||||
typedef boost::mpl::and_< Left_identified, Right_identified > LR_identified;
|
||||
|
||||
typedef boost::mpl::and_< Bottom_identified, Top_identified > BT_identified;
|
||||
|
||||
typedef boost::mpl::and_< boost::mpl::not_< Left_identified>,
|
||||
boost::mpl::not_< Right_identified > >
|
||||
LR_non_identified;
|
||||
|
||||
typedef boost::mpl::and_< boost::mpl::not_< Bottom_identified >,
|
||||
boost::mpl::not_< Top_identified > >
|
||||
BT_non_identified;
|
||||
|
||||
typedef boost::mpl::or_< LR_identified, LR_non_identified > LR_ok;
|
||||
typedef boost::mpl::or_< BT_identified, BT_non_identified > BT_ok;
|
||||
typedef typename boost::mpl::if_<boost::mpl::and_<Lef_obl_or_ope,
|
||||
Rig_obl_or_ope,
|
||||
Bot_obl_or_ope,
|
||||
Top_obl_or_ope>,
|
||||
Arr_all_sides_not_finite_tag,
|
||||
Arr_not_all_sides_not_finite_tag>::type
|
||||
tmp;
|
||||
|
||||
public:
|
||||
typedef typename boost::mpl::if_<boost::mpl::and_<Lef_obl, Rig_obl,
|
||||
Bot_obl, Top_obl>,
|
||||
Arr_all_sides_oblivious_tag, tmp>::type
|
||||
result;
|
||||
};
|
||||
|
||||
/*!\brief
|
||||
* boolean tag that is bool_<true> if opposite sides are either
|
||||
* both identified or both non-identified,
|
||||
/*! Struct to check consistent tagging of identifications
|
||||
*/
|
||||
template <typename ArrLeftSideCategory, typename ArrBottomSideCategory,
|
||||
typename ArrTopSideCategory, typename ArrRightSideCategory>
|
||||
struct Arr_sane_identified_tagging {
|
||||
typedef ArrLeftSideCategory Lef_side_cat;
|
||||
typedef ArrRightSideCategory Rig_side_cat;
|
||||
typedef ArrBottomSideCategory Bot_side_cat;
|
||||
typedef ArrTopSideCategory Top_side_cat;
|
||||
|
||||
typedef typename Arr_is_side_identified<Lef_side_cat>::result Lef_ide;
|
||||
typedef typename Arr_is_side_identified<Rig_side_cat>::result Rig_ide;
|
||||
typedef typename Arr_is_side_identified<Bot_side_cat>::result Bot_ide;
|
||||
typedef typename Arr_is_side_identified<Top_side_cat>::result Top_ide;
|
||||
|
||||
typedef boost::mpl::and_<Lef_ide, Rig_ide> LR_ide;
|
||||
typedef boost::mpl::and_<Bot_ide, Top_ide> BT_ide;
|
||||
|
||||
typedef boost::mpl::not_<Lef_ide> Lef_not_ide;
|
||||
typedef boost::mpl::not_<Rig_ide> Rig_not_ide;
|
||||
typedef boost::mpl::not_<Bot_ide> Bot_not_ide;
|
||||
typedef boost::mpl::not_<Top_ide> Top_not_ide;
|
||||
|
||||
typedef boost::mpl::and_<Lef_not_ide, Rig_not_ide> LR_not_ide;
|
||||
|
||||
typedef boost::mpl::and_<Bot_not_ide, Top_not_ide> BT_not_ide;
|
||||
|
||||
typedef boost::mpl::or_<LR_ide, LR_not_ide> LR_ok;
|
||||
typedef boost::mpl::or_<BT_ide, BT_not_ide> BT_ok;
|
||||
|
||||
/*! Boolean tag that is bool_<true> if opposite sides are either
|
||||
* both identified or both not-identified,
|
||||
* otherwise bool_<false>
|
||||
*/
|
||||
typedef boost::mpl::and_< LR_ok, BT_ok > result;
|
||||
|
||||
typedef boost::mpl::and_<LR_ok, BT_ok> result;
|
||||
};
|
||||
|
||||
/*! Checks whether one of two boundary sides are identified
|
||||
|
|
@ -454,137 +439,69 @@ public:
|
|||
* as well. Thus:
|
||||
* (i) When Arr_has_identified_sides is used to check whether two opposite
|
||||
* sides are identified, the check for the second side is redundant.
|
||||
* (ii) When Arr_has_identified_sides is used to check whether two non-opposite
|
||||
* (ii) When Arr_has_identified_sides is used to check whether two not-opposite
|
||||
* sides are identified, the check applies to all four sides.
|
||||
*/
|
||||
template <class ArrSideOneCategory, class ArrSideTwoCategory>
|
||||
template <typename ArrSideOneCategory, typename ArrSideTwoCategory>
|
||||
struct Arr_has_identified_sides {
|
||||
public:
|
||||
//! This instance's first template parameter
|
||||
typedef ArrSideOneCategory Side_one_category;
|
||||
typedef ArrSideOneCategory Side_one_cat;
|
||||
typedef ArrSideTwoCategory Side_two_cat;
|
||||
|
||||
//! This instance's second template parameter
|
||||
typedef ArrSideTwoCategory Side_two_category;
|
||||
typedef typename Arr_is_side_identified<Side_one_cat>::result Side_one_ide;
|
||||
typedef typename Arr_is_side_identified<Side_two_cat>::result Side_two_ide;
|
||||
|
||||
private:
|
||||
typedef boost::mpl::bool_<true> true_;
|
||||
typedef boost::mpl::bool_<false> false_;
|
||||
|
||||
typedef boost::mpl::if_<
|
||||
boost::is_same<Side_one_category, Arr_identified_side_tag>,
|
||||
true_, false_>
|
||||
Side_one_identified;
|
||||
|
||||
typedef boost::mpl::if_<
|
||||
boost::is_same<Side_two_category, Arr_identified_side_tag>,
|
||||
true_, false_>
|
||||
Side_two_identified;
|
||||
|
||||
public:
|
||||
/*!\brief
|
||||
* boolean tag that is bool_<true> if one side is identified,
|
||||
/*! Boolean tag that is bool_<true> if one side is identified,
|
||||
* otherwise bool_<false>
|
||||
*/
|
||||
typedef boost::mpl::or_<Side_one_identified, Side_two_identified> result;
|
||||
typedef boost::mpl::or_<Side_one_ide, Side_two_ide> result;
|
||||
};
|
||||
|
||||
/*! Checks whether one of two boundary sides are contracted
|
||||
*/
|
||||
template <class ArrSideOneCategory, class ArrSideTwoCategory>
|
||||
template <typename ArrSideOneCategory, typename ArrSideTwoCategory>
|
||||
struct Arr_has_contracted_sides_two {
|
||||
public:
|
||||
//! This instance's first template parameter
|
||||
typedef ArrSideOneCategory Side_one_category;
|
||||
typedef ArrSideOneCategory Side_one_cat;
|
||||
typedef ArrSideTwoCategory Side_two_cat;
|
||||
|
||||
//! This instance's second template parameter
|
||||
typedef ArrSideTwoCategory Side_two_category;
|
||||
typedef typename Arr_is_side_contracted<Side_one_cat>::result Side_one_con;
|
||||
typedef typename Arr_is_side_contracted<Side_two_cat>::result Side_two_con;
|
||||
|
||||
private:
|
||||
typedef boost::mpl::bool_<true> true_;
|
||||
typedef boost::mpl::bool_<false> false_;
|
||||
|
||||
typedef boost::mpl::if_<
|
||||
boost::is_same<Side_one_category, Arr_contracted_side_tag>,
|
||||
true_, false_>
|
||||
Side_one_contracted;
|
||||
|
||||
typedef boost::mpl::if_<
|
||||
boost::is_same<Side_two_category, Arr_contracted_side_tag>,
|
||||
true_, false_>
|
||||
Side_two_contracted;
|
||||
|
||||
public:
|
||||
/*!\brief
|
||||
* boolean tag that is bool_<true> if one side is identified,
|
||||
/*!\ Boolean tag that is bool_<true> if one side is identified,
|
||||
* otherwise bool_<false>
|
||||
*/
|
||||
typedef boost::mpl::or_<Side_one_contracted, Side_two_contracted> result;
|
||||
typedef boost::mpl::or_<Side_one_con, Side_two_con> result;
|
||||
};
|
||||
|
||||
/*! Checks whether one of two boundary sides are closed
|
||||
*/
|
||||
template <class ArrSideOneCategory, class ArrSideTwoCategory>
|
||||
template <typename ArrSideOneCategory, typename ArrSideTwoCategory>
|
||||
struct Arr_has_closed_sides_two {
|
||||
public:
|
||||
//! This instance's first template parameter
|
||||
typedef ArrSideOneCategory Side_one_category;
|
||||
typedef ArrSideOneCategory Side_one_cat;
|
||||
typedef ArrSideTwoCategory Side_two_cat;
|
||||
|
||||
//! This instance's second template parameter
|
||||
typedef ArrSideTwoCategory Side_two_category;
|
||||
typedef typename Arr_is_side_closed<Side_one_cat>::result Side_one_clo;
|
||||
typedef typename Arr_is_side_closed<Side_two_cat>::result Side_two_clo;
|
||||
|
||||
private:
|
||||
typedef boost::mpl::bool_<true> true_;
|
||||
typedef boost::mpl::bool_<false> false_;
|
||||
|
||||
typedef boost::mpl::if_<
|
||||
boost::is_same<Side_one_category, Arr_closed_side_tag>,
|
||||
true_, false_>
|
||||
Side_one_closed;
|
||||
|
||||
typedef boost::mpl::if_<
|
||||
boost::is_same<Side_two_category, Arr_closed_side_tag>,
|
||||
true_, false_>
|
||||
Side_two_closed;
|
||||
|
||||
public:
|
||||
/*!\brief
|
||||
* boolean tag that is bool_<true> if one side is identified,
|
||||
/*! Boolean tag that is bool_<true> if one side is identified,
|
||||
* otherwise bool_<false>
|
||||
*/
|
||||
typedef boost::mpl::or_<Side_one_closed, Side_two_closed> result;
|
||||
typedef boost::mpl::or_<Side_one_clo, Side_two_clo> result;
|
||||
};
|
||||
|
||||
/*! Checks whether one of two boundary sides are open
|
||||
*/
|
||||
template <class ArrSideOneCategory, class ArrSideTwoCategory>
|
||||
template <typename ArrSideOneCategory, typename ArrSideTwoCategory>
|
||||
struct Arr_has_open_sides_two {
|
||||
public:
|
||||
//! This instance's first template parameter
|
||||
typedef ArrSideOneCategory Side_one_category;
|
||||
typedef ArrSideOneCategory Side_one_cat;
|
||||
typedef ArrSideTwoCategory Side_two_cat;
|
||||
|
||||
//! This instance's second template parameter
|
||||
typedef ArrSideTwoCategory Side_two_category;
|
||||
typedef typename Arr_is_side_open<Side_one_cat>::result Side_one_ope;
|
||||
typedef typename Arr_is_side_open<Side_two_cat>::result Side_two_ope;
|
||||
|
||||
private:
|
||||
typedef boost::mpl::bool_<true> true_;
|
||||
typedef boost::mpl::bool_<false> false_;
|
||||
|
||||
typedef boost::mpl::if_<
|
||||
boost::is_same<Side_one_category, Arr_open_side_tag>,
|
||||
true_, false_>
|
||||
Side_one_open;
|
||||
|
||||
typedef boost::mpl::if_<
|
||||
boost::is_same<Side_two_category, Arr_open_side_tag>,
|
||||
true_, false_>
|
||||
Side_two_open;
|
||||
|
||||
public:
|
||||
/*!\brief
|
||||
* boolean tag that is bool_<true> if one side is identified,
|
||||
/*! Boolean tag that is bool_<true> if one side is identified,
|
||||
* otherwise bool_<false>
|
||||
*/
|
||||
typedef boost::mpl::or_<Side_one_open, Side_two_open> result;
|
||||
typedef boost::mpl::or_<Side_one_ope, Side_two_ope> result;
|
||||
};
|
||||
|
||||
/*! Categorizes two boundary sides:
|
||||
|
|
@ -594,34 +511,26 @@ public:
|
|||
* Otherwise if one side is open => Arr_has_open_side_tag
|
||||
* Otherwise => Arr_all_sides_oblivious_tag
|
||||
*/
|
||||
template < class ArrSideOneCategory, class ArrSideTwoCategory>
|
||||
template <typename ArrSideOneCategory, typename ArrSideTwoCategory>
|
||||
struct Arr_two_sides_category {
|
||||
public:
|
||||
//! This instance's first template parameter
|
||||
typedef ArrSideOneCategory Side_one_category;
|
||||
typedef ArrSideOneCategory Side_one_cat;
|
||||
typedef ArrSideTwoCategory Side_two_cat;
|
||||
|
||||
//! This instance's second template parameter
|
||||
typedef ArrSideTwoCategory Side_two_category;
|
||||
|
||||
private:
|
||||
// One of the two sides is identified
|
||||
typedef typename Arr_has_identified_sides<Side_one_category,
|
||||
Side_two_category>::result
|
||||
typedef typename Arr_has_identified_sides<Side_one_cat, Side_two_cat>::result
|
||||
Is_identified;
|
||||
|
||||
// One of the two sides is contracted
|
||||
typedef typename Arr_has_contracted_sides_two<Side_one_category,
|
||||
Side_two_category>::result
|
||||
typedef typename Arr_has_contracted_sides_two<Side_one_cat,
|
||||
Side_two_cat>::result
|
||||
Is_contracted;
|
||||
|
||||
// One of the two sides is closed
|
||||
typedef typename Arr_has_closed_sides_two<Side_one_category,
|
||||
Side_two_category>::result
|
||||
typedef typename Arr_has_closed_sides_two<Side_one_cat, Side_two_cat>::result
|
||||
Is_closed;
|
||||
|
||||
// One of the two sides is open
|
||||
typedef typename Arr_has_open_sides_two<Side_one_category,
|
||||
Side_two_category>::result
|
||||
typedef typename Arr_has_open_sides_two<Side_one_cat, Side_two_cat>::result
|
||||
Is_open;
|
||||
|
||||
public:
|
||||
|
|
@ -640,10 +549,8 @@ public:
|
|||
* Otherwise if one side is open => Arr_has_open_side_tag
|
||||
* Otherwise (all sides oblivious) => Arr_all_sides_oblivious_tag
|
||||
*/
|
||||
template < class ArrSideOneCategory, class ArrSideTwoCategory>
|
||||
struct Arr_all_sides_category {
|
||||
public:
|
||||
};
|
||||
template <typename ArrSideOneCategory, typename ArrSideTwoCategory>
|
||||
struct Arr_all_sides_category {};
|
||||
|
||||
} // namespace CGAL
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue