timeint.h
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:13k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * timeint.h
  3.  *
  4.  * Millisecond resolution time interval class (uses 64 bit integers).
  5.  *
  6.  * Portable Windows Library
  7.  *
  8.  * Copyright (c) 1993-1998 Equivalence Pty. Ltd.
  9.  *
  10.  * The contents of this file are subject to the Mozilla Public License
  11.  * Version 1.0 (the "License"); you may not use this file except in
  12.  * compliance with the License. You may obtain a copy of the License at
  13.  * http://www.mozilla.org/MPL/
  14.  *
  15.  * Software distributed under the License is distributed on an "AS IS"
  16.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17.  * the License for the specific language governing rights and limitations
  18.  * under the License.
  19.  *
  20.  * The Original Code is Portable Windows Library.
  21.  *
  22.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  23.  *
  24.  * Portions are Copyright (C) 1993 Free Software Foundation, Inc.
  25.  * All Rights Reserved.
  26.  *
  27.  * Contributor(s): ______________________________________.
  28.  *
  29.  * $Log: timeint.h,v $
  30.  * Revision 1.21  2000/03/06 04:09:23  robertj
  31.  * Added constructor to do PString conversion to PTimeInterval
  32.  *
  33.  * Revision 1.20  1999/07/06 04:46:00  robertj
  34.  * Fixed being able to case an unsigned to a PTimeInterval.
  35.  * Improved resolution of PTimer::Tick() to be millisecond accurate.
  36.  *
  37.  * Revision 1.19  1999/03/09 02:59:51  robertj
  38.  * Changed comments to doc++ compatible documentation.
  39.  *
  40.  * Revision 1.18  1999/02/16 08:11:17  robertj
  41.  * MSVC 6.0 compatibility changes.
  42.  *
  43.  * Revision 1.17  1998/09/23 06:21:43  robertj
  44.  * Added open source copyright license.
  45.  *
  46.  * Revision 1.16  1998/01/26 00:49:53  robertj
  47.  * Added multiply and divide operators to PTimeInterval.
  48.  *
  49.  * Revision 1.15  1996/05/15 10:19:29  robertj
  50.  * Changed millisecond access functions to get 64 bit integer.
  51.  *
  52.  * Revision 1.14  1996/05/09 12:22:09  robertj
  53.  * Resolved C++ problems with 64 bit PTimeInterval for Mac platform.
  54.  *
  55.  * Revision 1.13  1996/03/17 05:52:02  robertj
  56.  * Changed PTimeInterval to 64 bit integer.
  57.  *
  58.  * Revision 1.12  1995/03/14 12:42:50  robertj
  59.  * Updated documentation to use HTML codes.
  60.  *
  61.  * Revision 1.11  1995/01/18  09:01:32  robertj
  62.  * Documentation.
  63.  *
  64.  * Revision 1.10  1995/01/09  12:29:41  robertj
  65.  * Removed unnecesary return value from I/O functions.
  66.  *
  67.  * Revision 1.9  1994/08/23  11:32:52  robertj
  68.  * Oops
  69.  *
  70.  * Revision 1.8  1994/08/22  00:46:48  robertj
  71.  * Added pragma fro GNU C++ compiler.
  72.  *
  73.  * Revision 1.7  1994/07/02  03:03:49  robertj
  74.  * Timer redesign consequences and ability to compare a time interval against
  75.  * ordinary integer milliseconds.
  76.  *
  77.  * Revision 1.6  1994/06/25  11:55:15  robertj
  78.  * Unix version synchronisation.
  79.  *
  80.  * Revision 1.5  1994/01/03  04:42:23  robertj
  81.  * Mass changes to common container classes and interactors etc etc etc.
  82.  *
  83.  * Revision 1.4  1993/08/31  03:38:02  robertj
  84.  * Added copy constructor and assignement oeprator due to G++ strangeness.
  85.  *
  86.  * Revision 1.3  1993/08/27  18:17:47  robertj
  87.  * Added function to set the interval of a PTieInterval object.
  88.  * Used a common type for number of milliseconds.
  89.  *
  90.  * Revision 1.2  1993/07/14  12:49:16  robertj
  91.  * Fixed RCS keywords.
  92.  *
  93.  */
  94. #define _PTIMEINTERVAL
  95. #ifdef __GNUC__
  96. #pragma interface
  97. #endif
  98. ///////////////////////////////////////////////////////////////////////////////
  99. // Difference between two system times
  100. /** This class defines an arbitrary time interval to millisecond accuracy. The
  101.    interval can be both positive and negative.
  102.    
  103.    A long int is used to store the time interval so it is limited to LONG_MAX
  104.    (found in the standard C header file limits.h) milliseconds. This is
  105.    approximately 596 hours for 32 bit integers.
  106.    
  107.    There is a constant, #PMaxTimeInterval# which defines the
  108.    maximum number of milliseconds that a time interval may be.
  109.  */
  110. class PTimeInterval : public PObject
  111. {
  112.   PCLASSINFO(PTimeInterval, PObject);
  113.   public:
  114.   /**@name Construction */
  115.   //@{
  116.     /** Create a new time interval object. The time interval, in milliseconds,
  117.        is the sum of all of the parameters. For example all of the following
  118.        are equivalent:
  119. begin{verbatim}
  120.               PTimeInterval(120000)
  121.               PTimeInterval(60000, 60)
  122.               PTimeInterval(60000, 0, 1)
  123.               PTimeInterval(0, 60, 1)
  124.               PTimeInterval(0, 0, 2)
  125. end{verbatim}
  126.      */
  127.     PTimeInterval(
  128.       int milliseconds = 0  /// Number of milliseconds for interval.
  129.     );
  130.     PTimeInterval(
  131.       unsigned millisecs    /// Number of milliseconds for interval.
  132.     );
  133.     PTimeInterval(
  134.       PInt64 mseconds       /// Number of milliseconds for interval.
  135.     );
  136.     PTimeInterval(
  137.       long millisecs,       /// Number of milliseconds for interval.
  138.       long seconds = 0,     /// Number of seconds for interval.
  139.       long minutes = 0,     /// Number of minutes for interval.
  140.       long hours = 0,       /// Number of hours for interval.
  141.       int days = 0          /// Number of days for interval.
  142.     );
  143.     PTimeInterval(
  144.       const PString & str   /// String representation of time interval.
  145.     );
  146.   //@}
  147.   /**@name Overrides from class PObject */
  148.   //@{
  149.     /** Create a new copy of the time interval. It is the responsibility of the
  150.        called to delete the object.
  151.        
  152.        @return
  153.        new time interval on heap.
  154.      */
  155.     PObject * Clone() const;
  156.     /** Rank the two time intervals. This ranks the intervals as you would
  157.        expect for two integers.
  158.        
  159.        @return
  160.        #EqualTo#, #LessThan# or #GreaterThan#
  161.        depending on their relative rank.
  162.      */
  163.     virtual Comparison Compare(
  164.       const PObject & obj   /// Time interval to compare against.
  165.     ) const;
  166.     /** Output the time interval to the I/O stream. This outputs the number of
  167.        milliseconds as a signed decimal integer number.
  168.      */
  169.     virtual void PrintOn(
  170.       ostream & strm    /// I/O stream to output the time interval.
  171.     ) const;
  172.     /** Input the time interval from the I/O stream. This expects the input
  173.        to be a signed decimal integer number.
  174.      */
  175.     virtual void ReadFrom(
  176.       istream & strm    /// I/O stream to input the time interval from.
  177.     );
  178.   //@}
  179.   /**@name Access functions */
  180.   //@{
  181.     /** Get the number of milliseconds for the time interval.
  182.     
  183.        @return
  184.        very long integer number of milliseconds.
  185.      */
  186.     PInt64 GetMilliSeconds() const;
  187.     /** Get the number of whole seconds for the time interval.
  188.     
  189.        @return
  190.        long integer number of seconds.
  191.      */
  192.     long GetSeconds() const;
  193.     /** Get the number of whole minutes for the time interval.
  194.     
  195.        @return
  196.        integer number of minutes.
  197.      */
  198.     long GetMinutes() const;
  199.     /** Get the number of whole hours for the time interval.
  200.     
  201.        @return
  202.        integer number of hours.
  203.      */
  204.     int GetHours() const;
  205.     /** Get the number of whole days for the time interval.
  206.     
  207.        @return
  208.        integer number of days.
  209.      */
  210.     int GetDays() const;
  211.     /** Get the number of milliseconds for the time interval.
  212.     
  213.        @return
  214.        long integer number of milliseconds.
  215.      */
  216.     DWORD GetInterval() const;
  217.     /** Set the value of the time interval. The time interval, in milliseconds,
  218.        is the sum of all of the parameters. For example all of the following
  219.        are equivalent:
  220. begin{verbatim}
  221.               SetInterval(120000)
  222.               SetInterval(60000, 60)
  223.               SetInterval(60000, 0, 1)
  224.               SetInterval(0, 60, 1)
  225.               SetInterval(0, 0, 2)
  226. end{verbatim}
  227.      */
  228.     void SetInterval(
  229.       PInt64 milliseconds = 0,  /// Number of milliseconds for interval.
  230.       long seconds = 0,         /// Number of seconds for interval.
  231.       long minutes = 0,         /// Number of minutes for interval.
  232.       long hours = 0,           /// Number of hours for interval.
  233.       int days = 0              /// Number of days for interval.
  234.     );
  235.   //@}
  236.   /**@name Operations */
  237.   //@{
  238.     /** Add the two time intervals yielding a third time interval.
  239.     
  240.        @return
  241.        sum of the time intervals.
  242.      */
  243.     PTimeInterval operator+(
  244.       const PTimeInterval & interval   /// Time interval to add.
  245.     ) const;
  246.     /** Add the second time interval to the first time interval.
  247.     
  248.        @return
  249.        reference to first time interval.
  250.      */
  251.     PTimeInterval & operator+=(
  252.       const PTimeInterval & interval   /// Time interval to add.
  253.     );
  254.     /** Subtract the two time intervals yielding a third time interval.
  255.     
  256.        @return
  257.        difference of the time intervals.
  258.      */
  259.     PTimeInterval operator-(
  260.       const PTimeInterval & interval   /// Time interval to subtract.
  261.     ) const;
  262.     /** Subtract the second time interval from the first time interval.
  263.     
  264.        @return
  265.        reference to first time interval.
  266.      */
  267.     PTimeInterval & operator-=(
  268.       const PTimeInterval & interval   /// Time interval to subtract.
  269.     );
  270.     /** Multiply the time interval by a factor yielding a third time interval.
  271.     
  272.        @return
  273.        the time intervals times the factor.
  274.      */
  275.     PTimeInterval operator*(
  276.       int factor   /// factor to multiply.
  277.     ) const;
  278.     /** Multiply the time interval by a factor.
  279.     
  280.        @return
  281.        reference to time interval.
  282.      */
  283.     PTimeInterval & operator*=(
  284.       int factor   /// factor to multiply.
  285.     );
  286.     /** Divide the time interval by a factor yielding a third time interval.
  287.     
  288.        @return
  289.        the time intervals divided by the factor.
  290.      */
  291.     PTimeInterval operator/(
  292.       int factor   /// factor to divide.
  293.     ) const;
  294.     /** Divide the time interval by a factor.
  295.     
  296.        @return
  297.        reference to time interval.
  298.      */
  299.     PTimeInterval & operator/=(
  300.       int factor   /// factor to divide.
  301.     );
  302.   //@}
  303.   /**@name Comparison functions */
  304.   //@{
  305.     /** Compare to the two time intervals. This is provided as an override to
  306.        the default in PObject so that comparisons can be made to integer
  307.        literals that represent milliseconds.
  308.        @return
  309.        TRUE if intervals are equal.
  310.      */
  311.     BOOL operator==(
  312.       const PTimeInterval & interval   /// Time interval to compare.
  313.     ) const;
  314.     BOOL operator==(
  315.       long msecs    /// Time interval as integer milliseconds to compare.
  316.     ) const;
  317.     /** Compare to the two time intervals. This is provided as an override to
  318.        the default in PObject so that comparisons can be made to integer
  319.        literals that represent milliseconds.
  320.        @return
  321.        TRUE if intervals are not equal.
  322.      */
  323.     BOOL operator!=(
  324.       const PTimeInterval & interval   /// Time interval to compare.
  325.     ) const;
  326.     BOOL operator!=(
  327.       long msecs    /// Time interval as integer milliseconds to compare.
  328.     ) const;
  329.     /** Compare to the two time intervals. This is provided as an override to
  330.        the default in PObject so that comparisons can be made to integer
  331.        literals that represent milliseconds.
  332.        @return
  333.        TRUE if intervals are greater than.
  334.      */
  335.     BOOL operator> (
  336.       const PTimeInterval & interval   /// Time interval to compare.
  337.     ) const;
  338.     BOOL operator> (
  339.       long msecs    /// Time interval as integer milliseconds to compare.
  340.     ) const;
  341.     /** Compare to the two time intervals. This is provided as an override to
  342.        the default in PObject so that comparisons can be made to integer
  343.        literals that represent milliseconds.
  344.        @return
  345.        TRUE if intervals are greater than or equal.
  346.      */
  347.     BOOL operator>=(
  348.       const PTimeInterval & interval   /// Time interval to compare.
  349.     ) const;
  350.     BOOL operator>=(
  351.       long msecs    /// Time interval as integer milliseconds to compare.
  352.     ) const;
  353.     /** Compare to the two time intervals. This is provided as an override to
  354.        the default in PObject so that comparisons can be made to integer
  355.        literals that represent milliseconds.
  356.        @return
  357.        TRUE if intervals are less than.
  358.      */
  359.     BOOL operator< (
  360.       const PTimeInterval & interval   /// Time interval to compare.
  361.     ) const;
  362.     BOOL operator< (
  363.       long msecs    /// Time interval as integer milliseconds to compare.
  364.     ) const;
  365.     /** Compare to the two time intervals. This is provided as an override to
  366.        the default in PObject so that comparisons can be made to integer
  367.        literals that represent milliseconds.
  368.        @return
  369.        TRUE if intervals are less than or equal.
  370.      */
  371.     BOOL operator<=(
  372.       const PTimeInterval & interval   /// Time interval to compare.
  373.     ) const;
  374.     BOOL operator<=(
  375.       long msecs    /// Time interval as integer milliseconds to compare.
  376.     ) const;
  377.   //@}
  378.   protected:
  379.   // Member variables
  380.     /// Number of milliseconds in time interval.
  381.     PInt64 milliseconds;
  382. #ifdef DOC_PLUS_PLUS
  383. };
  384. #endif
  385. // Class declaration continued in platform specific header file ///////////////