00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
#ifndef __datatypes_AMOS_HH
00015 #define __datatypes_AMOS_HH 1
00016 
00017 
#include "Message_AMOS.hh"
00018 
#include <vector>
00019 
#include <string>
00020 
00021 
00022 
00023 
00024 
00025 
00026 
namespace AMOS {
00027 
00028 
00036 
00037 struct Distribution_t : 
public IMessagable_t
00038 {
00039 
00040   Pos_t mean;           
00041   SD_t sd;              
00042 
00043 
00044   
static const NCode_t NCODE;
00046 
00047 
00048   
00053   Distribution_t ( )
00054   {
00055     
clear( );
00056   }
00057 
00058 
00059   
00062   ~Distribution_t ( )
00063   {
00064 
00065   }
00066 
00067 
00068   
00071   void clear ( )
00072   {
00073     
mean = 0; 
sd = 0;
00074   }
00075 
00076 
00077   
00078   virtual NCode_t getNCode ( )
 const
00079 
  {
00080     
return Distribution_t::NCODE;
00081   }
00082 
00083 
00084   
00085   
virtual void readMessage (
const Message_t & msg);
00086 
00087 
00088   
00091   
void readRecord (std::istream & in);
00092 
00093 
00094   
00095   
virtual void writeMessage (
Message_t & msg) 
const;
00096 
00097 
00098   
00101   
void writeRecord (std::ostream & out) 
const;
00102 
00103 };
00104 
00105 
00106 
00107 
00108 
00119 
00120 struct Range_t
00121 {
00122 
00123   Pos_t begin;              
00124   Pos_t end;                
00125 
00126 
00127   
00132   Range_t ( )
00133   {
00134     
clear( );
00135   }
00136 
00137 
00138   
00143   Range_t (
const Range_t & source)
00144   {
00145     *
this = source;
00146   }
00147 
00148 
00149   
00157   Range_t (
Pos_t b, 
Pos_t e)
00158   {
00159     
begin = b;
00160     
end = e;
00161   }
00162 
00163 
00164   
00167   ~Range_t ( )
00168   {
00169 
00170   }
00171 
00172 
00173   
00176   void clear ( )
00177   {
00178     
begin = 
end = 0;
00179   }
00180 
00181 
00182   
00185   Pos_t getBegin ( )
 const
00186 
  {
00187     
return begin;
00188   }
00189 
00190 
00191   
00194   Pos_t getLo ( )
 const
00195 
  {
00196     
return (
begin < 
end ? 
begin : 
end);
00197   }
00198 
00199 
00200   
00203   Pos_t getHi ( )
 const
00204 
  {
00205     
return (
begin > 
end ? 
begin : 
end);
00206   }
00207 
00208 
00209   
00212   Pos_t getEnd ( )
 const
00213 
  {
00214     
return end;
00215   }
00216 
00217 
00218   
00223   Size_t getLength ( )
 const
00224 
  {
00225     
return labs (
end - 
begin);
00226   }
00227 
00228 
00229   
00234   bool isReverse ( )
 const
00235 
  {
00236     
return begin > 
end;
00237   }
00238 
00239 
00240   
00243   void setBegin (
Pos_t b)
00244   {
00245     
begin = b;
00246   }
00247 
00248 
00249   
00252   void setEnd (
Pos_t e)
00253   {
00254     
end = e;
00255   }
00256 
00257 
00258   
00261   void setRange (
Pos_t b, 
Pos_t e)
00262   {
00263     
begin = b;
00264     
end = e;
00265   }
00266 
00267 
00268   
00271   void swap ( )
00272   {
00273    
Pos_t save = 
begin;
00274    begin = 
end;
00275    end = save;
00276   }
00277 
00278 };
00279 
00280 
00281 
00282 
00283 
00300 
00301 struct Tile_t : 
public IMessagable_t
00302 {
00303   ID_t source;                
00304   std::vector<Pos_t> 
gaps;    
00305   Pos_t offset;               
00306   Range_t range;              
00307 
00308 
00309   
static const NCode_t NCODE;
00311 
00312 
00313   
00318   Tile_t ( )
00319   {
00320     
source = 
NULL_ID;
00321     
offset = 0;
00322   }
00323 
00324 
00325   
00328   ~Tile_t ( )
00329   {
00330 
00331   }
00332 
00333 
00334   
00337   
void clear ( );
00338 
00339 
00340   
00347   Size_t getGappedLength ( )
00348   {
00349     
return (
range . getLength( ) + 
gaps . size( ));
00350   }
00351 
00352 
00353   
00354   virtual NCode_t getNCode ( )
 const
00355 
  {
00356     
return Tile_t::NCODE;
00357   }
00358 
00359 
00360   
00361   
virtual void readMessage (
const Message_t & msg);
00362 
00363 
00364   
00367   
void readRecord (std::istream & in);
00368 
00369 
00370   
00371   
virtual void writeMessage (
Message_t & msg) 
const;
00372 
00373 
00374   
00377   
void writeRecord (std::ostream & out) 
const;
00378 
00379 };
00380 
00381 
00382 
00383 
00392 
Range_t operator& (
Range_t a, 
Range_t b);
00393 
00394 
00395 
00404 
Range_t operator| (
Range_t a, 
Range_t b);
00405 
00406 
00407 
00416 
bool operator== (
const Range_t & a, 
const Range_t & b);
00417 
bool operator!= (
const Range_t & a, 
const Range_t & b);
00418 
00419 
00420 
00429 
bool operator== (
const Distribution_t & a, 
const Distribution_t & b);
00430 
bool operator!= (
const Distribution_t & a, 
const Distribution_t & b);
00431 
00432 
00433 
00442 
bool operator== (
const Tile_t & a, 
const Tile_t & b);
00443 
bool operator!= (
const Tile_t & a, 
const Tile_t & b);
00444 
00445 
00446 
00449 
void WrapString (std::ostream & out, 
const std::string & s, 
int per);
00450 
00451 
00452 
00453 typedef Range_t Ordered_Range_t;
00454 
00455 } 
00456 
00457 
#endif // #ifndef __datatypes_AMOS_HH