00001 /********************************************************************* 00002 * This file is part of the source code of SYNAPS library * 00003 * Author(s): * 00004 * G. Gatellier * 00005 * B. Mourrain * 00006 * JP. Tecourt, GALAAD, INRIA * 00007 **********************************************************************/ 00008 #ifndef synaps_topology_triangle_set_H 00009 #define synaps_topology_triangle_set_H 00010 /*********************************************************************/ 00011 #include <iostream> 00012 #include <vector> 00013 #include <synaps/init.h> 00014 #include "synaps/topology/point.h" 00015 #include <synaps/topology/triangle.h> 00016 /*********************************************************************/ 00017 __BEGIN_NAMESPACE_SYNAPS 00018 //-------------------------------------------------------------------- 00019 namespace topology 00020 { 00021 00022 template <class Point> 00023 struct triangle_set 00024 { 00025 typedef Point point_t; 00026 typedef topology::triangle<point_t> triangle_t; 00027 typedef typename Point::coeff_t coeff_t; 00028 typedef std::vector<triangle_t> rep_t; 00029 typedef typename rep_t::iterator iterator; 00030 typedef typename rep_t::const_iterator const_iterator; 00031 00032 00033 rep_t rep_; 00034 00035 triangle_set():rep_() {} 00036 00038 triangle_set( const triangle_set & T ): rep_(T.rep_) {} 00039 00041 triangle_set( const triangle_t & t1): rep_() 00042 { 00043 rep_.push_back(t1); 00044 } 00045 00047 triangle_set<point_t> & insert( const triangle_t & t1) 00048 { 00049 rep_.push_back(t1); return *this; 00050 } 00051 00052 iterator begin() {return rep_.begin();} 00053 const_iterator begin() const {return rep_.begin();} 00054 iterator end() {return rep_.end();} 00055 const_iterator end() const {return rep_.end();} 00056 00057 int size() {return (int)rep_.size();} 00058 00059 void resize( int n ) {return rep_.resize(n);} 00060 00061 triangle_t & operator[] (unsigned i) {return rep_[i];} 00062 triangle_t operator[] (unsigned i) const {return rep_[i];} 00063 00064 }; 00065 00066 00068 template <class Point> 00069 std::ostream & 00070 operator<<( std::ostream & os, const topology::triangle_set<Point> & t ) 00071 { 00072 os << "TriangleSet("; topology::print(os,t);os << ")"; 00073 return os; 00074 } 00075 00076 template <class Point> 00077 std::ostream & 00078 print( std::ostream& os, const topology::triangle_set<Point> & t ) 00079 { 00080 typedef typename topology::triangle_set<Point>::const_iterator const_iterator; 00081 const_iterator it=t.begin(); 00082 os <<(*it); ++it; 00083 for( ; it !=s.end(); it++) os<<";"<<*it; 00084 return os; 00085 } 00086 00087 } // namespace topology 00088 //-------------------------------------------------------------------- 00089 __END_NAMESPACE_SYNAPS 00090 /*********************************************************************/ 00091 #endif // synaps_topology_triangle_set_H
![]() |