⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gpszcount.hpp

📁 gps源代码
💻 HPP
字号:
#pragma ident "$Id: GPSZcount.hpp 500 2007-04-27 12:02:53Z ocibu $"/** * @file GPSZcount.hpp * gpstk::GPSZcount - encapsulates time according to full GPS Week and Z-count. */#ifndef GPSTK_GPSZCOUNT_HPP#define GPSTK_GPSZCOUNT_HPP//============================================================================////  This file is part of GPSTk, the GPS Toolkit.////  The GPSTk is free software; you can redistribute it and/or modify//  it under the terms of the GNU Lesser General Public License as published//  by the Free Software Foundation; either version 2.1 of the License, or//  any later version.////  The GPSTk is distributed in the hope that it will be useful,//  but WITHOUT ANY WARRANTY; without even the implied warranty of//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the//  GNU Lesser General Public License for more details.////  You should have received a copy of the GNU Lesser General Public//  License along with GPSTk; if not, write to the Free Software Foundation,//  Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA//  //  Copyright 2004, The University of Texas at Austin////============================================================================//============================================================================////This software developed by Applied Research Laboratories at the University of//Texas at Austin, under contract to an agency or agencies within the U.S. //Department of Defense. The U.S. Government retains all rights to use,//duplicate, distribute, disclose, or release this software. ////Pursuant to DoD Directive 523024 //// DISTRIBUTION STATEMENT A: This software has been approved for public //                           release, distribution is unlimited.////=============================================================================// system includes#include <ostream>// GPSTK includes#include "Exception.hpp"namespace gpstk{      /** @addtogroup timegroup */      //@{      /**       * A representation class for GPS Time consisting of       * a short GPS week, and a long GPS Z-count.        * A valid GPS week is in the following range:       *   0 <= week <= numerical_limits<short>::max()       * A valid GPS Z-count is in the following range:       *   0 <= zcount < 403200       *       * In Z-count addition, if a specified Z-count value is above or below        * the given range of valid Z-counts, the appropriate number of GPS        * weeks-worth of Z-counts are added or subtracted from the given value        * so that it falls within the acceptable range.  These extra weeks are        * then accounted for in the weeks data member.  If the addition or        * subtraction of these additional weeks cause the GPS week value to go        * out-of-bounds, an InvalidRequest exception is thrown.       */   class GPSZcount   {   public:         /// Z-counts per minute (40)      static const long ZCOUNT_MINUTE;         /// Z-counts per hour (2400)      static const long ZCOUNT_HOUR;         /// Z-counts per day (57600)      static const long ZCOUNT_DAY;         /// Z-counts per whole GPS week. (403200)      static const long ZCOUNT_WEEK;         /** Separate Week and Z-count Constructor.          * @param inWeek the GPS week to use in this object.          * @param inZcount the GPS Z-count to use in this object.          * @throws gpstk::InvalidParameter if either inWeek or inZcount          *  are invalid values for their respective types.          */      GPSZcount(short inWeek,                long inZcount)         throw(gpstk::InvalidParameter) ;               /** Full Z-count Constructor.          * @param inFullZcount the Full 29-bit GPS Z-count to use in           *  this object. (default=0 => week == 0; Z-count == 0)          * @throws gpstk::InvalidParameter if either inFullZcount is          *  an invalid value for a full Z-count.          */      GPSZcount(long inFullZcount = 0)          throw(gpstk::InvalidParameter) ;               /// Destructor.  Does nothing.      ~GPSZcount() throw() {}               /** Copy Constructor.          * @param right the GPSZcount object to copy          */      GPSZcount(const GPSZcount& right)         throw() ;               /// GPS week accessor      short getWeek() const throw()      { return week ; }               /// GPS Z-count accessor      long getZcount() const throw()      { return zcount ; }               /** Construct, from the data members, the Z-count which could have          *  been broadcast from an SV.          * @return a Full Z-count (3 MSB unused, next 10 bits = week,          *  19 LSB = Z-count)          */      long getFullZcount() const         throw()       { return (long(getWeek() & 0x3FF) << 19) + getZcount() ; }         /** Calculate the total number of Z-counts in this object.          * @return weeks * ZCOUNT_WEEK + zcount          */      double getTotalZcounts() const         throw()      { return double(getWeek()) * ZCOUNT_WEEK + getZcount() ; }         /** Set the GPS week.          * @param inWeek the new value for GPS Week.          * @return a reference to this object.          * @throws gpstk::InvalidParameter if inWeek is an invalid value          * for a GPS week.          */      GPSZcount& setWeek(short inWeek)          throw(gpstk::InvalidParameter) ;               /** Set the GPS Z-count.          * @param inZcount the new value for GPS Z-count.          * @return a reference to this object.          * @throws gpstk::InvalidParameter if inZcount is an invalid value          *  for a GPS Z-count.          */      GPSZcount& setZcount(long inZcount)         throw(gpstk::InvalidParameter) ;         /** Set the GPS Week and Z-count using the value broadcast from an SV.          * @param inZcount A full Z-count (3 MSB unused, next 10 bits = week,          *  19 LSB = Z-count)          * @throws gpstk::InvalidParameter if the extracted Z-count is           *  an invalid value for a GPS Z-count.          */      GPSZcount& setFullZcount(long inZcount)         throw(gpstk::InvalidParameter) ;               /** Add the given number of weeks to the current value.          * @param inWeeks the number of weeks to add to the current value.          * @return a reference to this object          * @throws gpstk::InvalidRequest if adding inWeeks would render          *  this object invalid.          */      GPSZcount& addWeeks(short inWeeks)         throw(gpstk::InvalidRequest) ;               /** Add the given number of Z-counts to the current value.          *  This may cause a roll-(over/under) of the Z-count and appropriate           *  modification of the week.          * @param inZcounts the number of Z-counts to add to the current           *  value.          * @return a reference to this object          * @throws gpstk::InvalidRequest if adding inZcounts would render          *  this object invalid.          */      GPSZcount& addZcounts(long inZcounts)         throw(gpstk::InvalidRequest) ;         /** Postfix Increment the Z-count in this object (x++).  This may also          * cause the roll-over of the Z-count and incrementing of the week.          * @return a GPSZcount with the value of this object before the           *  increment          * @throws gpstk::InvalidRequest if Z-count increment would render          *  this object invalid.          */      GPSZcount operator++(int)         throw(gpstk::InvalidRequest) ;         /** Prefix Increment the Z-count in this object (++x).  This may also           * cause the roll-over of the Z-count and incrementing of the week.          * @return a reference to this object.          * @throws gpstk::InvalidRequest if Z-count increment would render          *  this object invalid.          */      GPSZcount& operator++()          throw(gpstk::InvalidRequest) ;               /** Postfix Decrement the Z-count in this object (x--).  This may also          * cause the roll-under of the Z-count and decrementing of the week.          * @return a GPSZcount with the value of this object before the           *  decrement          * @throws gpstk::InvalidRequest if a Z-count decrement would render          *  this object invalid.          */      GPSZcount operator--(int)          throw(gpstk::InvalidRequest) ;         /** Prefix Decrement the Z-count in this object (--x).  This may also           * cause the roll-under of the Z-count and decrementing of the week.          * @return a reference to this object.          * @throws gpstk::InvalidRequest if a Z-count decrement would render          *  this object invalid.          */      GPSZcount& operator--()          throw(gpstk::InvalidRequest) ;               /** Add the given number of Z-counts to the current value.          *  This may cause a roll-(over/under) of the Z-count and appropriate           *  modification of the week.          * @param inZcounts the number of Z-counts to add to the current           *  value.          * @return a modified GPSZcount object          * @throws gpstk::InvalidRequest if adding inZcounts would render          *  this object invalid.          */      GPSZcount operator+(long inZcounts) const         throw(gpstk::InvalidRequest) ;               /** Subtract the given number of Z-counts from the current value.          *  This may cause a roll-(over/under) of the Z-count and appropriate           *  modification of the week.          * @param inZcounts the number of Z-counts to subtract from the           *  current value.          * @return a modified GPSZcount object          * @throws gpstk::InvalidRequest if subtracting inZcounts would          *  render this object invalid.          */      GPSZcount operator-(long inZcounts) const         throw(gpstk::InvalidRequest) ;         /** Compute the time differenct between this object and \a right.          * @param right the GPSZcount to subtract from this object          * @return the number of Z-counts between this object and \a right          * Note that this returns a double as opposed to a long. This is to          * avoid any overflow issues.          */      double operator-(const GPSZcount& right) const         throw() ;               /** Compute the remainder of the ztime          * @param right the number to           * @return z counts % \a right          */      long operator%(const long right) const         throw() ;         /** Add the given number of Z-counts to the current value.          *  This may cause a roll-(over/under) of the Z-count and appropriate           *  modification of the week.          * @param inZcounts the number of Z-counts to add to the current           *  value.          * @return a reference to this object          * @throws gpstk::InvalidRequest if adding inZcounts would render          *  this object invalid.          */      GPSZcount& operator+=(long inZcounts)         throw(gpstk::InvalidRequest) ;               /** Subtract the given number of Z-counts from the current value.          *  This may cause a roll-(over/under) of the Z-count and appropriate           *  modification of the week.          * @param inZcounts the number of Z-counts to subtract from the           *  current value.          * @return a reference to this object          * @throws gpstk::InvalidRequest if subtracting inZcounts would          *  render this object invalid.          */      GPSZcount& operator-=(long inZcounts)         throw(gpstk::InvalidRequest) ;               /// Assignment operator.      GPSZcount& operator=(const GPSZcount& right)          throw();               /// Comparison operator (less-than).      bool operator<(const GPSZcount& right) const         throw();         /// Comparison operator (greater-than).      bool operator>(const GPSZcount& right) const         throw();         /// Equality operator.      bool operator==(const GPSZcount& right) const         throw();         /// Inequality operator.      bool operator!=(const GPSZcount& right) const         throw();         /// Comparison operator (less-than or equal-to).      bool operator<=(const GPSZcount& right) const         throw();         /// Comparison operator (greater-than or equal-to).      bool operator>=(const GPSZcount& right) const         throw();         /// Convert this object to a string.      operator std::string() const         throw() ;         /**          * This is a test of whether or not this object and the  given          * GPSZcount object are within the same time-block.  Say you need to          * find out if the two GPSZcounts are:          * ... in the same day:     inZcountBlock == ZCOUNT_DAY          * ... or the same minute:  inZcountBlock == ZCOUNT_MINUTE   etc.          * For inZcountBlock < ZCOUNT_WEEK, blocks start at the beginning of          *  the week.          * For inZcountBlock >= ZCOUNT_WEEK, blocks start at the beginning of           *  GPS Week 0.          * inZcountOffset allows checking of times off of the usual boundaries          * i.e. in the same day where a day is defined as starting at noon          *  instead of at midnight, or in the same minute where a minute          *  starts at 23 seconds instead of zero.          * @param other the other GPSZcount object          * @param inZcountBlock the number of Z-counts in a time-block          * @param inZcountOffset the number of Z-counts to offset the           *  time-block (default = 0)          * @return whether this object and /a other are in the same time-block          */      bool inSameTimeBlock(const GPSZcount& other,                           unsigned long inZcountBlock,                           unsigned long inZcountOffset = 0)          throw();         /** Dump the contents of this object to the given output stream.          * @param out the output stream to write to          * @param level the level of verbosity to use (default=0)          */      void dump(std::ostream& out,                short level = 0) const         throw() ;         protected:      short week;    ///< GPS full week. (0 <= week)      long zcount;   ///< GPS Z-count.  (0 <= zcount <= 403199)         /** Check the validity of the given Z-count.          * @param z the Z-count to verify          * @return 0 if valid, negative if below zero,           *  positive if above 403199          */      static long validZcount(long z)         throw();         };         /** Stream output operator for GPSZcount objects.       * @param s stream to append formatted GPSZcount to.       * @param z GPSZcount to append to stream \c s.       * @return a reference to \c s.       */   std::ostream& operator<<(std::ostream& s,                            const gpstk::GPSZcount& z) ;      //@}} // namespace gpstk#endif // GPSTK_GPSZCOUNT_HPP

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -