00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
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
00034 enum plData_type {kplNIL,
00035 kplINTEGER,
00036 kplFLOAT};
00037
00038
00040 enum plCoupleDataType {
00041 INT_INT = 0,
00042 INT_FLOAT = 1,
00043 FLOAT_INT = 2,
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
00072 if (data_type == plData::kplINTEGER)
00073 type1 = plData::INT_INT;
00074
00075 else
00076 type1 = plData::FLOAT_INT;
00077
00078
00079 if (data.data_type == plData::kplINTEGER)
00080 type2 = plData::INT_INT;
00081
00082 else
00083 type2 = plData::INT_FLOAT;
00084
00085
00086
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
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
00592
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
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