Horus Doc || C++ Reference || Class Overview   Pixels   Images   Detector   Geometry   Registry || Doxygen's quick Index  

HxScalarDouble.h

00001 /*
00002  *  Copyright (c) 1997, University of Amsterdam, The Netherlands.
00003  *  All rights reserved.
00004  *
00005  *
00006  *  Author(s):
00007  *  Dennis Koelma (koelma@wins.uva.nl)
00008  *  Edo Poll (poll@wins.uva.nl)
00009  */
00010 
00011 #ifndef HxScalarDouble_h
00012 #define HxScalarDouble_h
00013 
00014 #include "HxIoFwd.h"
00015 #include "HxMath.h"
00016 #include "HxString.h"
00017 
00018 #undef min
00019 #undef max
00020 
00021 class HxScalarInt;
00022 class HxVec2Int;
00023 class HxVec2Double;
00024 class HxVec3Int;
00025 class HxVec3Double;
00026 class HxComplex;
00027 
00028 
00032 class L_HXBASIS HxScalarDouble {
00033 public:
00034 
00036 
00038                             HxScalarDouble();
00039 
00041                             HxScalarDouble(double v);
00042                             
00044                             HxScalarDouble(const HxScalarDouble& rhs);
00046 
00047     void*                   operator new(size_t, void* = 0);
00048 
00049     HxScalarDouble&         operator=(const double& v);
00050     HxScalarDouble&         operator=(const HxScalarDouble& rhs);
00051 
00053 
00056     int                     dim() const;
00057     
00059     double                  x() const;
00060 
00062     double                  getValue(int dimension) const; // dimension: 1
00063     void                    setValue(int dimension, double value); // dimension: 1
00065 
00067 /** \name Conversion*/
00068                             //operator double() const;
00069 
00071                             operator HxScalarInt() const;
00072 
00074                             operator HxVec2Int() const;
00075 
00077                             operator HxVec2Double() const;
00078 
00080                             operator HxVec3Int() const;
00081 
00083                             operator HxVec3Double() const;
00084 
00086                             operator HxComplex() const;
00088 
00090 
00094     int                     operator==(const HxScalarDouble& v) const;
00095 
00097     int                     operator!=(const HxScalarDouble& v) const;
00098 
00100     int                     operator< (const HxScalarDouble& v) const;
00101 
00103     int                     operator<=(const HxScalarDouble& v) const;
00104 
00106     int                     operator> (const HxScalarDouble& v) const;
00107 
00109     int                     operator>=(const HxScalarDouble& v) const;
00110 
00115     static const HxScalarDouble SMALL_VAL;
00116 
00121     static const HxScalarDouble LARGE_VAL;
00123 
00125 
00129     HxScalarDouble          operator-() const;
00130 
00132     HxScalarDouble          complement() const;
00133 
00135     HxScalarDouble          abs() const;
00136 
00138     HxScalarDouble          ceil() const;
00139 
00141     HxScalarDouble          floor() const;
00142 
00144     HxScalarDouble          round() const;
00145 
00147     HxScalarDouble          sum() const;
00148     
00150     HxScalarDouble          product() const;
00151 
00153     HxScalarDouble          min() const;
00154 
00156     HxScalarDouble          max() const;
00157 
00159     HxScalarDouble          norm1() const;
00160 
00162     HxScalarDouble          norm2() const;
00163 
00165     HxScalarDouble          normInf() const;
00166 
00168     HxScalarDouble          sqrt() const;
00169 
00171     HxScalarDouble          sin() const;
00172 
00174     HxScalarDouble          cos() const;
00175 
00177     HxScalarDouble          tan() const;
00178 
00180     HxScalarDouble          asin() const;
00181 
00183     HxScalarDouble          acos() const;
00184 
00186     HxScalarDouble          atan() const;
00187 
00189     HxScalarDouble          atan2() const;
00190 
00192     HxScalarDouble          sinh() const;
00193 
00195     HxScalarDouble          cosh() const;
00196 
00198     HxScalarDouble          tanh() const;
00199 
00201     HxScalarDouble          exp() const;
00202 
00204     HxScalarDouble          log() const;
00205 
00207     HxScalarDouble          log10() const;
00209 
00211 
00215     HxScalarDouble&         operator+=(const HxScalarDouble& v);
00216 
00218     HxScalarDouble&         operator-=(const HxScalarDouble& v);
00219 
00221     HxScalarDouble&         operator*=(const HxScalarDouble& v);
00222 
00224     HxScalarDouble&         operator/=(const HxScalarDouble& v);
00225 
00226 
00228     friend HxScalarDouble   operator+(const HxScalarDouble& v1,
00229                                       const HxScalarDouble& v2);
00230 
00232     friend HxScalarDouble   operator-(const HxScalarDouble& v1,
00233                                       const HxScalarDouble& v2);
00234 
00236     friend HxScalarDouble   operator*(const HxScalarDouble& v1,
00237                                       const HxScalarDouble& v2);
00238 
00240     friend HxScalarDouble   operator/(const HxScalarDouble& v1,
00241                                       const HxScalarDouble& v2);
00242 
00243 
00245     HxScalarDouble          min(const HxScalarDouble& v) const;
00246 
00248     HxScalarDouble&         minAssign(const HxScalarDouble& v);
00249 
00251     HxScalarDouble          max(const HxScalarDouble& v) const;
00252 
00254     HxScalarDouble&         maxAssign(const HxScalarDouble& v);
00255 
00257     HxScalarDouble          inf(const HxScalarDouble& v) const;
00258 
00260     HxScalarDouble&         infAssign(const HxScalarDouble& v);
00261 
00263     HxScalarDouble          sup(const HxScalarDouble& v) const;
00264 
00266     HxScalarDouble&         supAssign(const HxScalarDouble& v);
00267 
00269     HxScalarDouble          pow(const HxScalarDouble& v) const;
00270 
00272     HxScalarDouble          mod(const HxScalarDouble& v) const;
00273 
00275     HxScalarDouble          and(const HxScalarDouble& v) const;
00276 
00278     HxScalarDouble          or(const HxScalarDouble& v) const;
00279 
00281     HxScalarDouble          xor(const HxScalarDouble& v) const;
00282 
00284     HxScalarDouble          leftShift(const HxScalarDouble& v) const;
00285 
00287     HxScalarDouble          rightShift(const HxScalarDouble& v) const;
00288 
00290     HxScalarDouble          dot(const HxScalarDouble& v) const;
00291 
00293     HxScalarDouble          cross(const HxScalarDouble& v) const;
00295 
00297 
00299     STD_OSTREAM&            put(STD_OSTREAM& os) const;
00300 
00302     HxString                toString() const;
00304 
00305 private:
00306     double                  _value;
00307 };
00308 
00309 typedef HxScalarDouble (*HxUpoScalarDouble)(const HxScalarDouble& a);
00310 typedef HxScalarDouble (*HxBpoScalarDouble)(const HxScalarDouble& a1, const HxScalarDouble& a2);
00311 
00312 inline STD_OSTREAM&
00313 operator<<(STD_OSTREAM& os, const HxScalarDouble v)
00314 {
00315     return v.put(os);
00316 }
00317 
00318 inline
00319 HxScalarDouble::HxScalarDouble() 
00320 { 
00321 }
00322 
00323 inline
00324 HxScalarDouble::HxScalarDouble(double v)
00325     : _value(v)
00326 { 
00327 }
00328 
00329 inline
00330 HxScalarDouble::HxScalarDouble(const HxScalarDouble& rhs)
00331     : _value(rhs._value)
00332 {
00333 }
00334 
00335 inline void*
00336 HxScalarDouble::operator new(size_t size, void *m) 
00337 {
00338     return m ? m : new char[size];
00339 }
00340 
00341 inline HxScalarDouble&
00342 HxScalarDouble::operator=(const double& v)
00343 {
00344     _value = v;
00345     return *this;
00346 }
00347 
00348 inline HxScalarDouble&
00349 HxScalarDouble::operator=(const HxScalarDouble& rhs)
00350 {
00351     _value = rhs._value;
00352     return *this;
00353 }
00354 
00355 inline int
00356 HxScalarDouble::dim() const 
00357 { 
00358     return 1; 
00359 }
00360 
00361 inline double
00362 HxScalarDouble::x() const 
00363 { 
00364     return _value; 
00365 }
00366 
00367 inline double
00368 HxScalarDouble::getValue(int) const
00369 { 
00370     return _value; 
00371 }
00372 
00373 inline void
00374 HxScalarDouble::setValue(int, double value)
00375 { 
00376     _value = value; 
00377 }
00378 /*
00379 inline
00380 HxScalarDouble::operator double() const
00381 {
00382     return _value;
00383 }
00384 */
00385 inline int
00386 HxScalarDouble::operator==(const HxScalarDouble& v) const
00387 {
00388     return (_value == v._value);
00389 }
00390 
00391 inline int
00392 HxScalarDouble::operator!=(const HxScalarDouble& v) const
00393 {
00394     return (_value != v._value);
00395 }
00396 
00397 inline int
00398 HxScalarDouble::operator<(const HxScalarDouble& v) const
00399 {
00400     return (_value < v._value);
00401 }
00402 
00403 inline int
00404 HxScalarDouble::operator<=(const HxScalarDouble& v) const
00405 {
00406     return (_value <= v._value);
00407 }
00408 
00409 inline int
00410 HxScalarDouble::operator>(const HxScalarDouble& v) const
00411 {
00412     return (_value > v._value);
00413 }
00414 
00415 inline int
00416 HxScalarDouble::operator>=(const HxScalarDouble& v) const
00417 {
00418     return (_value >= v._value);
00419 }
00420 
00421 inline HxScalarDouble
00422 HxScalarDouble::operator-() const
00423 {
00424     return HxScalarDouble(-_value);
00425 }
00426 
00427 inline HxScalarDouble
00428 HxScalarDouble::complement() const
00429 {
00430     return HxScalarDouble(-_value);
00431 }
00432 
00433 inline HxScalarDouble
00434 HxScalarDouble::abs() const
00435 {
00436     return HxScalarDouble(fabs(_value));
00437 }
00438 
00439 inline HxScalarDouble
00440 HxScalarDouble::ceil() const
00441 {
00442     return HxScalarDouble(::ceil(_value));
00443 }
00444 
00445 inline HxScalarDouble
00446 HxScalarDouble::floor() const
00447 {
00448     return HxScalarDouble(::floor(_value));
00449 }
00450 
00451 inline HxScalarDouble
00452 HxScalarDouble::round() const
00453 {
00454     return HxScalarDouble((int) (_value + ((_value >= 0) ? 0.5 : -0.5)));
00455 }
00456 
00457 inline HxScalarDouble
00458 HxScalarDouble::sum() const
00459 {
00460     return *this;
00461 }
00462 
00463 inline HxScalarDouble
00464 HxScalarDouble::product() const
00465 {
00466     return *this;
00467 }
00468 
00469 inline HxScalarDouble
00470 HxScalarDouble::min() const
00471 {
00472     return *this;
00473 }
00474 
00475 inline HxScalarDouble
00476 HxScalarDouble::max() const
00477 {
00478     return *this;
00479 }
00480 
00481 inline HxScalarDouble
00482 HxScalarDouble::norm1() const
00483 {
00484     return HxScalarDouble(fabs(_value));
00485 }
00486 
00487 inline HxScalarDouble
00488 HxScalarDouble::normInf() const
00489 {
00490     return HxScalarDouble(fabs(_value));
00491 }
00492 
00493 inline HxScalarDouble
00494 HxScalarDouble::sqrt() const
00495 {
00496     return HxScalarDouble(::sqrt(_value));
00497 }
00498 
00499 inline HxScalarDouble
00500 HxScalarDouble::sin() const
00501 {
00502     return HxScalarDouble(::sin(_value));
00503 }
00504 
00505 inline HxScalarDouble
00506 HxScalarDouble::cos() const
00507 {
00508     return HxScalarDouble(::cos(_value));
00509 }
00510 
00511 inline HxScalarDouble
00512 HxScalarDouble::tan() const
00513 {
00514     return HxScalarDouble(::tan(_value));
00515 }
00516 
00517 inline HxScalarDouble
00518 HxScalarDouble::asin() const
00519 {
00520     return HxScalarDouble(::asin(_value));
00521 }
00522 
00523 inline HxScalarDouble
00524 HxScalarDouble::acos() const
00525 {
00526     return HxScalarDouble(::acos(_value));
00527 }
00528 
00529 inline HxScalarDouble
00530 HxScalarDouble::atan() const
00531 {
00532     return HxScalarDouble(::atan(_value));
00533 }
00534 
00535 inline HxScalarDouble
00536 HxScalarDouble::sinh() const
00537 {
00538     return HxScalarDouble(::sinh(_value));
00539 }
00540 
00541 inline HxScalarDouble
00542 HxScalarDouble::cosh() const
00543 {
00544     return HxScalarDouble(::cosh(_value));
00545 }
00546 
00547 inline HxScalarDouble
00548 HxScalarDouble::tanh() const
00549 {
00550     return HxScalarDouble(::tanh(_value));
00551 }
00552 
00553 inline HxScalarDouble
00554 HxScalarDouble::exp() const
00555 {
00556     return HxScalarDouble(::exp(_value));
00557 }
00558 
00559 inline HxScalarDouble
00560 HxScalarDouble::log() const
00561 {
00562     return HxScalarDouble(::log(_value));
00563 }
00564 
00565 inline HxScalarDouble
00566 HxScalarDouble::log10() const
00567 {
00568     return HxScalarDouble(::log10(_value));
00569 }
00570 
00571 inline HxScalarDouble&
00572 HxScalarDouble::operator+=(const HxScalarDouble& v)
00573 {
00574     _value += v._value;
00575     return *this;
00576 }
00577 
00578 inline HxScalarDouble&
00579 HxScalarDouble::operator-=(const HxScalarDouble& v)
00580 {
00581     _value -= v._value;
00582     return *this;
00583 }
00584 
00585 inline HxScalarDouble&
00586 HxScalarDouble::operator*=(const HxScalarDouble& v)
00587 {
00588     _value *= v._value;
00589     return *this;
00590 }
00591 
00592 inline HxScalarDouble&
00593 HxScalarDouble::operator/=(const HxScalarDouble& v)
00594 {
00595     _value /= v._value;
00596     return *this;
00597 }
00598 
00599 inline HxScalarDouble
00600 operator+(const HxScalarDouble& v1, const HxScalarDouble& v2)
00601 {
00602     return HxScalarDouble(v1._value + v2._value);
00603 }
00604 
00605 inline HxScalarDouble
00606 operator-(const HxScalarDouble& v1, const HxScalarDouble& v2)
00607 {
00608     return HxScalarDouble(v1._value - v2._value);
00609 }
00610 
00611 inline HxScalarDouble
00612 operator*(const HxScalarDouble& v1, const HxScalarDouble& v2)
00613 {
00614     return HxScalarDouble(v1._value * v2._value);
00615 }
00616 
00617 inline HxScalarDouble
00618 operator/(const HxScalarDouble& v1, const HxScalarDouble& v2)
00619 {
00620     return HxScalarDouble(v1._value / v2._value);
00621 }
00622 
00623 inline HxScalarDouble
00624 HxScalarDouble::min(const HxScalarDouble& v) const
00625 {
00626     return (operator<(v)) ? (*this) : v;
00627 }
00628 
00629 inline HxScalarDouble&
00630 HxScalarDouble::minAssign(const HxScalarDouble& v)
00631 {
00632     if (operator<(v))
00633         return *this;
00634     operator=(v);
00635     return *this;
00636 }
00637 
00638 inline HxScalarDouble
00639 HxScalarDouble::max(const HxScalarDouble& v) const
00640 {
00641     return (operator>(v)) ? (*this) : v;
00642 }
00643 
00644 inline HxScalarDouble&
00645 HxScalarDouble::maxAssign(const HxScalarDouble& v)
00646 {
00647     if (operator>(v))
00648         return *this;
00649     operator=(v);
00650     return *this;
00651 }
00652 
00653 inline HxScalarDouble
00654 HxScalarDouble::inf(const HxScalarDouble& v) const
00655 {
00656     return (operator<(v)) ? (*this) : v;
00657 }
00658 
00659 inline HxScalarDouble&
00660 HxScalarDouble::infAssign(const HxScalarDouble& v)
00661 {
00662     _value = (_value < v._value) ? _value : v._value;
00663     return *this;
00664 }
00665 
00666 inline HxScalarDouble
00667 HxScalarDouble::sup(const HxScalarDouble& v) const
00668 {
00669     return (operator>(v)) ? (*this) : v;
00670 }
00671 
00672 inline HxScalarDouble&
00673 HxScalarDouble::supAssign(const HxScalarDouble& v)
00674 {
00675     _value = (_value > v._value) ? _value : v._value;
00676     return *this;
00677 }
00678 
00679 inline HxScalarDouble
00680 HxScalarDouble::pow(const HxScalarDouble& v) const
00681 {
00682     return HxScalarDouble(::pow(_value, v._value));
00683 }
00684 
00685 inline HxScalarDouble
00686 HxScalarDouble::mod(const HxScalarDouble&) const
00687 {
00688     return (*this);
00689 }
00690 
00691 inline HxScalarDouble
00692 HxScalarDouble::and(const HxScalarDouble&) const
00693 {
00694     return (*this);
00695 }
00696 
00697 inline HxScalarDouble
00698 HxScalarDouble::or(const HxScalarDouble&) const
00699 {
00700     return (*this);
00701 }
00702 
00703 inline HxScalarDouble
00704 HxScalarDouble::xor(const HxScalarDouble&) const
00705 {
00706     return (*this);
00707 }
00708 
00709 inline HxScalarDouble
00710 HxScalarDouble::leftShift(const HxScalarDouble&) const
00711 {
00712     return (*this);
00713 }
00714 
00715 inline HxScalarDouble
00716 HxScalarDouble::rightShift(const HxScalarDouble&) const
00717 {
00718     return (*this);
00719 }
00720 
00721 inline HxScalarDouble
00722 HxScalarDouble::cross(const HxScalarDouble&) const
00723 {
00724     return HxScalarDouble(0.0);
00725 }
00726 
00727 inline HxString
00728 HxScalarDouble::toString() const
00729 { 
00730     return makeString(_value); 
00731 }
00732 
00733 #endif

Generated on Tue Feb 3 14:18:42 2004 for C++Reference by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001