LCOV - code coverage report
Current view: top level - alma/ASDM - Interval.h (source / functions) Hit Total Coverage
Test: casacpp_coverage.info Lines: 34 49 69.4 %
Date: 2024-12-11 20:54:31 Functions: 14 21 66.7 %

          Line data    Source code
       1             : /*
       2             :  * ALMA - Atacama Large Millimeter Array
       3             :  * (c) European Southern Observatory, 2002
       4             :  * (c) Associated Universities Inc., 2002
       5             :  * Copyright by ESO (in the framework of the ALMA collaboration),
       6             :  * Copyright by AUI (in the framework of the ALMA collaboration),
       7             :  * All rights reserved.
       8             :  * 
       9             :  * This library is free software; you can redistribute it and/or
      10             :  * modify it under the terms of the GNU Lesser General Public
      11             :  * License as published by the Free software Foundation; either
      12             :  * version 2.1 of the License, or (at your option) any later version.
      13             :  * 
      14             :  * This library is distributed in the hope that it will be useful,
      15             :  * but WITHOUT ANY WARRANTY, without even the implied warranty of
      16             :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      17             :  * Lesser General Public License for more details.
      18             :  * 
      19             :  * You should have received a copy of the GNU Lesser General Public
      20             :  * License along with this library; if not, write to the Free Software
      21             :  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
      22             :  * MA 02111-1307  USA
      23             :  *
      24             :  * File Interval.h
      25             :  */
      26             : 
      27             : #ifndef Interval_CLASS
      28             : #define Interval_CLASS
      29             : 
      30             : #include <stdint.h>
      31             : #include <vector>
      32             : #include <iostream>
      33             : #include <string>
      34             : 
      35             : #ifndef WITHOUT_ACS
      36             : #include <asdmIDLTypesC.h>
      37             : #endif
      38             : 
      39             : #include <alma/ASDM/StringTokenizer.h>
      40             : #include <alma/ASDM/NumberFormatException.h>
      41             : 
      42             : #include <alma/ASDM/EndianStream.h>
      43             : 
      44             : namespace asdm {
      45             : 
      46             :   class Interval;
      47             :   Interval operator * ( int64_t , const Interval & );
      48             :   std::ostream & operator << ( std::ostream &, const Interval & );
      49             :   std::istream & operator >> ( std::istream &, Interval&);
      50             : 
      51             :   /**
      52             :    * The Interval class implements an interval of time in units
      53             :    * of nanoseconds.
      54             :    * 
      55             :    * @version 1.00 Jan. 7, 2005
      56             :    * @author Allen Farris
      57             :    */
      58             :   class Interval {
      59             :     friend Interval operator * ( int64_t , const Interval & );
      60             :     friend std::ostream & operator << ( std::ostream &, const Interval & );
      61             :     friend std::istream & operator >> ( std::istream &, Interval&);
      62             : 
      63             :   public:
      64             :     static int64_t fromString(const std::string&);
      65             :     static std::string toString(int64_t);
      66             :     static Interval getInterval(StringTokenizer &t);
      67             : 
      68             :     Interval();                                         // default constructor
      69             :     Interval(const Interval &);                                             // X const X& constructor
      70             :     Interval(const std::string &s);
      71             : #ifndef WITHOUT_ACS
      72             :     Interval(const asdmIDLTypes::IDLInterval &);
      73             : #endif
      74             :     Interval(int64_t value);
      75             :     virtual ~Interval();                                                        // destructor
      76             : 
      77             :     Interval& operator = (const Interval&);                     // assignment operator
      78             :     Interval& operator = (const int64_t);                   // assignment operator
      79             : 
      80             :     Interval& operator += (const Interval&);            // assignment with arithmetic
      81             :     Interval& operator -= (const Interval&);            //      operators
      82             :     Interval& operator *= (const int64_t);
      83             :     Interval& operator /= (const int64_t);
      84             : 
      85             :     Interval operator + (const Interval&) const;    // arithmetic operators
      86             :     Interval operator - (const Interval&) const;
      87             :     Interval operator * (const int64_t) const;
      88             :     Interval operator / (const int64_t) const;
      89             : 
      90             :     bool operator < (const Interval&) const;             // comparison operators
      91             :     bool operator > (const Interval&) const;
      92             :     bool operator <= (const Interval&) const;
      93             :     bool operator >= (const Interval&) const;
      94             :     bool operator == (const Interval&) const;
      95             :     bool equals(const Interval&) const;
      96             :     bool operator != (const Interval&) const;
      97             : 
      98             :     bool isZero() const;
      99             : 
     100             :     Interval operator - () const;                                       // unary minus
     101             :     Interval operator + () const;                               // unary plus
     102             : 
     103             :     std::string toString() const;
     104             :     std::string toStringI() const;
     105             :         
     106             :     /**
     107             :      * Write the binary representation of this into an EndianOSStream
     108             :      * @param eoss
     109             :      *
     110             :      */
     111             :     void  toBin(EndianOSStream& eoss) ;
     112             :         
     113             :     /**
     114             :      * Write the binary representation of a vector of Interval into a EndianOSStream.
     115             :      * @param interval
     116             :      * @param eoss
     117             :      */
     118             :     static void toBin(std::vector<Interval> interval, EndianOSStream& eoss) ;
     119             :         
     120             :     /**
     121             :      * Write the binary representation of a vector of vector  of Interval into a EndianOSStream.
     122             :      * @param interval
     123             :      * @param eoss
     124             :      */
     125             :     static void toBin(std::vector<std::vector<Interval> > interval, EndianOSStream& eoss) ;
     126             :         
     127             :     /**
     128             :      * Read the binary representation of an Interval from an EndianIStream
     129             :      * and use the read value to set an  Interval.
     130             :      * @param eis the EndianIStream to be read
     131             :      * @return an Interval
     132             :      */
     133             :     static Interval fromBin(EndianIStream& eis);
     134             :         
     135             :     /**
     136             :      * Read the binary representation of a vector of Interval from a EndianIStream
     137             :      * and use the read value to set a vector of Interval.
     138             :      * @param eis the EndianIStream to be read
     139             :      * @return a vector of Interval
     140             :      */
     141             :     static std::vector<Interval> from1DBin(EndianIStream& eis);
     142             :         
     143             :     /**
     144             :      * Read the binary representation of a vector of vector of Interval from a EndianIStream
     145             :      * and use the read value to set a vector of vector of Interval.
     146             :      * @param eis the EndianIStream  to be read
     147             :      * @return a vector of vector of Interval
     148             :      */
     149             :     static std::vector<std::vector<Interval> >from2DBin(EndianIStream& eis);    
     150             :         
     151             :     operator std::string () const;
     152             :     int64_t get() const;
     153             : #ifndef WITHOUT_ACS
     154             :     asdmIDLTypes::IDLInterval toIDLInterval() const;
     155             : #endif
     156             :     static std::string unit();
     157             : 
     158             :   private:
     159             :     int64_t value;
     160             : 
     161             :   };
     162             : 
     163             :   // Interval constructors
     164    13929373 :   inline Interval::Interval() : value(0L) {
     165    13929373 :   }
     166             : 
     167    34894898 :   inline Interval::Interval(const Interval &t) : value(t.value) {
     168    34894898 :   }
     169             : 
     170             : #ifndef WITHOUT_ACS
     171             :   inline Interval::Interval(const asdmIDLTypes::IDLInterval &l) : value(l.value) {
     172             :   }
     173             : #endif
     174             : 
     175        7890 :   inline Interval::Interval(const std::string &s) : value(fromString(s)) {
     176        7890 :   }
     177             : 
     178   135073257 :   inline Interval::Interval(int64_t v) : value(v) {
     179   135073257 :   }
     180             : 
     181             :   // Interval destructor
     182           0 :   inline Interval::~Interval() { }
     183             : 
     184             :   // assignment operator
     185    41674146 :   inline Interval& Interval::operator = ( const Interval &t ) {
     186    41674146 :     value = t.value;
     187    41674146 :     return *this;
     188             :   }
     189             : 
     190             :   // assignment operator
     191    13742859 :   inline Interval& Interval::operator = ( const int64_t v ) {
     192    13742859 :     value = v;
     193    13742859 :     return *this;
     194             :   }
     195             : 
     196             :   // assignment with arithmetic operators
     197             :   inline Interval& Interval::operator += ( const Interval& t) {
     198             :     value += t.value;
     199             :     return *this;
     200             :   }
     201             : 
     202             :   inline Interval& Interval::operator -= ( const Interval& t) {
     203             :     value -= t.value;
     204             :     return *this;
     205             :   }
     206             : 
     207             :   inline Interval& Interval::operator *= ( const int64_t n) {
     208             :     value *= n;
     209             :     return *this;
     210             :   }
     211             : 
     212             :   inline Interval& Interval::operator /= ( const int64_t n) {
     213             :     value /= n;
     214             :     return *this;
     215             :   }
     216             : 
     217             :   // arithmetic functions
     218       76252 :   inline Interval Interval::operator + ( const Interval &t2 ) const {
     219       76252 :     Interval tmp;
     220       76252 :     tmp.value = value + t2.value;
     221       76252 :     return tmp;
     222             :   }
     223             : 
     224        5616 :   inline Interval Interval::operator - ( const Interval &t2 ) const {
     225        5616 :     Interval tmp;
     226        5616 :     tmp.value = value - t2.value;
     227        5616 :     return tmp;
     228             :   }
     229             :   inline Interval Interval::operator * ( const int64_t n) const {
     230             :     Interval tmp;
     231             :     tmp.value = value * n;
     232             :     return tmp;
     233             :   }
     234             : 
     235           0 :   inline Interval Interval::operator / ( const int64_t n) const {
     236           0 :     Interval tmp;
     237           0 :     tmp.value = value / n;
     238           0 :     return tmp;
     239             :   }
     240             : 
     241             :   // comparison operators
     242       76252 :   inline bool Interval::operator < (const Interval& x) const {
     243       76252 :     return (value < x.value);
     244             :   }
     245             : 
     246       76252 :   inline bool Interval::operator > (const Interval& x) const {
     247       76252 :     return (value > x.value);
     248             :   }
     249             : 
     250           0 :   inline bool Interval::operator <= (const Interval& x) const {
     251           0 :     return (value <= x.value);
     252             :   }
     253             : 
     254             :   inline bool Interval::operator >= (const Interval& x) const {
     255             :     return (value >= x.value);
     256             :   }
     257             : 
     258       12964 :   inline bool Interval::operator == (const Interval& x) const {
     259       12964 :     return (value == x.value);
     260             :   }
     261       11495 :   inline bool Interval::equals(const Interval& x) const {
     262       11495 :     return (value == x.value);
     263             :   }
     264             : 
     265           0 :   inline bool Interval::operator != (const Interval& x) const {
     266           0 :     return (value != x.value);
     267             :   }
     268             : 
     269             :   // unary - and + operators
     270             :   inline Interval Interval::operator - () const {
     271             :     Interval tmp;
     272             :     tmp.value = -value;
     273             :     return tmp;
     274             :   }
     275             : 
     276             :   inline Interval Interval::operator + () const {
     277             :     Interval tmp;
     278             :     tmp.value = value;
     279             :     return tmp;
     280             :   }
     281             : 
     282             :   // Conversion functions
     283             :   inline Interval::operator std::string () const {
     284             :     return toString();
     285             :   }
     286             : 
     287        7180 :   inline std::string Interval::toString() const {
     288        7180 :     return toString(value);
     289             :   }
     290             : 
     291             :   inline std::string Interval::toStringI() const {
     292             :     return toString(value);
     293             :   }
     294             : 
     295    81550571 :   inline int64_t Interval::get() const {
     296    81550571 :     return value;
     297             :   }
     298             : 
     299             : #ifndef WITHOUT_ACS
     300             :   inline asdmIDLTypes::IDLInterval Interval::toIDLInterval() const {
     301             :     asdmIDLTypes::IDLInterval tmp;
     302             :     tmp.value = value;
     303             :     return tmp;
     304             :   }
     305             : #endif
     306             : 
     307             :   // Friend functions
     308             : 
     309             :   inline Interval operator * ( int64_t n, const Interval &x) {
     310             :     Interval tmp;
     311             :     tmp.value = x.value * n;
     312             :     return tmp;
     313             :   }
     314             : 
     315           0 :   inline std::ostream & operator << ( std::ostream &o, const Interval &x ) {
     316           0 :     o << x.value;
     317           0 :     return o;
     318             :   }
     319             : 
     320           0 :   inline std::istream & operator >> ( std::istream &i, Interval &x ) {
     321           0 :     i >> x.value;
     322           0 :     return i;
     323             :   }
     324             : 
     325             :   inline std::string Interval::unit() {
     326             :     return std::string ("nanosec");
     327             :   }
     328             : 
     329             : } // End namespace asdm
     330             : 
     331             : #endif /* Interval_CLASS */

Generated by: LCOV version 1.16