nsprpub/pr/include/prinrval.h

Fri, 16 Jan 2015 04:50:19 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Fri, 16 Jan 2015 04:50:19 +0100
branch
TOR_BUG_9701
changeset 13
44a2da4a2ab2
permissions
-rw-r--r--

Replace accessor implementation with direct member state manipulation, by
request https://trac.torproject.org/projects/tor/ticket/9701#comment:32

     1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this
     4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 /*
     7 ** File:		prinrval.h
     8 ** Description:	API to interval timing functions of NSPR.
     9 **
    10 **
    11 ** NSPR provides interval times that are independent of network time
    12 ** of day values. Interval times are (in theory) accurate regardless
    13 ** of host processing requirements and also very cheap to acquire. It
    14 ** is expected that getting an interval time while in a synchronized
    15 ** function (holding one's lock).
    16 **/
    18 #if !defined(prinrval_h)
    19 #define prinrval_h
    21 #include "prtypes.h"
    23 PR_BEGIN_EXTERN_C
    25 /**********************************************************************/
    26 /************************* TYPES AND CONSTANTS ************************/
    27 /**********************************************************************/
    29 typedef PRUint32 PRIntervalTime;
    31 /***********************************************************************
    32 ** DEFINES:     PR_INTERVAL_MIN
    33 **              PR_INTERVAL_MAX
    34 ** DESCRIPTION:
    35 **  These two constants define the range (in ticks / second) of the
    36 **  platform dependent type, PRIntervalTime. These constants bound both
    37 **  the period and the resolution of a PRIntervalTime. 
    38 ***********************************************************************/
    39 #define PR_INTERVAL_MIN 1000UL
    40 #define PR_INTERVAL_MAX 100000UL
    42 /***********************************************************************
    43 ** DEFINES:     PR_INTERVAL_NO_WAIT
    44 **              PR_INTERVAL_NO_TIMEOUT
    45 ** DESCRIPTION:
    46 **  Two reserved constants are defined in the PRIntervalTime namespace.
    47 **  They are used to indicate that the process should wait no time (return
    48 **  immediately) or wait forever (never time out), respectively.
    49 **  Note: PR_INTERVAL_NO_TIMEOUT passed as input to PR_Connect is 
    50 **  interpreted as use the OS's connect timeout.
    51 **  
    52 ***********************************************************************/
    53 #define PR_INTERVAL_NO_WAIT 0UL
    54 #define PR_INTERVAL_NO_TIMEOUT 0xffffffffUL
    56 /**********************************************************************/
    57 /****************************** FUNCTIONS *****************************/
    58 /**********************************************************************/
    60 /***********************************************************************
    61 ** FUNCTION:    PR_IntervalNow
    62 ** DESCRIPTION:
    63 **  Return the value of NSPR's free running interval timer. That timer
    64 **  can be used to establish epochs and determine intervals (be computing
    65 **  the difference between two times).
    66 ** INPUTS:      void
    67 ** OUTPUTS:     void
    68 ** RETURN:      PRIntervalTime
    69 **  
    70 ** SIDE EFFECTS:
    71 **  None
    72 ** RESTRICTIONS:
    73 **  The units of PRIntervalTime are platform dependent. They are chosen
    74 **  such that they are appropriate for the host OS, yet provide sufficient
    75 **  resolution and period to be useful to clients. 
    76 ** MEMORY:      N/A
    77 ** ALGORITHM:   Platform dependent
    78 ***********************************************************************/
    79 NSPR_API(PRIntervalTime) PR_IntervalNow(void);
    81 /***********************************************************************
    82 ** FUNCTION:    PR_TicksPerSecond
    83 ** DESCRIPTION:
    84 **  Return the number of ticks per second for PR_IntervalNow's clock.
    85 **  The value will be in the range [PR_INTERVAL_MIN..PR_INTERVAL_MAX].
    86 ** INPUTS:      void
    87 ** OUTPUTS:     void
    88 ** RETURN:      PRUint32
    89 **  
    90 ** SIDE EFFECTS:
    91 **  None
    92 ** RESTRICTIONS:
    93 **  None
    94 ** MEMORY:      N/A
    95 ** ALGORITHM:   N/A
    96 ***********************************************************************/
    97 NSPR_API(PRUint32) PR_TicksPerSecond(void);
    99 /***********************************************************************
   100 ** FUNCTION:    PR_SecondsToInterval
   101 **              PR_MillisecondsToInterval
   102 **              PR_MicrosecondsToInterval
   103 ** DESCRIPTION:
   104 **  Convert standard clock units to platform dependent intervals.
   105 ** INPUTS:      PRUint32
   106 ** OUTPUTS:     void
   107 ** RETURN:      PRIntervalTime
   108 **  
   109 ** SIDE EFFECTS:
   110 **  None
   111 ** RESTRICTIONS:
   112 **  Conversion may cause overflow, which is not reported.
   113 ** MEMORY:      N/A
   114 ** ALGORITHM:   N/A
   115 ***********************************************************************/
   116 NSPR_API(PRIntervalTime) PR_SecondsToInterval(PRUint32 seconds);
   117 NSPR_API(PRIntervalTime) PR_MillisecondsToInterval(PRUint32 milli);
   118 NSPR_API(PRIntervalTime) PR_MicrosecondsToInterval(PRUint32 micro);
   120 /***********************************************************************
   121 ** FUNCTION:    PR_IntervalToSeconds
   122 **              PR_IntervalToMilliseconds
   123 **              PR_IntervalToMicroseconds
   124 ** DESCRIPTION:
   125 **  Convert platform dependent intervals to standard clock units.
   126 ** INPUTS:      PRIntervalTime
   127 ** OUTPUTS:     void
   128 ** RETURN:      PRUint32
   129 **  
   130 ** SIDE EFFECTS:
   131 **  None
   132 ** RESTRICTIONS:
   133 **  Conversion may cause overflow, which is not reported.
   134 ** MEMORY:      N/A
   135 ** ALGORITHM:   N/A
   136 ***********************************************************************/
   137 NSPR_API(PRUint32) PR_IntervalToSeconds(PRIntervalTime ticks);
   138 NSPR_API(PRUint32) PR_IntervalToMilliseconds(PRIntervalTime ticks);
   139 NSPR_API(PRUint32) PR_IntervalToMicroseconds(PRIntervalTime ticks);
   141 PR_END_EXTERN_C
   144 #endif /* !defined(prinrval_h) */
   146 /* prinrval.h */

mercurial