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

HxScalarInt.h

00001 /*
00002  *  Copyright (c) 1998, 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 HxScalarInt_h
00012 #define HxScalarInt_h
00013 
00014 #include "HxIoFwd.h"
00015 #include "HxMath.h"
00016 #include "HxString.h"
00017 
00018 #undef min
00019 #undef max
00020 
00021 class HxScalarDouble;
00022 class HxVec2Int;
00023 class HxVec2Double;
00024 class HxVec3Int;
00025 class HxVec3Double;
00026 class HxComplex;
00027 
00028 
00032 class L_HXBASIS HxScalarInt {
00033 public:
00034 
00036 
00038                             HxScalarInt();
00039 
00041                             HxScalarInt(int v);
00042                             
00044                             HxScalarInt(const HxScalarInt& v);
00046 
00047     void*                   operator new(size_t, void * = 0);
00048 
00050 
00053     int                     dim() const;
00054     
00056     int                     x() const;
00057 
00059     int                     getValue(int dimension) const; // dimension: 1
00060     void                    setValue(int dimension, int value); // dimension: 1
00062 
00064 /** \name Conversion*/
00065                             //operator int() const;
00066 
00068                             operator HxScalarDouble() const;
00069 
00071                             operator HxVec2Int() const;
00072 
00074                             operator HxVec2Double() const;
00075 
00077                             operator HxVec3Int() const;
00078 
00080                             operator HxVec3Double() const;
00081 
00083                             operator HxComplex() const;
00085 
00087 
00091     int                     operator==(const HxScalarInt& v) const;
00092 
00094     int                     operator!=(const HxScalarInt& v) const;
00095 
00097     int                     operator< (const HxScalarInt& v) const;
00098 
00100     int                     operator<=(const HxScalarInt& v) const;
00101 
00103     int                     operator> (const HxScalarInt& v) const;
00104 
00106     int                     operator>=(const HxScalarInt& v) const;
00107 
00112     static const HxScalarInt SMALL_VAL;
00113 
00118     static const HxScalarInt LARGE_VAL;
00120 
00122 
00126     HxScalarInt             operator-() const;
00127 
00129     HxScalarInt             complement() const;
00130 
00132     HxScalarInt             abs() const;
00133 
00135     HxScalarInt             ceil() const;
00136 
00138     HxScalarInt             floor() const;
00139 
00141     HxScalarInt             round() const;
00142 
00144     HxScalarInt             sum() const;
00145     
00147     HxScalarInt             product() const;
00148 
00150     HxScalarInt             min() const;
00151 
00153     HxScalarInt             max() const;
00154 
00156     HxScalarInt             norm1() const;
00157 
00159     HxScalarDouble          norm2() const;
00160 
00162     HxScalarInt             normInf() const;
00163 
00165     HxScalarDouble          sqrt() const;
00166 
00168     HxScalarDouble          sin() const;
00169 
00171     HxScalarDouble          cos() const;
00172 
00174     HxScalarDouble          tan() const;
00175 
00177     HxScalarDouble          asin() const;
00178 
00180     HxScalarDouble          acos() const;
00181 
00183     HxScalarDouble          atan() const;
00184 
00186     HxScalarDouble          atan2() const;
00187 
00189     HxScalarDouble          sinh() const;
00190 
00192     HxScalarDouble          cosh() const;
00193 
00195     HxScalarDouble          tanh() const;
00196 
00198     HxScalarDouble          exp() const;
00199 
00201     HxScalarDouble          log() const;
00202 
00204     HxScalarDouble          log10() const;
00206 
00208 
00212     HxScalarInt&            operator+=(const HxScalarInt& v);
00213 
00215     HxScalarInt&            operator-=(const HxScalarInt& v);
00216 
00218     HxScalarInt&            operator*=(const HxScalarInt& v);
00219 
00221     HxScalarInt&            operator/=(const HxScalarInt& v);
00222 
00223 
00225     friend HxScalarInt      operator+(const HxScalarInt& v1,
00226                                       const HxScalarInt& v2);
00227 
00229     friend HxScalarInt      operator-(const HxScalarInt& v1,
00230                                       const HxScalarInt& v2);
00231 
00233     friend HxScalarInt      operator*(const HxScalarInt& v1,
00234                                       const HxScalarInt& v2);
00235 
00237     friend HxScalarInt      operator/(const HxScalarInt& v1,
00238                                       const HxScalarInt& v2);
00239 
00240 
00242     HxScalarInt             min(const HxScalarInt& v) const;
00243 
00245     HxScalarInt&            minAssign(const HxScalarInt& v);
00246 
00248     HxScalarInt             max(const HxScalarInt& v) const;
00249 
00251     HxScalarInt&            maxAssign(const HxScalarInt& v);
00252 
00254     HxScalarInt             inf(const HxScalarInt& v) const;
00255 
00257     HxScalarInt&            infAssign(const HxScalarInt& v);
00258 
00260     HxScalarInt             sup(const HxScalarInt& v) const;
00261 
00263     HxScalarInt&            supAssign(const HxScalarInt& v);
00264 
00266     HxScalarInt             pow(const HxScalarInt& v) const;
00267 
00269     HxScalarInt             mod(const HxScalarInt& v) const;
00270 
00272     HxScalarInt             and(const HxScalarInt& v) const;
00273 
00275     HxScalarInt             or(const HxScalarInt& v) const;
00276 
00278     HxScalarInt             xor(const HxScalarInt& v) const;
00279 
00281     HxScalarInt             leftShift(const HxScalarInt& v) const;
00282 
00284     HxScalarInt             rightShift(const HxScalarInt& v) const;
00285 
00287     HxScalarInt             dot(const HxScalarInt& v) const;
00288 
00290     HxScalarInt             cross(const HxScalarInt& v) const;
00292 
00294 
00296     STD_OSTREAM&            put(STD_OSTREAM& os) const;
00297 
00299     HxString                toString() const;
00301 
00302 private:
00303     int                     _value;
00304 };
00305 
00306 typedef HxScalarInt (*HxUpoScalarInt)(const HxScalarInt& a);
00307 typedef HxScalarInt (*HxBpoScalarInt)(const HxScalarInt& a1, const HxScalarInt& a2);
00308 
00309 inline STD_OSTREAM&
00310 operator<<(STD_OSTREAM& os, const HxScalarInt v)
00311 {
00312     return v.put(os);
00313 }
00314 
00315 inline
00316 HxScalarInt::HxScalarInt()
00317 { 
00318 }
00319 
00320 inline
00321 HxScalarInt::HxScalarInt(int v) 
00322 { 
00323     _value = v; 
00324 }
00325 
00326 inline
00327 HxScalarInt::HxScalarInt(const HxScalarInt& v)
00328 {
00329     _value = v._value;
00330 }
00331 
00332 inline void*
00333 HxScalarInt::operator new(size_t size, void *m) 
00334 {
00335     return m ? m : new char[size];
00336 }
00337 
00338 inline int
00339 HxScalarInt::dim() const 
00340 { 
00341     return 1; 
00342 }
00343 
00344 inline int
00345 HxScalarInt::x() const 
00346 { 
00347     return _value; 
00348 }
00349 
00350 inline int
00351 HxScalarInt::getValue(int) const
00352 { 
00353     return _value; 
00354 }
00355 
00356 inline void
00357 HxScalarInt::setValue(int, int value)
00358 { 
00359     _value = value; 
00360 }
00361 /*
00362 inline
00363 HxScalarInt::operator int() const
00364 {
00365     return _value;
00366 }
00367 */
00368 inline int
00369 HxScalarInt::operator==(const HxScalarInt& v) const
00370 {
00371     return (_value == v._value);
00372 }
00373 
00374 inline int
00375 HxScalarInt::operator!=(const HxScalarInt& v) const
00376 {
00377     return (_value != v._value);
00378 }
00379 
00380 inline int
00381 HxScalarInt::operator<(const HxScalarInt& v) const
00382 {
00383     return (_value < v._value);
00384 }
00385 
00386 inline int
00387 HxScalarInt::operator<=(const HxScalarInt& v) const
00388 {
00389     return (_value <= v._value);
00390 }
00391 
00392 inline int
00393 HxScalarInt::operator>(const HxScalarInt& v) const
00394 {
00395     return (_value > v._value);
00396 }
00397 
00398 inline int
00399 HxScalarInt::operator>=(const HxScalarInt& v) const
00400 {
00401     return (_value >= v._value);
00402 }
00403 
00404 inline HxScalarInt
00405 HxScalarInt::operator-() const
00406 {
00407     return HxScalarInt(-_value);
00408 }
00409 
00410 inline HxScalarInt
00411 HxScalarInt::complement() const
00412 {
00413     return HxScalarInt(~_value);
00414 }
00415 
00416 inline HxScalarInt
00417 HxScalarInt::abs() const
00418 {
00419     return HxScalarInt(::abs(_value));
00420 }
00421 
00422 inline HxScalarInt
00423 HxScalarInt::ceil() const
00424 {
00425     return *this;
00426 }
00427 
00428 inline HxScalarInt
00429 HxScalarInt::floor() const
00430 {
00431     return *this;
00432 }
00433 
00434 inline HxScalarInt
00435 HxScalarInt::round() const
00436 {
00437     return *this;
00438 }
00439 
00440 inline HxScalarInt
00441 HxScalarInt::sum() const
00442 {
00443     return *this;
00444 }
00445 
00446 inline HxScalarInt
00447 HxScalarInt::product() const
00448 {
00449     return *this;
00450 }
00451 
00452 inline HxScalarInt
00453 HxScalarInt::min() const
00454 {
00455     return *this;
00456 }
00457 
00458 inline HxScalarInt
00459 HxScalarInt::max() const
00460 {
00461     return *this;
00462 }
00463 
00464 inline HxScalarInt
00465 HxScalarInt::norm1() const
00466 {
00467     return HxScalarInt(::abs(_value));
00468 }
00469 
00470 inline HxScalarInt
00471 HxScalarInt::normInf() const
00472 {
00473     return HxScalarInt(::abs(_value));
00474 }
00475 
00476 inline HxScalarInt&
00477 HxScalarInt::operator+=(const HxScalarInt& v)
00478 {
00479     _value += v._value;
00480     return *this;
00481 }
00482 
00483 inline HxScalarInt&
00484 HxScalarInt::operator-=(const HxScalarInt& v)
00485 {
00486     _value -= v._value;
00487     return *this;
00488 }
00489 
00490 inline HxScalarInt&
00491 HxScalarInt::operator*=(const HxScalarInt& v)
00492 {
00493     _value *= v._value;
00494     return *this;
00495 }
00496 
00497 inline HxScalarInt&
00498 HxScalarInt::operator/=(const HxScalarInt& v)
00499 {
00500     _value /= v._value;
00501     return *this;
00502 }
00503 
00504 inline HxScalarInt
00505 operator+(const HxScalarInt& v1, const HxScalarInt& v2)
00506 {
00507     return HxScalarInt(v1._value + v2._value);
00508 }
00509 
00510 inline HxScalarInt
00511 operator-(const HxScalarInt& v1, const HxScalarInt& v2)
00512 {
00513     return HxScalarInt(v1._value - v2._value);
00514 }
00515 
00516 inline HxScalarInt
00517 operator*(const HxScalarInt& v1, const HxScalarInt& v2)
00518 {
00519     return HxScalarInt(v1._value * v2._value);
00520 }
00521 
00522 inline HxScalarInt
00523 operator/(const HxScalarInt& v1, const HxScalarInt& v2)
00524 {
00525     return HxScalarInt(v1._value / v2._value);
00526 }
00527 
00528 inline HxScalarInt
00529 HxScalarInt::min(const HxScalarInt& v) const
00530 {
00531     return (operator<(v)) ? (*this) : v;
00532 }
00533 
00534 inline HxScalarInt&
00535 HxScalarInt::minAssign(const HxScalarInt& v)
00536 {
00537     if (operator<(v))
00538         return *this;
00539     operator=(v);
00540     return *this;
00541 }
00542 
00543 inline HxScalarInt
00544 HxScalarInt::max(const HxScalarInt& v) const
00545 {
00546     return (operator>(v)) ? (*this) : v;
00547 }
00548 
00549 inline HxScalarInt&
00550 HxScalarInt::maxAssign(const HxScalarInt& v)
00551 {
00552     if (operator>(v))
00553         return *this;
00554     operator=(v);
00555     return *this;
00556 }
00557 
00558 inline HxScalarInt
00559 HxScalarInt::inf(const HxScalarInt& v) const
00560 {
00561     return (operator<(v)) ? (*this) : v;
00562 }
00563 
00564 inline HxScalarInt&
00565 HxScalarInt::infAssign(const HxScalarInt& v)
00566 {
00567     _value = (_value < v._value) ? _value : v._value;
00568     return *this;
00569 }
00570 
00571 inline HxScalarInt
00572 HxScalarInt::sup(const HxScalarInt& v) const
00573 {
00574     return (operator>(v)) ? (*this) : v;
00575 }
00576 
00577 inline HxScalarInt&
00578 HxScalarInt::supAssign(const HxScalarInt& v)
00579 {
00580     _value = (_value > v._value) ? _value : v._value;
00581     return *this;
00582 }
00583 
00584 inline HxScalarInt
00585 HxScalarInt::pow(const HxScalarInt& v) const
00586 {
00587     return HxScalarInt((int) (::pow(_value, v._value) + 0.5));
00588 }
00589 
00590 inline HxScalarInt
00591 HxScalarInt::mod(const HxScalarInt& v) const
00592 {
00593     return HxScalarInt(_value % v._value);
00594 }
00595 
00596 inline HxScalarInt
00597 HxScalarInt::and(const HxScalarInt& v) const
00598 {
00599     return HxScalarInt(_value & v._value);
00600 }
00601 
00602 inline HxScalarInt
00603 HxScalarInt::or(const HxScalarInt& v) const
00604 {
00605     return HxScalarInt(_value | v._value);
00606 }
00607 
00608 inline HxScalarInt
00609 HxScalarInt::xor(const HxScalarInt& v) const
00610 {
00611     return HxScalarInt(_value ^ v._value);
00612 }
00613 
00614 inline HxScalarInt
00615 HxScalarInt::leftShift(const HxScalarInt& v) const
00616 {
00617     return HxScalarInt(_value << v._value);
00618 }
00619 
00620 inline HxScalarInt
00621 HxScalarInt::rightShift(const HxScalarInt& v) const
00622 {
00623     return HxScalarInt(_value >> v._value);
00624 }
00625 
00626 inline HxScalarInt
00627 HxScalarInt::cross(const HxScalarInt&) const
00628 {
00629     return 0;
00630 }
00631 
00632 inline HxString
00633 HxScalarInt::toString() const
00634 {
00635     return makeString(_value);
00636 }
00637 
00638 #endif

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