Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members

plData.h

00001 /*=============================================================================
00002  * Product        : OpenPL
00003  * File           : plData.h (before kplData.h)
00004  * Author         : Juan-Manuel Ahuactzin
00005  * Creation       : Fri Mar 16 12:56:22 2001
00006  *
00007  *=============================================================================
00008  *     (c) Copyright 2000, Centre National de la Recherche Scientifique,
00009  *                              all rights reserved
00010  *=============================================================================
00011  *
00012  *------------------------- Description ---------------------------------------
00013  *   
00014  *   
00015  *-----------------------------------------------------------------------------
00016  */
00017 
00018 #ifndef _plData_h_
00019 #define _plData_h_
00020 
00021 #include <plMath.h>
00022 #include <plError.h>
00023 
00024 
00025 
00026 //=============================================================================
00028 class plData 
00029 {
00030 public:
00031 
00032 //=============================================================================
00033 /* Type of information stored in a plData */
00034 enum plData_type {kplNIL,           // no type defined
00035                  kplINTEGER,       // integer type
00036                  kplFLOAT};
00037 
00038 
00040 enum plCoupleDataType {
00041   INT_INT =      0,  // 00 integer and integer
00042   INT_FLOAT =    1,  // 01 integer and float
00043   FLOAT_INT =   2,  // 10 float and integer
00044   FLOAT_FLOAT =  3}; 
00045 
00046 protected:
00048   void Output(ostream &out) const;
00049   void Input(istream& in);
00050 
00051 private:
00055   union {
00057     long int int_value;
00058     
00060     plFloat float_value;
00061     
00062   };
00063   
00065   plData_type data_type;
00066 
00067   inline plCoupleDataType couple_type(const plData& data) const
00068   {
00069     plCoupleDataType type1,type2, result;
00070 
00071     // first data is integer
00072     if (data_type == plData::kplINTEGER)
00073       type1 = plData::INT_INT;
00074     // first data is float
00075     else //if (data_type == plData::kplFLOAT)
00076       type1 = plData::FLOAT_INT;
00077  
00078     // second data is integer
00079     if (data.data_type == plData::kplINTEGER)
00080       type2 = plData::INT_INT;
00081     // second data is float
00082     else //if (data.data_type == plData::kplFLOAT)
00083       type2 = plData::INT_FLOAT;
00084     
00085     // return the data type of the couple by combining the two types
00086     // (note that it is an or operator)
00087     result = plCoupleDataType (type1 | type2);
00088     
00089     return(result);
00090   }
00091 
00092 public:
00093   
00095   inline plData();
00097   inline plData(int v);
00099   inline plData(unsigned int v);
00101   inline plData(long int v);
00103   inline plData(unsigned long int v);
00105   inline plData(float v);
00107   inline plData(double v);
00109 #ifndef RAVI_INTERFACE
00110   inline plData(long double v);
00111 #endif
00112 
00114   inline plData& operator=(const plData &data);
00116   inline plData& operator=(int v);
00118   inline plData& operator=(long int v);
00120   inline plData& operator=(unsigned int v);
00122   inline plData& operator=(unsigned long int v);
00124   inline plData& operator=(float v);
00126   inline plData& operator=(double v);
00127 
00128 #ifndef RAVI_INTERFACE
00130   inline plData& operator=(long double v);
00131 #endif
00132 
00133 
00135   inline bool operator==(const plData &data) const;
00137   inline bool operator==(int int_value) const;
00139   inline bool operator==(unsigned int int_value) const;
00141   inline bool operator==(long int int_value) const;
00143   inline bool operator==(unsigned long int int_value) const;
00145   inline bool operator==( float float_value) const;
00147   inline bool operator==( double double_value) const;
00148 #ifndef RAVI_INTERFACE
00150   inline bool operator==( long double ldouble_value) const;
00151 #endif
00152 
00154   inline bool operator!=(const plData &data) const {return !(*this == data);}
00156   inline bool operator!=(int int_valuev) const {return !(*this == int_valuev);}
00158   inline bool operator!=(unsigned int int_valuev) const {return !(*this == int_valuev);}
00160   inline bool operator!=(long int int_valuev) const {return !(*this == int_valuev);}
00162   inline bool operator!=(unsigned long int int_valuev) const {return !(*this == int_valuev);}
00164   inline bool operator!=( float float_valuev) const {return !(*this == float_valuev);}
00166   inline bool operator!=( double double_valuev) const {return !(*this == double_valuev);}
00167 #ifndef RAVI_INTERFACE
00168 
00169   inline bool operator!=( long double ldouble_value) const {return !(*this == ldouble_value);}
00170 #endif
00171 
00173   inline bool operator>(const plData &data) const;
00175   inline bool operator>(int int_value) const;
00177   inline bool operator>(unsigned int int_value) const;
00179   inline bool operator>(long int int_value) const;
00181   inline bool operator>(unsigned long int int_value) const;
00183   inline bool operator>(float float_value) const;
00185   inline bool operator>(double double_value) const;
00186 #ifndef RAVI_INTERFACE
00187 
00188   inline bool operator>(long double ldouble_value) const;
00189 #endif
00190 
00191 
00193   inline bool operator>=(const plData &data) const;
00195   inline bool operator>=(int int_value) const;
00197   inline bool operator>=(unsigned int int_value) const;
00199   inline bool operator>=(long int int_value) const;
00201   inline bool operator>=(unsigned long int int_value) const;
00202   inline bool operator>=(float float_value) const;
00203   inline bool operator>=(double double_value) const;
00204 #ifndef RAVI_INTERFACE
00205   bool operator>=(long double ldouble_value) const;
00206 #endif  
00207 
00209   inline bool operator<(const plData &data) const;
00211   inline bool operator<(int int_value) const;
00213   inline bool operator<(unsigned int int_value) const;
00215   inline bool operator<(long int int_value) const;
00217   inline bool operator<(unsigned long int int_value) const;
00218   inline bool operator<(float float_value) const;
00219   inline bool operator<(double double_value) const;
00220 #ifndef RAVI_INTERFACE
00221   inline bool operator<(long double ldouble_value) const;
00222 #endif
00223 
00224 
00226   inline bool operator<=(const plData &data) const;
00228   inline bool operator<=(int int_value) const;
00230   inline bool operator<=(unsigned int int_value) const;
00232   inline bool operator<=(long int int_value) const;
00234   inline bool operator<=(unsigned long int int_value) const;
00235   inline bool operator<=(float float_value) const;
00236   inline bool operator<=(double double_value) const;
00237 
00238 #ifndef RAVI_INTERFACE
00239   inline bool operator<=(long double ldouble_value) const;
00240 #endif
00241 
00243   inline plData operator*(const plData &data) const;
00245   inline plData operator*(int data) const;
00247   inline plData operator*(unsigned int data) const;
00249   inline plData operator*(long int data) const;
00251   inline plData operator*(unsigned long int data) const;
00253   inline plData operator*(float v) const;
00255   inline plData operator*(double v) const;
00256 #ifndef RAVI_INTERFACE
00257 
00258   inline plData operator*(long double v) const;
00259 #endif
00260 
00262   inline plData operator/(const plData &data) const;
00264   inline plData operator/(int data) const;
00266   inline plData operator/(unsigned int data) const;
00268   inline plData operator/(long int data) const;
00270   inline plData operator/(unsigned long int data) const;
00272   inline plData operator/(float v) const;
00274   plData operator/(double v) const;
00275 #ifndef RAVI_INTERFACE
00276 
00277   inline plData operator/(long double v) const;
00278 #endif
00279 
00281   inline plData operator+(const plData &data) const;
00283   inline plData operator+(int data) const;
00285   inline plData operator+(unsigned int data) const;
00287   inline plData operator+(long int data) const;
00289   inline plData operator+(unsigned long int data) const;
00291   inline plData operator+(float v) const;
00293   inline plData operator+(double v) const;
00294 #ifndef RAVI_INTERFACE
00295 
00296   plData operator+(long double v) const;
00297 #endif
00298 
00299 
00301   inline plData operator-(const plData &data) const;
00303   inline plData operator-(int data) const;
00305   inline plData operator-(unsigned int data) const;
00307   inline plData operator-(long int data) const;
00309   inline plData operator-(unsigned long int data) const;
00311   inline plData operator-(float v) const;
00313   inline plData operator-(double v) const;
00314 #ifndef RAVI_INTERFACE
00315 
00316   inline plData operator-(long double v) const;
00317 #endif
00318 
00320   inline long int operator%(int number); 
00322   inline long int operator%(unsigned int number); 
00324   inline long int operator%(long int number); 
00325 
00326   
00327 
00328 #ifndef RAVI_INTERFACE
00329 
00331   inline operator float() const;
00332 
00334   inline operator double() const;
00335 
00337   inline operator long double() const;
00338 
00340   inline operator int() const;
00341 
00343   inline operator unsigned int() const;
00344 
00346   inline operator long int() const;
00347 
00348 #endif
00349 
00350   friend class kpl1dGauss;
00351   friend class kplInteger;
00352   friend class kplArray;
00353   friend class kplKLocker;
00354   friend class kplReal;
00355   friend class kplSFLocker;
00356   friend class kplSKFLocker;
00357   friend class kplSKLocker;
00358   friend class kplGauss;
00359   friend class kplBellShape;
00360   friend class kplConditionalBellShape;
00361   friend class kplMemory;
00362   friend class kpl1dHistogram;
00363   friend class kplHistogram;
00364   friend class kplGlobalMetropolisSampler;
00365   friend class kplKernelTable;
00366   friend class kplTwinCndKernel;
00367   friend class kplCndKernelFromKernel;
00368   friend class kplCUniform;
00369   friend class kplSparseType;
00370   friend class kplPoisson;
00371   friend class kplGamma;
00372   friend class kpl1DGamma;
00373   friend class plDataArray;
00374   friend class plKernel;
00375   friend class plDataValues;
00376   friend class plValues;
00377   friend class kplConditionalHistogramA;
00378   friend class kplConditionalHistogram;
00379   friend class kplAnonymousKernel;
00380   friend class kplKamelExpression;
00381   friend class kplConditional1dGauss; 
00382   friend class kplConditionalGauss;
00383   friend class kplConditional1dGaussA;
00384   friend class kplConditional1dGaussB;
00385   friend class kplConditional1dGaussC;
00386   friend class kplConditional1dGaussD;
00387   friend class kplConditional1dGaussE;
00388   friend class kplConditional1dGaussF;
00389   friend class kplConditional1dGaussG;
00390   friend class kplConditionalGaussD;
00391   friend class kplConditionalGaussE;
00392   friend class kplConditionalGaussF;
00393   friend class kplConditionalGaussG;
00394   friend class kplConditionalBellShapeA;
00395   friend class kplConditionalBellShapeB;
00396   friend class kplConditionalBellShapeC;
00397   friend class kplConditionalBellShapeD;
00398   friend class kplConditionalBellShapeE;
00399   friend class kplConditionalBellShapeF;
00400   friend class kplConditionalBellShapeG;
00401   friend class kplDirac;
00402   friend class kplGaAlgorithm;
00403   friend class kplIneqConstraint;
00404   friend class plIneqConstraint;
00405   friend class kplFunctionalDirac;
00406   friend class kplLogNormal;
00407 
00408   friend inline plData toData(const float& v);
00409   friend inline plData toData(const int& v);
00410 
00411 #ifndef RAVI_INTERFACE
00412 
00414   friend inline plData operator*(int number, const plData& data);
00416   friend inline plData operator*(unsigned int number, const plData& data);
00418   friend inline plData operator*(long int number, const plData& data);
00420   friend inline plData operator*(unsigned long int number, const plData& data);
00422   friend inline plData operator*(float number, const plData& data);
00424   friend inline plData operator*(double number, const plData& data);
00426   friend inline plData operator*(long double number, const plData& data);
00427 
00428 
00430   friend inline plData operator+(int number, const plData& data);
00432   friend inline plData operator+(unsigned int number, const plData& data);
00434   friend inline plData operator+(long int number, const plData& data);
00436   friend inline plData operator+(unsigned long int number, const plData& data);
00438   friend inline plData operator+(float number, const plData& data);
00440   friend inline plData operator+(double number, const plData& data);
00442   friend inline plData operator+(long double number, const plData& data);
00443 
00445   friend inline plData operator-(int number, const plData& data);
00447   friend inline plData operator-(unsigned int number, const plData& data);
00449   friend inline plData operator-(long int number, const plData& data);
00451   friend inline plData operator-(unsigned long int number, const plData& data);
00453   friend inline plData operator-(float number, const plData& data);
00455   friend inline plData operator-(double number, const plData& data);
00457   friend inline plData operator-(long double number, const plData& data);
00458 
00459   //void set_forced(const plData &data);
00460 
00461   friend ostream &operator<<(ostream &out, const plData &data){
00462     data.Output(out);
00463     return out;
00464   }
00465 
00466   friend istream& operator>>(istream& in, plData &data) {
00467     data.Input(in);
00468     return in;
00469   }
00470 
00471 #endif
00472 };
00473 
00474 
00475 #ifndef RAVI_INTERFACE
00476 
00478 inline plData operator*(int number, const plData& data);
00480 inline plData operator*(unsigned int number, const plData& data);
00482 inline plData operator*(long int number, const plData& data);
00484 inline plData operator*(unsigned long int number, const plData& data);
00486 inline plData operator*(float number, const plData& data);
00488 inline plData operator*(double number, const plData& data);
00490 inline plData operator*(long double number, const plData& data);
00491 
00492 
00494 inline plData operator+(int number, const plData& data);
00496 inline plData operator+(unsigned int number, const plData& data);
00498 inline plData operator+(long int number, const plData& data);
00500 inline plData operator+(unsigned long int number, const plData& data);
00502 inline plData operator+(float number, const plData& data);
00504 inline plData operator+(double number, const plData& data);
00506 inline plData operator+(long double number, const plData& data);
00507 
00508 
00509 
00511 inline plData operator-(int number, const plData& data);
00513 inline plData operator-(unsigned int number, const plData& data);
00515 inline plData operator-(long int number, const plData& data);
00517 inline plData operator-(unsigned long int number, const plData& data);
00519 inline plData operator-(float number, const plData& data);
00521 inline plData operator-(double number, const plData& data);
00523 inline plData operator-(long double number, const plData& data);
00524 
00525 inline plData toData(const float& v);
00526 inline plData toData(const int& v);
00527 
00528 
00529 
00530 
00531 
00532 
00533 
00534 
00535 //=============================================================================
00536 inline plData::plData()
00537 {
00538   data_type = plData::kplNIL;
00539 }
00540 //=============================================================================
00541 inline plData::plData(int v)
00542 {
00543   data_type = plData::kplINTEGER;
00544   int_value = v;
00545 
00546 }
00547 //=============================================================================
00548 inline plData::plData(unsigned int v)
00549 {
00550   data_type = plData::kplINTEGER;
00551   int_value = v;
00552 
00553 }
00554 //=============================================================================
00555 inline plData::plData(long int v)
00556 {
00557   data_type = plData::kplINTEGER;
00558   int_value = v;
00559 
00560 }
00561 //=============================================================================
00562 inline plData::plData(unsigned long int v)
00563 {
00564   data_type = plData::kplINTEGER;
00565   int_value = v;
00566 
00567 }
00568 
00569 //=============================================================================
00570 inline plData::plData(float v)
00571 {
00572   data_type = plData::kplFLOAT;
00573   float_value = v;
00574 }
00575 //=============================================================================
00576 inline plData::plData(double v)
00577 {
00578   data_type = plData::kplFLOAT;
00579   float_value = v;
00580 }
00581 //=============================================================================
00582 inline plData::plData(long double v)
00583 {
00584   data_type = plData::kplFLOAT;
00585   float_value = v;
00586 }
00587 
00588 //=============================================================================
00589 inline plData& plData::operator=(const plData &data)
00590 {
00591   //This is the case when we have a new plData and we copy on it the
00592   //content of another plData
00593   if(data_type == plData::kplNIL)
00594     data_type  = data.data_type;
00595 
00596   switch(couple_type(data))
00597     {
00598     case plData::INT_INT:
00599       int_value = (long int) data.int_value;
00600       break;
00601     case plData::INT_FLOAT:
00602       int_value = (long int) data.float_value;
00603       break;
00604     case plData::FLOAT_INT:
00605       float_value = data.int_value;
00606       break;
00607     case plData::FLOAT_FLOAT:
00608       float_value = data.float_value;
00609       break;
00610     default:
00611       throw plError(2," plData operator = plData ");
00612     }
00613     
00614 
00615   return(*this);
00616 }
00617 
00618 
00619 //=============================================================================
00620 inline plData& plData::operator=(int v)
00621 {
00622   switch (data_type)
00623     {
00624     case plData::kplINTEGER :
00625       int_value = v;
00626       break;
00627     case plData::kplFLOAT:
00628       float_value = v;
00629       break;
00630     default:
00631       throw plError(2,"plData operator = int");
00632     }
00633   return *this;
00634 }
00635 
00636 //=============================================================================
00637 inline plData& plData::operator=(long int v)
00638 {
00639   switch (data_type)
00640     {
00641     case plData::kplINTEGER :
00642       int_value = v;
00643       break;
00644     case plData::kplFLOAT:
00645       float_value = v;
00646       break;
00647     default:
00648       throw plError(2,"plData operator = long int");
00649     }
00650   return *this;
00651 }
00652 
00653 //=============================================================================
00654 inline plData& plData::operator=(unsigned int v)
00655 {
00656   switch (data_type)
00657     {
00658     case plData::kplINTEGER :
00659       int_value = v;
00660       break;
00661     case plData::kplFLOAT:
00662       float_value = v;
00663       break;
00664     default:
00665       throw plError(2,"plData operator  = unsigned int");
00666     }
00667   return *this;
00668 }
00669 
00670 //=============================================================================
00671 inline plData& plData::operator=(unsigned long int v)
00672 {
00673   switch (data_type)
00674     {
00675     case plData::kplINTEGER :
00676       int_value = v;
00677       break;
00678     case plData::kplFLOAT:
00679       float_value = v;
00680       break;
00681     default:
00682       throw plError(2,"plData operator = unsigned long int");
00683     }
00684   return *this;
00685 }
00686 //=============================================================================
00687 inline plData& plData::operator=(float v)
00688 {
00689   switch (data_type)
00690     {
00691     case plData::kplINTEGER :
00692       int_value = int(v);
00693       break;
00694     case plData::kplFLOAT:
00695       float_value = v;
00696       break;
00697     default:
00698       throw plError(2,"plData operator = float");
00699     }
00700   return *this;
00701 }
00702 //=============================================================================
00703 inline plData& plData::operator=(double v)
00704 {
00705   switch (data_type)
00706     {
00707     case plData::kplINTEGER :
00708       int_value = int(v);
00709       break;
00710     case plData::kplFLOAT:
00711       float_value = v;
00712       break;
00713     default: 
00714       throw plError(2,"plData operator = double");
00715     }
00716   return *this;
00717 }
00718 
00719 //=============================================================================
00720 inline plData& plData::operator=(long double v)
00721 {
00722 
00723   switch (data_type)
00724     {
00725     case plData::kplINTEGER :
00726       int_value = int(v);
00727       break;
00728     case plData::kplFLOAT:
00729       float_value = v;
00730       break;
00731     default:
00732       throw plError(2,"plData operator = long double");
00733     }
00734   return *this;
00735 }
00736 
00737 //=============================================================================
00738 inline bool plData::operator==(const plData &data) const 
00739 {
00740   
00741   switch(couple_type(data))
00742     {
00743     case plData::INT_INT:
00744       return(int_value==data.int_value);
00745       break;
00746     case plData::INT_FLOAT:
00747       return(int_value==data.float_value);
00748       break;
00749     case plData::FLOAT_INT:
00750       return(float_value==data.int_value);
00751       break;
00752     case plData::FLOAT_FLOAT:
00753       return(float_value==data.float_value);
00754       break;
00755     default:
00756       throw plError(2," plData operator == plData");
00757       return false;
00758     }
00759 
00760 }
00761 
00762 //=============================================================================
00763 inline bool plData::operator==(int _int_value) const
00764 {
00765   switch (data_type)
00766     {
00767     case plData::kplINTEGER :
00768       return(int_value == _int_value);
00769       break;
00770     case plData::kplFLOAT:
00771       return(float_value == _int_value);
00772       break;
00773     default:
00774       throw plError(2,"plData operator == int");
00775       return false;
00776     }
00777 }
00778 
00779 //=============================================================================
00780 inline bool plData::operator==(unsigned int _int_value) const
00781 {
00782   switch (data_type)
00783     {
00784     case plData::kplINTEGER :
00785       return(int_value == (long int) _int_value);
00786       break;
00787     case plData::kplFLOAT:
00788       return(float_value == _int_value);
00789       break;
00790     default:
00791       throw plError(2,"plData operator == unsigned int");
00792       return false;
00793     }
00794 }
00795 
00796 //=============================================================================
00797 inline bool plData::operator==(long int _int_value) const
00798 {
00799   switch (data_type)
00800     {
00801     case plData::kplINTEGER :
00802       return(int_value == _int_value);
00803       break;
00804     case plData::kplFLOAT:
00805       return(float_value == _int_value);
00806       break;
00807     default:
00808       throw plError(2,"plData operator == long int");
00809       return false;
00810     }
00811 }
00812 //=============================================================================
00813 inline bool plData::operator==(unsigned long int _int_value) const
00814 {
00815   switch (data_type)
00816     {
00817     case plData::kplINTEGER :
00818       return(int_value == (long int) _int_value);
00819       break;
00820     case plData::kplFLOAT:
00821       return(float_value == _int_value);
00822       break;
00823     default:
00824       throw plError(2,"plData operator == unsigned long int");
00825       return false;
00826     }
00827 }
00828 
00829 //=============================================================================
00830 inline bool plData::operator==(float _float_value) const
00831 {
00832   switch (data_type)
00833     {
00834     case plData::kplINTEGER :
00835       return(int_value == _float_value);
00836       break;
00837     case plData::kplFLOAT:
00838       return(float_value == _float_value);
00839       break;
00840     default:
00841       throw plError(2,"plData operator == float");
00842       return false;
00843     }
00844 }
00845 //=============================================================================
00846 inline bool plData::operator==(double _float_value) const
00847 {
00848   switch (data_type)
00849     {
00850     case plData::kplINTEGER :
00851       return(int_value == _float_value);
00852       break;
00853     case plData::kplFLOAT:
00854       return(float_value == _float_value);
00855       break;
00856     default:
00857       throw plError(2,"plData operator == double");
00858       return false;
00859     }
00860 }
00861 //=============================================================================
00862 inline bool plData::operator==(long double _float_value) const
00863 {
00864   switch (data_type)
00865     {
00866     case plData::kplINTEGER :
00867       return(int_value == _float_value);
00868       break;
00869     case plData::kplFLOAT:
00870       return(float_value == _float_value);
00871       break;
00872     default:
00873       throw plError(2,"plData operator == long double");
00874       return false;
00875     }
00876 }
00877 
00878 //=============================================================================
00879 inline bool plData::operator>(const plData &data) const 
00880 {
00881 
00882   switch(couple_type(data))
00883     {
00884     case plData::INT_INT:
00885       return(int_value>data.int_value);
00886       break;
00887     case plData::INT_FLOAT:
00888       return(int_value>data.float_value);
00889       break;
00890     case plData::FLOAT_INT:
00891       return(float_value>data.int_value);
00892       break;
00893     case plData::FLOAT_FLOAT:
00894       return(float_value>data.float_value);
00895       break;
00896     default:
00897       throw plError(2,"plData operator > plData");
00898       return false;
00899     }
00900 
00901 }
00902 
00903 //=============================================================================
00904 inline bool plData::operator>(int _int_value) const
00905 {
00906   switch (data_type)
00907     {
00908     case plData::kplINTEGER :
00909       return(int_value > _int_value);
00910       break;
00911     case plData::kplFLOAT:
00912       return(float_value > _int_value);
00913       break;
00914     default:
00915       throw plError(2,"plData operator > int");
00916       return false;
00917     }
00918 }
00919 //=============================================================================
00920 inline bool plData::operator>(unsigned int _int_value) const
00921 {
00922   switch (data_type)
00923     {
00924     case plData::kplINTEGER :
00925       return(int_value > (long int)_int_value);
00926       break;
00927     case plData::kplFLOAT:
00928       return(float_value > _int_value);
00929       break;
00930     default:
00931       throw plError(2,"plData > unsigned int");
00932       return false;
00933     }
00934 }
00935 //=============================================================================
00936 inline bool plData::operator>(long int _int_value) const
00937 {
00938   switch (data_type)
00939     {
00940     case plData::kplINTEGER :
00941       return(int_value > _int_value);
00942       break;
00943     case plData::kplFLOAT:
00944       return(float_value > _int_value);
00945       break;
00946     default:
00947       throw plError(2,"plData > long int");
00948       return false;
00949     }
00950 }
00951 
00952 //=============================================================================
00953 inline bool plData::operator>(unsigned long int _int_value) const
00954 {
00955   switch (data_type)
00956     {
00957     case plData::kplINTEGER :
00958       return(int_value > (long int) _int_value);
00959       break;
00960     case plData::kplFLOAT:
00961       return(float_value > _int_value);
00962       break;
00963     default:
00964       throw plError(2,"plData > unsigned long int");
00965       return false;
00966     }
00967 }
00968 
00969 //=============================================================================
00970 inline bool plData::operator>(float _float_value) const
00971 {
00972   switch (data_type)
00973     {
00974     case plData::kplINTEGER :
00975       return(int_value > _float_value);
00976       break;
00977     case plData::kplFLOAT:
00978       return(float_value > _float_value);
00979       break;
00980     default:
00981       throw plError(2,"plData > float");
00982       return false;
00983     }
00984 }
00985 //=============================================================================
00986 inline bool plData::operator>(double _float_value) const
00987 {
00988   switch (data_type)
00989     {
00990     case plData::kplINTEGER :
00991       return(int_value > _float_value);
00992       break;
00993     case plData::kplFLOAT:
00994       return(float_value > _float_value);
00995       break;
00996     default:
00997       throw plError(2,"plData > double");
00998       return false;
00999     }
01000 }
01001 //=============================================================================
01002 inline bool plData::operator>(long double _float_value) const
01003 {
01004   switch (data_type)
01005     {
01006     case plData::kplINTEGER :
01007       return(int_value > _float_value);
01008       break;
01009     case plData::kplFLOAT:
01010       return(float_value > _float_value);
01011       break;
01012     default:
01013       throw plError(2,"plData > long double");
01014       return false;
01015     }
01016 }
01017 
01018 
01019 //=============================================================================
01020 inline bool plData::operator>=(const plData &data) const 
01021 {
01022 
01023   switch(couple_type(data))
01024     {
01025     case plData::INT_INT:
01026       return(int_value>=data.int_value);
01027       break;
01028     case plData::INT_FLOAT:
01029       return(int_value>=data.float_value);
01030       break;
01031     case plData::FLOAT_INT:
01032       return(float_value>=data.int_value);
01033       break;
01034     case plData::FLOAT_FLOAT:
01035       return(float_value>=data.float_value);
01036       break;
01037     default:
01038       throw plError(2," plData >= plData");
01039       return false;
01040     }
01041   
01042 }
01043 
01044 //=============================================================================
01045 inline bool plData::operator>=(int _int_value) const
01046 {
01047   switch (data_type)
01048     {
01049     case plData::kplINTEGER :
01050       return(int_value >= _int_value);
01051       break;
01052     case plData::kplFLOAT:
01053       return(float_value >= _int_value);
01054       break;
01055     default:
01056       throw plError(2,"plData >= int");
01057       return false;
01058     }
01059 }
01060 
01061 //=============================================================================
01062 inline bool plData::operator>=(unsigned int _int_value) const
01063 {
01064   switch (data_type)
01065     {
01066     case plData::kplINTEGER :
01067       return(int_value >= (long int) _int_value);
01068       break;
01069     case plData::kplFLOAT:
01070       return(float_value >= _int_value);
01071       break;
01072     default:
01073       throw plError(2,"plData >= unsigned int");
01074       return false;
01075     }
01076 }
01077 //=============================================================================
01078 inline bool plData::operator>=(long int _int_value) const
01079 {
01080   switch (data_type)
01081     {
01082     case plData::kplINTEGER :
01083       return(int_value >= _int_value);
01084       break;
01085     case plData::kplFLOAT:
01086       return(float_value >= _int_value);
01087       break;
01088     default:
01089       throw plError(2,"plData >= long int");
01090       return false;
01091     }
01092 }
01093 //=============================================================================
01094 inline bool plData::operator>=(unsigned long int _int_value) const
01095 {
01096   switch (data_type)
01097     {
01098     case plData::kplINTEGER :
01099       return(int_value >= (long int) _int_value);
01100       break;
01101     case plData::kplFLOAT:
01102       return(float_value >= _int_value);
01103       break;
01104     default:
01105       throw plError(2,"plData >= unsigned long int");
01106       return false;
01107     }
01108 }
01109 
01110 
01111 //=============================================================================
01112 inline bool plData::operator>=(float _float_value) const
01113 {
01114   switch (data_type)
01115     {
01116     case plData::kplINTEGER :
01117       return(int_value >= _float_value);
01118       break;
01119     case plData::kplFLOAT:
01120       return(float_value >= _float_value);
01121       break;
01122     default:
01123       throw plError(2,"plData >= float");
01124       return false;
01125     }
01126 }
01127 
01128 //=============================================================================
01129 inline bool plData::operator>=(double _float_value) const
01130 {
01131   switch (data_type)
01132     {
01133     case plData::kplINTEGER :
01134       return(int_value >= _float_value);
01135       break;
01136     case plData::kplFLOAT:
01137       return(float_value >= _float_value);
01138       break;
01139     default:
01140       throw plError(2,"plData >= double");
01141       return false;
01142     }
01143 }
01144 
01145 //=============================================================================
01146 inline bool plData::operator>=(long double _float_value) const
01147 {
01148   switch (data_type)
01149     {
01150     case plData::kplINTEGER :
01151       return(int_value >= _float_value);
01152       break;
01153     case plData::kplFLOAT:
01154       return(float_value >= _float_value);
01155       break;
01156     default:
01157       throw plError(2,"plData >= long double");
01158       return false;
01159     }
01160 }
01161 
01162 //=============================================================================
01163 inline bool plData::operator<(const plData &data) const 
01164 {
01165 
01166   switch(couple_type(data))
01167     {
01168     case plData::INT_INT:
01169       return(int_value<data.int_value);
01170       break;
01171     case plData::INT_FLOAT:
01172       return(int_value<data.float_value);
01173       break;
01174     case plData::FLOAT_INT:
01175       return(float_value<data.int_value);
01176       break;
01177     case plData::FLOAT_FLOAT:
01178       return(float_value<data.float_value);
01179       break;
01180     default:
01181       throw plError(2,"plData < plData ");
01182       return false;
01183     }
01184   
01185 }
01186 //=============================================================================
01187 inline bool plData:: operator<(int _int_value) const
01188 {
01189   switch (data_type)
01190     {
01191     case plData::kplINTEGER :
01192       return(int_value < _int_value);
01193       break;
01194     case plData::kplFLOAT:
01195       return(float_value < _int_value);
01196       break;
01197     default:
01198       throw plError(2,"plData < int");
01199       return false;
01200     }
01201 }
01202 //=============================================================================
01203 inline bool plData:: operator<(unsigned int _int_value) const
01204 {
01205   switch (data_type)
01206     {
01207     case plData::kplINTEGER :
01208       return(int_value < (long int)_int_value);
01209       break;
01210     case plData::kplFLOAT:
01211       return(float_value < _int_value);
01212       break;
01213     default:
01214       throw plError(2,"plData < unsigned int");
01215       return false;
01216     }
01217 }
01218 
01219 //=============================================================================
01220 inline bool plData:: operator<(long int _int_value) const
01221 {
01222   switch (data_type)
01223     {
01224     case plData::kplINTEGER :
01225       return(int_value < _int_value);
01226       break;
01227     case plData::kplFLOAT:
01228       return(float_value < _int_value);
01229       break;
01230     default:
01231       throw plError(2,"plData < long int");
01232       return false;
01233     }
01234 }
01235 
01236 
01237 //=============================================================================
01238 inline bool plData:: operator<(unsigned long int _int_value) const
01239 {
01240   switch (data_type)
01241     {
01242     case plData::kplINTEGER :
01243       return(int_value < (long int)_int_value);
01244       break;
01245     case plData::kplFLOAT:
01246       return(float_value < _int_value);
01247       break;
01248     default:
01249       throw plError(2,"plData < unsigned long int");
01250       return false;
01251     }
01252 }
01253 
01254 //=============================================================================
01255 inline bool plData::operator<(float _float_value) const
01256 {
01257   switch (data_type)
01258     {
01259     case plData::kplINTEGER :
01260       return(int_value < _float_value);
01261       break;
01262     case plData::kplFLOAT:
01263       return(float_value < _float_value);
01264       break;
01265     default:
01266       throw plError(2,"plData < float");
01267       return false;
01268     }
01269 
01270 }
01271 
01272 
01273 //=============================================================================
01274 inline bool plData::operator<(double _float_value) const
01275 {
01276   switch (data_type)
01277     {
01278     case plData::kplINTEGER :
01279       return(int_value < _float_value);
01280       break;
01281     case plData::kplFLOAT:
01282       return(float_value < _float_value);
01283       break;
01284     default:
01285       throw plError(2,"plData < double");
01286       return false;
01287     }
01288 
01289 }
01290 
01291 
01292 //=============================================================================
01293 inline bool plData::operator<(long double _float_value) const
01294 {
01295   switch (data_type)
01296     {
01297     case plData::kplINTEGER :
01298       return(int_value < _float_value);
01299       break;
01300     case plData::kplFLOAT:
01301       return(float_value < _float_value);
01302       break;
01303     default:
01304       throw plError(2,"plData < long double");
01305       return false;
01306     }
01307 
01308 }
01309 
01310 
01311 //=============================================================================
01312 inline bool plData::operator<=(const plData &data) const 
01313 {
01314 
01315   
01316   switch(couple_type(data))
01317     {
01318     case plData::INT_INT:
01319       return(int_value<=data.int_value);
01320       break;
01321     case plData::INT_FLOAT:
01322       return(int_value<=data.float_value);
01323       break;
01324     case plData::FLOAT_INT:
01325       return(float_value<=data.int_value);
01326       break;
01327     case plData::FLOAT_FLOAT:
01328       return(float_value<=data.float_value);
01329       break;
01330     default:
01331       throw plError(2," plData <= plData ");
01332       return false;
01333     }
01334 }
01335 
01336 //=============================================================================
01337 inline bool plData::operator<=(int _int_value) const
01338 {
01339   switch (data_type)
01340     {
01341     case plData::kplINTEGER :
01342       return(int_value <= _int_value);
01343       break;
01344     case plData::kplFLOAT:
01345       return(float_value <= _int_value);
01346       break;
01347     default:
01348       throw plError(2,"plData <= int");
01349       return false;
01350     }
01351 }
01352 //=============================================================================
01353 inline bool plData::operator<=(unsigned int _int_value) const
01354 {
01355   switch (data_type)
01356     {
01357     case plData::kplINTEGER :
01358       return(int_value <= (long int) _int_value);
01359       break;
01360     case plData::kplFLOAT:
01361       return(float_value <= _int_value);
01362       break;
01363     default:
01364       throw plError(2,"plData <= unsigned int");
01365       return false;
01366     }
01367 }
01368 //=============================================================================
01369 inline bool plData::operator<=(long int _int_value) const
01370 {
01371   switch (data_type)
01372     {
01373     case plData::kplINTEGER :
01374       return(int_value <= _int_value);
01375       break;
01376     case plData::kplFLOAT:
01377       return(float_value <= _int_value);
01378       break;
01379     default:
01380       throw plError(2,"plData <= long int");
01381       return false;
01382     }
01383 }
01384 //=============================================================================
01385 inline bool plData::operator<=(unsigned long int _int_value) const
01386 {
01387   switch (data_type)
01388     {
01389     case plData::kplINTEGER :
01390       return(int_value <= (long int) _int_value);
01391       break;
01392     case plData::kplFLOAT:
01393       return(float_value <= _int_value);
01394       break;
01395     default:
01396       throw plError(2,"plData <= unsigned long int");
01397       return false;
01398     }
01399 }
01400 
01401 //=============================================================================
01402 inline bool plData::operator<=(float _float_value) const
01403 {
01404   switch (data_type)
01405     {
01406     case plData::kplINTEGER :
01407       return(int_value <= _float_value);
01408       break;
01409     case plData::kplFLOAT:
01410       return(float_value <= _float_value);
01411       break;
01412     default:
01413       throw plError(2,"plData <= float");
01414       return false;
01415     }
01416 }
01417 
01418 //=============================================================================
01419 inline bool plData::operator<=(double _float_value) const
01420 {
01421   switch (data_type)
01422     {
01423     case plData::kplINTEGER :
01424       return(int_value <= _float_value);
01425       break;
01426     case plData::kplFLOAT:
01427       return(float_value <= _float_value);
01428       break;
01429     default:
01430       throw plError(2,"plData <= double");
01431       return false;
01432     }
01433 }
01434 
01435 //=============================================================================
01436 inline bool plData::operator<=(long double _float_value) const
01437 {
01438   switch (data_type)
01439     {
01440     case plData::kplINTEGER :
01441       return(int_value <= _float_value);
01442       break;
01443     case plData::kplFLOAT:
01444       return(float_value <= _float_value);
01445       break;
01446     default:
01447       throw plError(2,"plData <= long double");
01448       return false;
01449     }
01450 }
01451 
01452 
01453 //=============================================================================
01454 inline plData plData::operator*(const plData &data) const 
01455 {
01456   switch (couple_type(data))
01457     {
01458     case plData::INT_INT:
01459       return(int_value*data.int_value);
01460       break;
01461     case plData::INT_FLOAT:
01462       return(int_value*data.float_value);
01463       break;
01464     case plData::FLOAT_INT:
01465       return(float_value*data.int_value);
01466       break;
01467     case plData::FLOAT_FLOAT:
01468       return(float_value*data.float_value);
01469       break;
01470     default:
01471       throw plError(2,"plData * plData");
01472     }
01473 
01474 }
01475 
01476 //=============================================================================
01477 inline plData plData::operator*(int data) const 
01478 {
01479   switch (data_type)
01480     {
01481     case plData::kplINTEGER:
01482       return(int_value*data);
01483       break;
01484     case plData::kplFLOAT:
01485       return(float_value*data);
01486       break;
01487     default:
01488       throw plError(2,"plData * int");
01489     }
01490 }
01491 
01492 //=============================================================================
01493 inline plData plData::operator*(unsigned int data) const 
01494 {
01495   switch (data_type)
01496     {
01497     case plData::kplINTEGER:
01498       return(int_value*data);
01499       break;
01500     case plData::kplFLOAT:
01501       return(float_value*data);
01502       break;
01503     default:
01504       throw plError(2,"plData * unsigned int");
01505     }
01506 }
01507 
01508 //=============================================================================
01509 inline plData plData::operator*(long int data) const 
01510 {
01511  
01512   switch (data_type)
01513     {
01514     case plData::kplINTEGER:
01515       return(int_value*data);
01516       break;
01517     case plData::kplFLOAT:
01518       return(float_value*data);
01519       break;
01520     default:
01521       throw plError(2,"plData * long int");
01522     }
01523 
01524 }
01525 
01526 //=============================================================================
01527 inline plData plData::operator*(unsigned long int data) const 
01528 { 
01529   switch (data_type)
01530     {
01531     case plData::kplINTEGER:
01532       return(int_value*data);
01533       break;
01534     case plData::kplFLOAT:
01535       return(float_value*data);
01536       break;
01537     default:
01538       throw plError(2,"plData * unsigned long int");
01539     }
01540 
01541 }
01542 
01543 
01544 //=============================================================================
01545 inline plData plData::operator*(float data) const 
01546 { 
01547   switch (data_type)
01548     {
01549     case plData::kplINTEGER:
01550       return(int_value*data);
01551       break;
01552     case plData::kplFLOAT:
01553       return(float_value*data);
01554       break;
01555     default:
01556       throw plError(2,"plData * float");
01557     }
01558 }
01559 //=============================================================================
01560 inline plData plData::operator*(double data) const 
01561 {  
01562   switch (data_type)
01563     {
01564     case plData::kplINTEGER:
01565       return(int_value*data);
01566       break;
01567     case plData::kplFLOAT:
01568       return(float_value*data);
01569       break;
01570     default:
01571       throw plError(2,"plData * double");
01572     }
01573 
01574 }
01575 
01576 //=============================================================================
01577 inline plData plData::operator*(long double data) const 
01578 {  
01579   switch (data_type)
01580     {
01581     case plData::kplINTEGER:
01582       return(int_value*data);
01583       break;
01584     case plData::kplFLOAT:
01585       return(float_value*data);
01586       break;
01587     default:
01588       throw plError(2,"plData * long double");
01589     }
01590 }
01591 //=============================================================================
01592 inline plData plData::operator/(const plData &data) const 
01593 { 
01594   switch (couple_type(data))
01595     {
01596     case plData::INT_INT:
01597       return(int_value/data.int_value);
01598       break;
01599     case plData::INT_FLOAT:
01600       return(int_value/data.float_value);
01601       break;
01602     case plData::FLOAT_INT:
01603       return(float_value/data.int_value);
01604       break;
01605     case plData::FLOAT_FLOAT:
01606       return(float_value/data.float_value);
01607       break;
01608     default:
01609       throw plError(2,"plData / plData");
01610     }
01611   
01612 }
01613 
01614 //=============================================================================
01615 inline plData plData::operator/(int data) const 
01616 { 
01617   switch (data_type)
01618     {
01619     case plData::kplINTEGER:
01620       return(int_value/data);
01621       break;
01622     case plData::kplFLOAT:
01623       return(float_value/data);
01624       break;
01625     default:
01626       throw plError(2,"plData / int");
01627     }
01628 
01629 }
01630 
01631 //=============================================================================
01632 inline plData plData::operator/(unsigned int data) const 
01633 { 
01634   switch (data_type)
01635     {
01636     case plData::kplINTEGER:
01637       return(int_value/data);
01638       break;
01639     case plData::kplFLOAT:
01640       return(float_value/data);
01641       break;
01642     default:
01643       throw plError(2,"plData / unsigned int");
01644     }
01645 }
01646 
01647 //=============================================================================
01648 inline plData plData::operator/(long int data) const 
01649 { 
01650   switch (data_type)
01651     {
01652     case plData::kplINTEGER:
01653       return(int_value/data);
01654       break;
01655     case plData::kplFLOAT:
01656       return(float_value/data);
01657       break;
01658     default:
01659       throw plError(2,"plData / long int");
01660     }
01661 
01662 }
01663 
01664 //=============================================================================
01665 inline plData plData::operator/(unsigned long int data) const 
01666 { 
01667   switch (data_type)
01668     {
01669     case plData::kplINTEGER:
01670       return(int_value/data);
01671       break;
01672     case plData::kplFLOAT:
01673       return(float_value/data);
01674       break;
01675     default:
01676       throw plError(2,"plData / unsigned long int");
01677     }
01678 
01679 }
01680 
01681 
01682 //=============================================================================
01683 inline plData plData::operator/(float data) const 
01684 { 
01685   switch (data_type)
01686     {
01687     case plData::kplINTEGER:
01688       return(int_value/data);
01689       break;
01690     case plData::kplFLOAT:
01691       return(float_value/data);
01692       break;
01693     default:
01694       throw plError(2,"plData / float");
01695     }
01696 }
01697 
01698 //=============================================================================
01699 inline plData plData::operator/(double data) const 
01700 {
01701   switch (data_type)
01702     {
01703     case plData::kplINTEGER:
01704       return(int_value/data);
01705       break;
01706     case plData::kplFLOAT:
01707       return(float_value/data);
01708       break;
01709     default:
01710       throw plError(2,"plData / double");
01711     }
01712 }
01713 
01714 //=============================================================================
01715 inline plData plData::operator/(long double data) const 
01716 {
01717   switch (data_type)
01718     {
01719     case plData::kplINTEGER:
01720       return(int_value/data);
01721       break;
01722     case plData::kplFLOAT:
01723       return(float_value/data);
01724       break;
01725     default:
01726       throw plError(2,"plData / long double");
01727     }
01728 }
01729 
01730 //=============================================================================
01731 inline plData plData::operator+(const plData &data) const 
01732 { 
01733   switch (couple_type(data))
01734     {
01735     case plData::INT_INT:
01736       return(int_value+data.int_value);
01737       break;
01738     case plData::INT_FLOAT:
01739       return(int_value+data.float_value);
01740       break;
01741     case plData::FLOAT_INT:
01742       return(float_value+data.int_value);
01743       break;
01744     case plData::FLOAT_FLOAT:
01745       return(float_value+data.float_value);
01746       break;
01747     default:
01748       throw plError(2,"plData + plData");
01749     }
01750 
01751 }
01752 
01753 //=============================================================================
01754 inline plData plData::operator+(int data) const 
01755 {
01756   switch (data_type)
01757     {
01758     case plData::kplINTEGER:
01759       return(int_value+data);
01760       break;
01761     case plData::kplFLOAT:
01762       return(float_value+data);
01763       break;
01764     default:
01765       throw plError(2,"plData + int");
01766     }  
01767 }
01768 
01769 //=============================================================================
01770 inline plData plData::operator+(unsigned int data) const 
01771 {
01772   switch (data_type)
01773     {
01774     case plData::kplINTEGER:
01775       return(int_value+data);
01776       break;
01777     case plData::kplFLOAT:
01778       return(float_value+data);
01779       break;
01780     default:
01781       throw plError(2,"plData + int");
01782     }
01783   
01784 }
01785 //=============================================================================
01786 inline plData plData::operator+(long int data) const 
01787 { 
01788   switch (data_type)
01789     {
01790     case plData::kplINTEGER:
01791       return(int_value+data);
01792       break;
01793     case plData::kplFLOAT:
01794       return(float_value+data);
01795       break;
01796     default:
01797       throw plError(2,"plData + long int");
01798     }  
01799 }
01800 
01801 //=============================================================================
01802 inline plData plData::operator+(unsigned long int data) const 
01803 {
01804   switch (data_type)
01805     {
01806     case plData::kplINTEGER:
01807       return(int_value+data);
01808       break;
01809     case plData::kplFLOAT:
01810       return(float_value+data);
01811       break;
01812     default:
01813       throw plError(2,"plData + unsigned long int");
01814     }  
01815 }
01816 
01817 //=============================================================================
01818 inline plData plData::operator+(float data) const 
01819 { 
01820   switch (data_type)
01821     {
01822     case plData::kplINTEGER:
01823       return(int_value+data);
01824       break;
01825     case plData::kplFLOAT:
01826       return(float_value+data);
01827       break;
01828     default:
01829       throw plError(2,"plData + float");
01830     }
01831 }
01832 //=============================================================================
01833 inline plData plData::operator+(double data) const 
01834 { 
01835   switch (data_type)
01836     {
01837     case plData::kplINTEGER:
01838       return(int_value+data);
01839       break;
01840     case plData::kplFLOAT:
01841       return(float_value+data);
01842       break;
01843     default:
01844       throw plError(2,"plData + double");
01845     }
01846 
01847 }
01848 
01849 //=============================================================================
01850 inline plData plData::operator+(long double data) const 
01851 {
01852   switch (data_type)
01853     {
01854     case plData::kplINTEGER:
01855       return(int_value+data);
01856       break;
01857     case plData::kplFLOAT:
01858       return(float_value+data);
01859       break;
01860     default:
01861       throw plError(2,"plData + long double");
01862     }
01863 }
01864 
01865 //=============================================================================
01866 inline plData plData::operator-(const plData &data) const
01867 {
01868   switch (couple_type(data))
01869     {
01870     case plData::INT_INT:
01871       return(int_value-data.int_value);
01872       break;
01873     case plData::INT_FLOAT:
01874       return(int_value-data.float_value);
01875       break;
01876     case plData::FLOAT_INT:
01877       return(float_value-data.int_value);
01878       break;
01879     case plData::FLOAT_FLOAT:
01880       return(float_value-data.float_value);
01881       break;
01882     default:
01883       throw plError(2,"plData - plData");
01884     }
01885    
01886 }
01887 
01888 //=============================================================================
01889 inline plData plData::operator-(int data) const 
01890 {
01891   switch (data_type)
01892     {
01893     case plData::kplINTEGER:
01894       return(int_value-data);
01895       break;
01896     case plData::kplFLOAT:
01897       return(float_value-data);
01898       break;
01899     default:
01900       throw plError(2,"plData - int");
01901     }
01902  
01903 }
01904 
01905 //=============================================================================
01906 inline plData plData::operator-(unsigned int data) const 
01907 {
01908   switch (data_type)
01909     {
01910     case plData::kplINTEGER:
01911       return(int_value-data);
01912       break;
01913     case plData::kplFLOAT:
01914       return(float_value-data);
01915       break;
01916     default:
01917       throw plError(2,"plData - unsigned int");
01918     }
01919  
01920 }
01921 
01922 //=============================================================================
01923 inline plData plData::operator-(long int data) const 
01924 { 
01925   switch (data_type)
01926     {
01927     case plData::kplINTEGER:
01928       return(int_value-data);
01929       break;
01930     case plData::kplFLOAT:
01931       return(float_value-data);
01932       break;
01933     default:
01934       throw plError(2,"plData - long int");
01935     } 
01936 }
01937 //=============================================================================
01938 inline plData plData::operator-(unsigned long int data) const 
01939 {
01940   switch (data_type)
01941     {
01942     case plData::kplINTEGER:
01943       return(int_value-data);
01944       break;
01945     case plData::kplFLOAT:
01946       return(float_value-data);
01947       break;
01948     default:
01949       throw plError(2,"plData - unsigned long int");
01950     }
01951  
01952 }
01953 
01954 
01955 //=============================================================================
01956 inline plData plData::operator-(float data) const 
01957 {
01958   switch (data_type)
01959     {
01960     case plData::kplINTEGER:
01961       return(int_value-data);
01962       break;
01963     case plData::kplFLOAT:
01964       return(float_value-data);
01965       break;
01966     default:
01967       throw plError(2,"plData - float");
01968     } 
01969 }
01970 
01971 //=============================================================================
01972 inline plData plData::operator-(double data) const 
01973 { 
01974   switch (data_type)
01975     {
01976     case plData::kplINTEGER:
01977       return(int_value-data);
01978       break;
01979     case plData::kplFLOAT:
01980       return(float_value-data);
01981       break;
01982     default:
01983       throw plError(2,"plData - double");
01984     } 
01985 }
01986 //=============================================================================
01987 inline plData plData::operator-(long double data) const 
01988 {  
01989   switch (data_type)
01990     {
01991     case plData::kplINTEGER:
01992       return(int_value-data);
01993       break;
01994     case plData::kplFLOAT:
01995       return(float_value-data);
01996       break;
01997     default:
01998       throw plError(2,"plData - long double");
01999     } 
02000 }
02001 
02002 
02003 
02004 //=============================================================================
02005 inline long int plData::operator%(int number)
02006 {  
02007   long int result;
02008   
02009   switch (data_type)
02010     {
02011     case plData::kplINTEGER:
02012       result = int_value % number;
02013       break;
02014     case plData::kplFLOAT:
02015       result = (long int) float_value;
02016       result = result % number;
02017       break;
02018     default:
02019       throw plError(2,"operator plData % int");
02020     }
02021   return(result);
02022 }
02023 
02024 //=============================================================================
02025 inline long int plData::operator%(unsigned int number)
02026 {
02027   long int result;
02028   switch (data_type)
02029     {
02030     case plData::kplINTEGER:
02031       result = int_value % number;
02032       break;
02033     case plData::kplFLOAT:
02034       result = (long int) float_value;
02035       result = result % number;
02036       break;
02037     default:
02038       throw plError(2,"operator plData % unsigned int");
02039     }
02040   return(result);
02041 }
02042 
02043 //=============================================================================
02044 inline long int plData::operator%(long int number)
02045 {
02046   long int result;
02047   switch (data_type)
02048     {
02049     case plData::kplINTEGER:
02050       result = int_value % number;
02051       break;
02052     case plData::kplFLOAT:
02053       result = (long int) float_value;
02054       result = result % number;
02055       break;
02056     default:
02057       throw plError(2,"operator plData % long int");
02058     }
02059   return(result);
02060 }
02061 
02062 //=============================================================================
02063 inline plData::operator long double() const 
02064 {
02065   long double res;
02066   switch (data_type){
02067   case plData::kplINTEGER:
02068     res = (long double)int_value;
02069     break;
02070   case plData::kplFLOAT:
02071     res = float_value;
02072     break;
02073   default:
02074     throw plError(2,"Conversion to long double");
02075   }
02076   
02077   return res;
02078 }
02079 
02080 //=============================================================================
02081 inline plData::operator float() const 
02082 {
02083   float res;
02084   switch (data_type){
02085   case plData::kplINTEGER:
02086     res = (float)int_value;
02087     break;
02088   case plData::kplFLOAT:
02089     res = float_value;
02090     break;
02091   default:
02092     throw plError(2,"Conversion to float");
02093   }
02094   
02095   return res;
02096 }
02097 
02098 //=============================================================================
02099 inline plData::operator double() const 
02100 {
02101   double res;
02102   switch (data_type){
02103   case plData::kplINTEGER:
02104     res = (double)int_value;
02105     break;
02106   case plData::kplFLOAT:
02107     res = float_value;
02108     break;
02109   default:
02110     throw plError(2,"Conversion to double");
02111   }
02112   
02113   return res;
02114 }
02115 
02116 
02117 //=============================================================================
02118 inline 
02119 plData::operator int() const
02120 {
02121   int res;
02122   switch (data_type){
02123   case plData::kplINTEGER:
02124     res = int_value;
02125     break;
02126   case plData::kplFLOAT:
02127     res = (int)float_value;
02128     break;
02129   default:
02130     throw plError(2,"Conversion to int");
02131   }
02132   
02133   return res;
02134 }
02135 
02136 //=============================================================================
02137 inline plData::operator unsigned int() const
02138 {
02139   unsigned int res;
02140   switch (data_type){
02141   case plData::kplINTEGER:
02142     res = int_value;
02143     break;
02144   case plData::kplFLOAT:
02145     res = (int)float_value;
02146     break;
02147   default:
02148     throw plError(2,"Conversion to unsigned int");
02149   }
02150   
02151   return res;
02152 }
02153 
02154 //=============================================================================
02155 inline plData::operator long int() const
02156 {
02157   long int res;
02158   switch (data_type){
02159   case plData::kplINTEGER:
02160     res = int_value;
02161     break;
02162   case plData::kplFLOAT:
02163     res = (int)float_value;
02164     break;
02165   default:
02166     throw plError(2,"Conversion to long int");
02167   }
02168   
02169   return res;
02170 }
02171 
02172 //=============================================================================
02173 inline plData operator*(int number, const plData& data) 
02174 {
02175   switch (data.data_type)
02176     {
02177     case plData::kplINTEGER:
02178       return(number*data.int_value);
02179       break;
02180     case plData::kplFLOAT:
02181       return(number*data.float_value);
02182       break;
02183     default:
02184       throw plError(2,"int * plData");
02185     }
02186 }
02187 
02188 //=============================================================================
02189 inline plData operator*(unsigned int number, const plData& data) 
02190 {
02191   switch (data.data_type)
02192     {
02193     case plData::kplINTEGER:
02194       return(number*data.int_value);
02195       break;
02196     case plData::kplFLOAT:
02197       return(number*data.float_value);
02198       break;
02199     default:
02200       throw plError(2,"unsigned int * plData");
02201     }
02202 
02203 }
02204 
02205 //=============================================================================
02206 inline plData operator*(long int number, const plData& data) 
02207 { 
02208   switch (data.data_type)
02209     {
02210     case plData::kplINTEGER:
02211       return(number*data.int_value);
02212       break;
02213     case plData::kplFLOAT:
02214       return(number*data.float_value);
02215       break;
02216     default:
02217       throw plError(2,"long int * plData");
02218     }
02219 }
02220 
02221 //=============================================================================
02222 inline plData operator*(unsigned long int number, const plData& data) 
02223 {
02224   switch (data.data_type)
02225     {
02226     case plData::kplINTEGER:
02227       return(number*data.int_value);
02228       break;
02229     case plData::kplFLOAT:
02230       return(number*data.float_value);
02231       break;
02232     default:
02233       throw plError(2,"unsigned long int * plData");
02234     }
02235   
02236 }
02237 
02238 //=============================================================================
02239 inline plData operator*(float number, const plData& data) 
02240 {
02241   switch (data.data_type)
02242     {
02243     case plData::kplINTEGER:
02244       return(number*data.int_value);
02245       break;
02246     case plData::kplFLOAT:
02247       return(number*data.float_value);
02248       break;
02249     default:
02250       throw plError(2,"float * plData");
02251     }  
02252 }
02253 
02254 //=============================================================================
02255 inline plData operator*(double number, const plData& data) 
02256 {
02257   switch (data.data_type)
02258     {
02259     case plData::kplINTEGER:
02260       return(number*data.int_value);
02261       break;
02262     case plData::kplFLOAT:
02263       return(number*data.float_value);
02264       break;
02265     default:
02266       throw plError(2,"double * plData");
02267     }  
02268 }
02269 
02270 //=============================================================================
02271 inline plData operator*(long double number, const plData& data) 
02272 {
02273   switch (data.data_type)
02274     {
02275     case plData::kplINTEGER:
02276       return(number*data.int_value);
02277       break;
02278     case plData::kplFLOAT:
02279       return(number*data.float_value);
02280       break;
02281     default:
02282       throw plError(2,"long double * plData");
02283     }  
02284 }
02285 
02286 //=============================================================================
02287 inline plData operator+(int number, const plData& data) 
02288 { 
02289   switch (data.data_type)
02290     {
02291     case plData::kplINTEGER:
02292       return(number+data.int_value);
02293       break;
02294     case plData::kplFLOAT:
02295       return(number+data.float_value);
02296       break;
02297     default:
02298       throw plError(2,"int + plData");
02299     }
02300 }
02301 //=============================================================================
02302 inline plData operator+(unsigned int number, const plData& data) 
02303 { 
02304   switch (data.data_type)
02305     {
02306     case plData::kplINTEGER:
02307       return(number+data.int_value);
02308       break;
02309     case plData::kplFLOAT:
02310       return(number+data.float_value);
02311       break;
02312     default:
02313       throw plError(2,"unsigned int + plData");
02314     }
02315 }
02316 //=============================================================================
02317 inline plData operator+(long int number, const plData& data) 
02318 { 
02319   switch (data.data_type)
02320     {
02321     case plData::kplINTEGER:
02322       return(number+data.int_value);
02323       break;
02324     case plData::kplFLOAT:
02325       return(number+data.float_value);
02326       break;
02327     default:
02328       throw plError(2,"long int + plData");
02329     }
02330 }
02331 //=============================================================================
02332 inline plData operator+(unsigned long int number, const plData& data) 
02333 { 
02334   switch (data.data_type)
02335     {
02336     case plData::kplINTEGER:
02337       return(number+data.int_value);
02338       break;
02339     case plData::kplFLOAT:
02340       return(number+data.float_value);
02341       break;
02342     default:
02343       throw plError(2,"unsigned long int + plData");
02344     }
02345 }
02346 
02347 //=============================================================================
02348 inline plData operator+(float number, const plData& data) 
02349 {
02350   switch (data.data_type)
02351     {
02352     case plData::kplINTEGER:
02353       return(number+data.int_value);
02354       break;
02355     case plData::kplFLOAT:
02356       return(number+data.float_value);
02357       break;
02358     default:
02359       throw plError(2,"float + plData");
02360     } 
02361 }
02362 
02363 //=============================================================================
02364 inline plData operator+(double number, const plData& data) 
02365 {  
02366   switch (data.data_type)
02367     {
02368     case plData::kplINTEGER:
02369       return(number+data.int_value);
02370       break;
02371     case plData::kplFLOAT:
02372       return(number+data.float_value);
02373       break;
02374     default:
02375       throw plError(2,"double + plData");
02376     } 
02377 }
02378 
02379 //=============================================================================
02380 inline plData operator+(long double number, const plData& data) 
02381 { 
02382   switch (data.data_type)
02383     {
02384     case plData::kplINTEGER:
02385       return(number+data.int_value);
02386       break;
02387     case plData::kplFLOAT:
02388       return(number+data.float_value);
02389       break;
02390     default:
02391       throw plError(2,"long double + plData");
02392     } 
02393 }
02394 
02395 //=============================================================================
02396 inline plData operator-(int number, const plData& data) 
02397 {
02398   switch (data.data_type)
02399     {
02400     case plData::kplINTEGER:
02401       return(number-data.int_value);
02402       break;
02403     case plData::kplFLOAT:
02404       return(number-data.float_value);
02405       break;
02406     default:
02407       throw plError(2,"int - plData");
02408     }
02409 }
02410 //=============================================================================
02411 inline plData operator-(unsigned int number, const plData& data) 
02412 {  
02413   switch (data.data_type)
02414     {
02415     case plData::kplINTEGER:
02416       return(number-data.int_value);
02417       break;
02418     case plData::kplFLOAT:
02419       return(number-data.float_value);
02420       break;
02421     default:
02422       throw plError(2,"unsigned int - plData");
02423     }
02424 }
02425 //=============================================================================
02426 inline plData operator-(long int number, const plData& data) 
02427 {
02428   switch (data.data_type)
02429     {
02430     case plData::kplINTEGER:
02431       return(number-data.int_value);
02432       break;
02433     case plData::kplFLOAT:
02434       return(number-data.float_value);
02435       break;
02436     default:
02437       throw plError(2,"long int - plData");
02438     }
02439 }
02440 //=============================================================================
02441 inline plData operator-(unsigned long int number, const plData& data) 
02442 {
02443   switch (data.data_type)
02444     {
02445     case plData::kplINTEGER:
02446       return(number-data.int_value);
02447       break;
02448     case plData::kplFLOAT:
02449       return(number-data.float_value);
02450       break;
02451     default:
02452       throw plError(2,"unsigned long int - plData");
02453     }
02454 }
02455 
02456 //=============================================================================
02457 inline plData operator-(float number, const plData& data) 
02458 {
02459   switch (data.data_type)
02460     {
02461     case plData::kplINTEGER:
02462       return(number-data.int_value);
02463       break;
02464     case plData::kplFLOAT:
02465       return(number-data.float_value);
02466       break;
02467     default:
02468       throw plError(2,"float - plData");
02469     }
02470 }
02471 //=============================================================================
02472 inline plData operator-(double number, const plData& data) 
02473 {
02474   switch (data.data_type)
02475     {
02476     case plData::kplINTEGER:
02477       return(number-data.int_value);
02478       break;
02479     case plData::kplFLOAT:
02480       return(number-data.float_value);
02481       break;
02482     default:
02483       throw plError(2,"double - plData");
02484     }
02485 }
02486 
02487 //=============================================================================
02488 inline plData operator-(long double number, const plData& data) 
02489 {
02490   switch (data.data_type)
02491     {
02492     case plData::kplINTEGER:
02493       return(number-data.int_value);
02494       break;
02495     case plData::kplFLOAT:
02496       return(number-data.float_value);
02497       break;
02498     default:
02499       throw plError(2,"long double - plData");
02500     }
02501 }
02502 #endif  //ravi_interface
02503 
02504 //=============================================================================
02505 // following functions defined to work under ravi
02506 
02507 inline plData toData(const float& v) 
02508 {
02509   return(v);
02510 }
02511 
02512 
02513 //=============================================================================
02514 inline plData toData(const int& v) 
02515 {
02516   return(v); 
02517 }
02518 
02519 #endif

Generated on Fri Apr 1 10:58:12 2005 for ProBT by  doxygen 1.4.1