synaps/topology/segment.h

00001 /*********************************************************************
00002 *      This file is part of the source code of SYNAPS library          *
00003 *   Author(s): L. Deschamps                                          *
00004 *              G. Gatellier                                          *
00005 *              B. Mourrain, GALAAD, INRIA                            *
00006 **********************************************************************/
00007 #ifndef synaps_topology_segment_H
00008 #define synaps_topology_segment_H
00009 /*********************************************************************/
00010 #include <synaps/init.h>
00011 #include <iostream>
00012 #include "synaps/base/shared_object.h"
00013 #include "synaps/topology/point.h"
00014 /*********************************************************************/
00015 __BEGIN_NAMESPACE_SYNAPS
00016 //--------------------------------------------------------------------
00017 namespace topology
00018 {
00020 
00023 template <class Point>
00024 struct segment 
00025 {
00027   typedef typename  Point::coeff_t coeff_t;
00028 
00030   Point a,b;
00031   
00033   segment():a(),b() {}
00034   
00036   segment( const segment& Segment )
00037     {
00038       a = Segment.a;
00039       b = Segment.b;
00040     }
00041   
00043   segment( const Point& p1, const Point& p2 )
00044     {
00045       a = p1;
00046       b = p2;
00047     }
00048   
00049 };
00050 
00052 template <class Point>
00053 std::ostream & 
00054 operator<<( std::ostream& os, const topology::segment<Point>& s )
00055 {
00056   os << "Segment[" << s.a << ";" << s.b << "]\n";
00057   return os;
00058 }
00059 
00064 template<class Point>
00065 std::istream &
00066 operator>>(std::istream & is, topology::segment<Point>& s)
00067 {
00068   is >> s.a >> s.b;
00069   return is;
00070 }
00071 
00075 template <class Point>
00076 std::ostream& 
00077 print( std::ostream& os, const topology::segment<Point>& t ) 
00078 {
00079   assert(t.a.size() == t.b.size());
00080   if (t.a.size() == 2)
00081     {
00082       os << " "   << t.a[0] <<" " <<t.a[1]  << " 0 "
00083          << " " << t.b[0] <<" " << t.b[1]  << " 0 \n";
00084     }
00085   else
00086     {
00087       os << " "   << t.a[0] <<" " << t.a[1] <<" " << t.a[2]
00088          << " " << t.b[0] <<" " << t.b[1] <<" " << t.b[2] << "\n";
00089     }
00090   return os; 
00091 }
00092 
00093 #if 0
00094 
00098 std::ostream&  print( std::ostream& os, const segment<topology::point<QQ> >& t ) 
00099 {
00100   assert(t.a.size() == t.b.size());
00101   if (t.a.size() == 2)
00102     {
00103       os << " "   << t.a[0].get_d() <<" " <<t.a[1].get_d()  << " 0 "
00104          << " " << t.b[0].get_d() <<" " << t.b[1].get_d()  << " 0 \n";
00105     }
00106   else
00107     {
00108       os << " "   << t.a[0].get_d() <<" " << t.a[1].get_d() <<" " << t.a[2].get_d()
00109          << " " << t.b[0].get_d() <<" " << t.b[1].get_d() <<" " << t.b[2].get_d() << "\n";
00110     }
00111   return os; 
00112 }
00113 
00118 std::ostream& 
00119 print( std::ostream& os, const segment<topology::point<RR> >& t ) 
00120 {
00121   assert(t.a.size() == t.b.size());
00122   if (t.a.size() == 2)
00123     {
00124       os << " "   << t.a[0].get_d() <<" " <<t.a[1].get_d()  << " 0 "
00125          << " " << t.b[0].get_d() <<" " << t.b[1].get_d()  << " 0 \n";
00126     }
00127   else
00128     {
00129       os << " "   << t.a[0].get_d() <<" " << t.a[1].get_d() <<" " << t.a[2].get_d()
00130          << " " << t.b[0].get_d() <<" " << t.b[1].get_d() <<" " << t.b[2].get_d() << "\n";
00131     }
00132   return os; 
00133 }
00134 
00135 #endif // synaps_HAVE_LIBGMP
00136 
00137 //--------------------------------------------------------------------
00138 } //topology
00139 //--------------------------------------------------------------------
00140 __END_NAMESPACE_SYNAPS
00141 /*********************************************************************/
00142 #endif // synaps_topology_segment_H

SYNAPS DOCUMENTATION
logo