synaps/topology/triangle_set.h

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

SYNAPS DOCUMENTATION
logo