1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216
|
// Copyright (c) 2011 CNRS and LIRIS' Establishments (France).
// All rights reserved.
//
// This file is part of CGAL (www.cgal.org)
//
// $URL: https://github.com/CGAL/cgal/blob/v6.1.1/Linear_cell_complex/include/CGAL/Cell_attribute_with_point.h $
// $Id: include/CGAL/Cell_attribute_with_point.h 08b27d3db14 $
// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial
//
// Author(s) : Guillaume Damiand <guillaume.damiand@liris.cnrs.fr>
//
#ifndef CGAL_CELL_ATTRIBUTE_WITH_POINT_H
#define CGAL_CELL_ATTRIBUTE_WITH_POINT_H 1
#include <CGAL/Cell_attribute.h>
namespace CGAL {
/** @file Cell_attribute_with_point.h
* Definition of cell attribute with point, with or without info.
*/
/// Point associated with a cell.
template < class Point >
class Point_for_cell
{
public:
/// Constructor without parameter.
Point_for_cell()
{}
/// Constructor with a point in parameter.
Point_for_cell(const Point& apoint) : mpoint(apoint)
{}
/// Get the point associated with the cell.
Point& point()
{ return mpoint; }
/// Get the point associated with the cell.
const Point& point() const
{ return mpoint; }
protected:
/// The point associated with the cell.
Point mpoint;
};
/// Attribute associated with a point and an info.
template < class LCC, class Info_=void, class Tag=Tag_true,
class Functor_on_merge_=Null_functor,
class Functor_on_split_=Null_functor,
class WithID=Tag_false >
class Cell_attribute_with_point :
public Cell_attribute<LCC, Info_, Tag,
Functor_on_merge_, Functor_on_split_, WithID>,
public Point_for_cell<typename LCC::Point>
{
template <class, class, class, class>
friend class Compact_container;
template <class, class>
friend class Concurrent_compact_container;
template <class, class, class, class>
friend class Compact_container_with_index;
template<unsigned int, class, class>
friend class Combinatorial_map_storage_1;
template<unsigned int, class, class>
friend class Combinatorial_map_storage_with_index;
template<unsigned int, class, class>
friend class Generalized_map_storage_1;
template<unsigned int, class, class>
friend class Generalized_map_storage_with_index;
template<unsigned int, unsigned int, class, class, class>
friend class CMap_linear_cell_complex_storage_1;
template<unsigned int, unsigned int, class, class, class>
friend class CMap_linear_cell_complex_storage_with_index;
template<unsigned int, unsigned int, class, class, class>
friend class GMap_linear_cell_complex_storage_1;
template<unsigned int, unsigned int, class, class, class>
friend class GMap_linear_cell_complex_storage_with_index;
public:
typedef Cell_attribute_with_point<LCC, Info_, Tag, Functor_on_merge_,
Functor_on_split_, WithID> Self;
typedef Cell_attribute<LCC, Info_, Tag,
Functor_on_merge_, Functor_on_split_, WithID> Base1;
typedef Point_for_cell<typename LCC::Point> Base2;
typedef typename LCC::Point Point;
typedef typename LCC::Dart_descriptor Dart_descriptor;
typedef typename LCC::Dart_const_descriptor Dart_const_descriptor;
typedef Info_ Info;
typedef Functor_on_merge_ Functor_on_merge;
typedef Functor_on_split_ Functor_on_split;
using Base1::info;
bool operator==(const Self& other) const
{ return Base1::operator==(other) && this->point()==other.point(); }
bool operator!=(const Self& other) const
{ return !operator==(other); }
protected:
/// Default constructor.
Cell_attribute_with_point()
{}
/// Constructor with a point in parameter.
Cell_attribute_with_point(const Point& apoint) : Base2(apoint)
{}
/// Constructor with a point and an attribute in parameters.
Cell_attribute_with_point(const Point& apoint, const Info& ainfo) :
Base1(ainfo),
Base2(apoint)
{}
};
/// Attribute associated with a point and without info.
template < class LCC, class Tag,
class Functor_on_merge_,
class Functor_on_split_,
class WithID>
class Cell_attribute_with_point<LCC, void, Tag,
Functor_on_merge_, Functor_on_split_,
WithID>:
public Cell_attribute<LCC, void,
Tag, Functor_on_merge_, Functor_on_split_, WithID>,
public Point_for_cell<typename LCC::Point>
{
template <class, class, class, class>
friend class Compact_container;
template <class, class>
friend class Concurrent_compact_container;
template <class, class, class, class>
friend class Compact_container_with_index;
template <class, class>
friend class Concurrent_compact_container;
template<unsigned int, class, class>
friend class Combinatorial_map_storage_1;
template<unsigned int, class, class>
friend class Combinatorial_map_storage_with_index;
template<unsigned int, class, class>
friend class Generalized_map_storage_1;
template<unsigned int, class, class>
friend class Generalized_map_storage_with_index;
template<unsigned int, unsigned int, class, class, class>
friend class CMap_linear_cell_complex_storage_1;
template<unsigned int, unsigned int, class, class, class>
friend class CMap_linear_cell_complex_storage_with_index;
template<unsigned int, unsigned int, class, class, class>
friend class GMap_linear_cell_complex_storage_1;
template<unsigned int, unsigned int, class, class, class>
friend class GMap_linear_cell_complex_storage_with_index;
public:
typedef Cell_attribute<LCC, void, Tag,
Functor_on_merge_, Functor_on_split_, WithID> Base1;
typedef Point_for_cell<typename LCC::Point> Base2;
typedef void Info;
typedef typename LCC::Point Point;
typedef typename LCC::Dart_descriptor Dart_descriptor;
typedef typename LCC::Dart_const_descriptor Dart_const_descriptor;
typedef Functor_on_merge_ Functor_on_merge;
typedef Functor_on_split_ Functor_on_split;
bool operator==(const Cell_attribute_with_point& other) const
{ return Base1::operator==(other) && this->point()==other.point(); }
bool operator!=(const Cell_attribute_with_point& other) const
{ return !operator==(other); }
template<typename Cellattr>
bool operator==(const Cellattr&) const
{ return false; }
protected:
/// Default constructor.
Cell_attribute_with_point()
{}
/// Constructor with a point in parameter.
Cell_attribute_with_point(const Point& apoint) : Base2(apoint)
{}
};
} // namespace CGAL
#endif // CGAL_CELL_ATTRIBUTE_WITH_POINT_H //
// EOF //
|