00001
00002
00003
00004
00005
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 }
00139
00140 __END_NAMESPACE_SYNAPS
00141
00142 #endif // synaps_topology_segment_H