00001
00002
00008 #if !defined(__geom_mesh_simplicial_Node_VertSelfId_h__)
00009 #define __geom_mesh_simplicial_Node_VertSelfId_h__
00010
00011 #if defined(DEBUG_geom) && !defined(DEBUG_Node_VertSelfId)
00012 #define DEBUG_Node_VertSelfId
00013 #endif
00014
00015 #include "../../defs.h"
00016
00017 #include "../../../ads/array/FixedArray.h"
00018
00019 BEGIN_NAMESPACE_GEOM
00020
00022
00028 template <class Mesh>
00029 class Node_VertSelfId
00030 {
00031
00032
00033
00034
00035 public:
00036
00038 enum { N = Mesh::N };
00039
00040
00041
00042
00043
00044 public:
00045
00047 typedef Mesh mesh_type;
00048
00050 typedef typename mesh_type::node_iterator node_iterator;
00052 typedef typename mesh_type::node_const_iterator node_const_iterator;
00053
00055 typedef typename mesh_type::number_type number_type;
00057 typedef ads::FixedArray<N,number_type> vertex_type;
00058
00059
00060
00061
00062
00063 private:
00064
00066 vertex_type _vertex;
00068 node_iterator _self;
00070 mutable int _identifier;
00071
00072 public:
00073
00074
00077
00079 Node_VertSelfId() :
00080 _vertex(),
00081 _self( 0 ),
00082 _identifier( -1 )
00083 {}
00084
00086 Node_VertSelfId( const vertex_type& vertex, const int identifier = -1 ) :
00087 _vertex( vertex ),
00088 _self( 0 ),
00089 _identifier( identifier )
00090 {}
00091
00093 void
00094 build( const vertex_type& vertex, const int identifier = -1,
00095 const node_iterator self = 0 )
00096 {
00097 _vertex = vertex;
00098 _self = self;
00099 _identifier = identifier;
00100 }
00101
00103 Node_VertSelfId( const Node_VertSelfId& x ) :
00104 _vertex( x._vertex ),
00105 _self( x._self ),
00106 _identifier( x._identifier )
00107 {}
00108
00110 ~Node_VertSelfId()
00111 {}
00112
00114
00117
00119 Node_VertSelfId&
00120 operator=( const Node_VertSelfId& x )
00121 {
00122 if ( &x != this ) {
00123 _vertex = x._vertex;
00124 _self = x._self;
00125 _identifier = x._identifier;
00126 }
00127 return *this;
00128 }
00129
00131
00134
00136 const vertex_type&
00137 vertex() const
00138 {
00139 return _vertex;
00140 }
00141
00143 node_const_iterator
00144 self() const
00145 {
00146 return _self;
00147 }
00148
00150
00154 int
00155 identifier() const
00156 {
00157 return _identifier;
00158 }
00159
00161
00164
00166 void
00167 set_vertex( const vertex_type& vertex )
00168 {
00169 _vertex = vertex;
00170 }
00171
00173 node_iterator
00174 self()
00175 {
00176 return _self;
00177 }
00178
00180 void
00181 set_self( const node_iterator self )
00182 {
00183 _self = self;
00184 }
00185
00187
00191 void
00192 set_identifier( const int identifier ) const
00193 {
00194 _identifier = identifier;
00195 }
00196
00198 template <typename CellIterator>
00199 void
00200 add_cell( const CellIterator c )
00201 {}
00202
00204
00207
00209 bool
00210 operator==( const Node_VertSelfId& x ) const
00211 {
00212 return _self == x._self && _vertex == x._vertex &&
00213 _identifier == x._identifier;
00214 }
00215
00217 bool
00218 operator!=( const Node_VertSelfId& x ) const
00219 {
00220 return ! operator==( x );
00221 }
00222
00224
00227
00229 void
00230 put( std::ostream& out ) const
00231 {
00232 out << "Vertex = " << _vertex << " Id = " << identifier();
00233 }
00234
00236 };
00237
00238 END_NAMESPACE_GEOM
00239
00240 #endif