00001 #ifndef mmn_triplet_h_
00002 #define mmn_triplet_h_
00003
00004
00005
00006
00007
00008
00009 #include <vsl/vsl_binary_io.h>
00010 #include <vcl_iostream.h>
00011 #include <vcl_vector.h>
00012
00013
00014
00015 class mmn_triplet
00016 {
00017 public:
00018 unsigned v1,v2,v3;
00019
00020 mmn_triplet() :v1(999999),v2(999999),v3(999999) {};
00021 mmn_triplet(unsigned i1, unsigned i2, unsigned i3)
00022 : v1(i1),v2(i2),v3(i3) {};
00023
00024
00025 unsigned min_v() const
00026 {
00027 if (v1<v2) return (v1<v3?v1:v3);
00028 else return (v2<v3?v2:v3);
00029 }
00030
00031
00032 unsigned mid_v() const
00033 {
00034 if (v1<v2)
00035 {
00036 if (v2<v3) return v2;
00037 return (v3<v1?v1:v3);
00038 }
00039 if (v1<v3) return v1;
00040 return (v3<v2?v2:v3);
00041 }
00042
00043
00044 unsigned max_v() const
00045 {
00046 if (v1>v2) return (v1>v3?v1:v3);
00047 else return (v2>v3?v2:v3);
00048 }
00049
00050 };
00051
00052 inline bool operator==(const mmn_triplet& t1, const mmn_triplet& t2)
00053 {
00054 if (t1.v1==t2.v1)
00055 {
00056 if (t1.v2==t2.v2) return (t1.v3==t2.v3);
00057 if (t1.v2==t2.v3) return (t1.v3==t2.v2);
00058 return false;
00059 }
00060 if (t1.v1==t2.v2)
00061 {
00062 if (t1.v2==t2.v1) return (t1.v3==t2.v3);
00063 if (t1.v2==t2.v3) return (t1.v3==t2.v1);
00064 return false;
00065 }
00066 if (t1.v1==t2.v3)
00067 {
00068 if (t1.v2==t2.v1) return (t1.v3==t2.v2);
00069 if (t1.v2==t2.v2) return (t1.v3==t2.v1);
00070 return false;
00071 }
00072 return false;
00073 }
00074
00075 inline bool operator!=(const mmn_triplet& t1, const mmn_triplet& t2)
00076 { return !(t1==t2); }
00077
00078 inline vcl_ostream& operator<<(vcl_ostream& os, const mmn_triplet& t)
00079 {
00080 return os<<"{"<<t.v1<<","<<t.v2<<","<<t.v3<<"}";
00081 }
00082
00083 inline void vsl_b_write(vsl_b_ostream& bfs, const mmn_triplet& t)
00084 {
00085 vsl_b_write(bfs,t.v1);
00086 vsl_b_write(bfs,t.v2);
00087 vsl_b_write(bfs,t.v3);
00088 }
00089
00090 inline void vsl_b_read(vsl_b_istream& bfs, mmn_triplet& t)
00091 {
00092 vsl_b_read(bfs,t.v1);
00093 vsl_b_read(bfs,t.v2);
00094 vsl_b_read(bfs,t.v3);
00095 }
00096
00097 inline void vsl_b_write(vsl_b_ostream& bfs, const vcl_vector<mmn_triplet>& a)
00098 {
00099 short version_no = 1;
00100 vsl_b_write(bfs,version_no);
00101 vsl_b_write(bfs,a.size());
00102 for (unsigned i=0;i<a.size();++i) vsl_b_write(bfs,a[i]);
00103 }
00104
00105 inline void vsl_b_read(vsl_b_istream& bfs, vcl_vector<mmn_triplet>& a)
00106 {
00107 if (!bfs) return;
00108 short version;
00109 vsl_b_read(bfs,version);
00110 unsigned n;
00111 switch (version)
00112 {
00113 case (1):
00114 vsl_b_read(bfs,n);
00115 a.resize(n);
00116 for (unsigned i=0;i<n;++i) vsl_b_read(bfs,a[i]);
00117 break;
00118 default:
00119 vcl_cerr << "I/O ERROR: vsl_b_read(bfs,vector<mmn_triplet>) \n";
00120 vcl_cerr << " Unknown version number "<< version << vcl_endl;
00121 bfs.is().clear(vcl_ios::badbit);
00122 return;
00123 }
00124
00125 }
00126
00127
00128
00129 #endif // mmn_triplet_h_
00130