"Fossies" - the Fresh Open Source Software Archive

Member "apr-1.7.0/include/apr_time.h" (5 Mar 2016, 7563 Bytes) of package /linux/www/apr-1.7.0.tar.bz2:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "apr_time.h" see the Fossies "Dox" file reference documentation and the latest Fossies "Diffs" side-by-side code changes report: 1.6.5_vs_1.7.0.

    1 /* Licensed to the Apache Software Foundation (ASF) under one or more
    2  * contributor license agreements.  See the NOTICE file distributed with
    3  * this work for additional information regarding copyright ownership.
    4  * The ASF licenses this file to You under the Apache License, Version 2.0
    5  * (the "License"); you may not use this file except in compliance with
    6  * the License.  You may obtain a copy of the License at
    7  *
    8  *     http://www.apache.org/licenses/LICENSE-2.0
    9  *
   10  * Unless required by applicable law or agreed to in writing, software
   11  * distributed under the License is distributed on an "AS IS" BASIS,
   12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   13  * See the License for the specific language governing permissions and
   14  * limitations under the License.
   15  */
   16 
   17 #ifndef APR_TIME_H
   18 #define APR_TIME_H
   19 
   20 /**
   21  * @file apr_time.h
   22  * @brief APR Time Library
   23  */
   24 
   25 #include "apr.h"
   26 #include "apr_errno.h"
   27 
   28 #ifdef __cplusplus
   29 extern "C" {
   30 #endif /* __cplusplus */
   31 
   32 /**
   33  * @defgroup apr_time Time Routines
   34  * @ingroup APR 
   35  * @{
   36  */
   37 
   38 /** month names */
   39 APR_DECLARE_DATA extern const char apr_month_snames[12][4];
   40 /** day names */
   41 APR_DECLARE_DATA extern const char apr_day_snames[7][4];
   42 
   43 
   44 /** number of microseconds since 00:00:00 January 1, 1970 UTC */
   45 typedef apr_int64_t apr_time_t;
   46 
   47 
   48 /** mechanism to properly type apr_time_t literals */
   49 #define APR_TIME_C(val) APR_INT64_C(val)
   50 
   51 /** mechanism to properly print apr_time_t values */
   52 #define APR_TIME_T_FMT APR_INT64_T_FMT
   53 
   54 /** intervals for I/O timeouts, in microseconds */
   55 typedef apr_int64_t apr_interval_time_t;
   56 /** short interval for I/O timeouts, in microseconds */
   57 typedef apr_int32_t apr_short_interval_time_t;
   58 
   59 /** number of microseconds per second */
   60 #define APR_USEC_PER_SEC APR_TIME_C(1000000)
   61 
   62 /** @return apr_time_t as a second */
   63 #define apr_time_sec(time) ((time) / APR_USEC_PER_SEC)
   64 
   65 /** @return apr_time_t as a usec */
   66 #define apr_time_usec(time) ((time) % APR_USEC_PER_SEC)
   67 
   68 /** @return apr_time_t as a msec */
   69 #define apr_time_msec(time) (((time) / 1000) % 1000)
   70 
   71 /** @return apr_time_t as a msec */
   72 #define apr_time_as_msec(time) ((time) / 1000)
   73 
   74 /** @return milliseconds as an apr_time_t */
   75 #define apr_time_from_msec(msec) ((apr_time_t)(msec) * 1000)
   76 
   77 /** @return seconds as an apr_time_t */
   78 #define apr_time_from_sec(sec) ((apr_time_t)(sec) * APR_USEC_PER_SEC)
   79 
   80 /** @return a second and usec combination as an apr_time_t */
   81 #define apr_time_make(sec, usec) ((apr_time_t)(sec) * APR_USEC_PER_SEC \
   82                                 + (apr_time_t)(usec))
   83 
   84 /**
   85  * @return the current time
   86  */
   87 APR_DECLARE(apr_time_t) apr_time_now(void);
   88 
   89 /** @see apr_time_exp_t */
   90 typedef struct apr_time_exp_t apr_time_exp_t;
   91 
   92 /**
   93  * a structure similar to ANSI struct tm with the following differences:
   94  *  - tm_usec isn't an ANSI field
   95  *  - tm_gmtoff isn't an ANSI field (it's a BSDism)
   96  */
   97 struct apr_time_exp_t {
   98     /** microseconds past tm_sec */
   99     apr_int32_t tm_usec;
  100     /** (0-61) seconds past tm_min */
  101     apr_int32_t tm_sec;
  102     /** (0-59) minutes past tm_hour */
  103     apr_int32_t tm_min;
  104     /** (0-23) hours past midnight */
  105     apr_int32_t tm_hour;
  106     /** (1-31) day of the month */
  107     apr_int32_t tm_mday;
  108     /** (0-11) month of the year */
  109     apr_int32_t tm_mon;
  110     /** year since 1900 */
  111     apr_int32_t tm_year;
  112     /** (0-6) days since Sunday */
  113     apr_int32_t tm_wday;
  114     /** (0-365) days since January 1 */
  115     apr_int32_t tm_yday;
  116     /** daylight saving time */
  117     apr_int32_t tm_isdst;
  118     /** seconds east of UTC */
  119     apr_int32_t tm_gmtoff;
  120 };
  121 
  122 /* Delayed the include to avoid a circular reference */
  123 #include "apr_pools.h"
  124 
  125 /**
  126  * Convert an ansi time_t to an apr_time_t
  127  * @param result the resulting apr_time_t
  128  * @param input the time_t to convert
  129  */
  130 APR_DECLARE(apr_status_t) apr_time_ansi_put(apr_time_t *result, 
  131                                                     time_t input);
  132 
  133 /**
  134  * Convert a time to its human readable components using an offset
  135  * from GMT.
  136  * @param result the exploded time
  137  * @param input the time to explode
  138  * @param offs the number of seconds offset to apply
  139  */
  140 APR_DECLARE(apr_status_t) apr_time_exp_tz(apr_time_exp_t *result,
  141                                           apr_time_t input,
  142                                           apr_int32_t offs);
  143 
  144 /**
  145  * Convert a time to its human readable components (GMT).
  146  * @param result the exploded time
  147  * @param input the time to explode
  148  */
  149 APR_DECLARE(apr_status_t) apr_time_exp_gmt(apr_time_exp_t *result, 
  150                                            apr_time_t input);
  151 
  152 /**
  153  * Convert a time to its human readable components in the local timezone.
  154  * @param result the exploded time
  155  * @param input the time to explode
  156  */
  157 APR_DECLARE(apr_status_t) apr_time_exp_lt(apr_time_exp_t *result, 
  158                                           apr_time_t input);
  159 
  160 /**
  161  * Convert time value from human readable format to a numeric apr_time_t
  162  * (elapsed microseconds since the epoch).
  163  * @param result the resulting imploded time
  164  * @param input the input exploded time
  165  */
  166 APR_DECLARE(apr_status_t) apr_time_exp_get(apr_time_t *result, 
  167                                            apr_time_exp_t *input);
  168 
  169 /**
  170  * Convert time value from human readable format to a numeric apr_time_t that
  171  * always represents GMT.
  172  * @param result the resulting imploded time
  173  * @param input the input exploded time
  174  */
  175 APR_DECLARE(apr_status_t) apr_time_exp_gmt_get(apr_time_t *result, 
  176                                                apr_time_exp_t *input);
  177 
  178 /**
  179  * Sleep for the specified number of micro-seconds.
  180  * @param t desired amount of time to sleep.
  181  * @warning May sleep for longer than the specified time. 
  182  */
  183 APR_DECLARE(void) apr_sleep(apr_interval_time_t t);
  184 
  185 /** length of a RFC822 Date */
  186 #define APR_RFC822_DATE_LEN (30)
  187 /**
  188  * apr_rfc822_date formats dates in the RFC822
  189  * format in an efficient manner.  It is a fixed length
  190  * format which requires APR_RFC822_DATA_LEN bytes of storage,
  191  * including the trailing NUL terminator.
  192  * @param date_str String to write to.
  193  * @param t the time to convert 
  194  */
  195 APR_DECLARE(apr_status_t) apr_rfc822_date(char *date_str, apr_time_t t);
  196 
  197 /** length of a CTIME date */
  198 #define APR_CTIME_LEN (25)
  199 /**
  200  * apr_ctime formats dates in the ctime() format
  201  * in an efficient manner.  It is a fixed length format
  202  * and requires APR_CTIME_LEN bytes of storage including
  203  * the trailing NUL terminator.
  204  * Unlike ANSI/ISO C ctime(), apr_ctime() does not include
  205  * a \\n at the end of the string.
  206  * @param date_str String to write to.
  207  * @param t the time to convert 
  208  */
  209 APR_DECLARE(apr_status_t) apr_ctime(char *date_str, apr_time_t t);
  210 
  211 /**
  212  * Formats the exploded time according to the format specified
  213  * @param s string to write to
  214  * @param retsize The length of the returned string
  215  * @param max The maximum length of the string
  216  * @param format The format for the time string
  217  * @param tm The time to convert
  218  */
  219 APR_DECLARE(apr_status_t) apr_strftime(char *s, apr_size_t *retsize, 
  220                                        apr_size_t max, const char *format, 
  221                                        apr_time_exp_t *tm);
  222 
  223 /**
  224  * Improve the clock resolution for the lifetime of the given pool.
  225  * Generally this is only desirable on benchmarking and other very
  226  * time-sensitive applications, and has no impact on most platforms.
  227  * @param p The pool to associate the finer clock resolution 
  228  */
  229 APR_DECLARE(void) apr_time_clock_hires(apr_pool_t *p);
  230 
  231 /** @} */
  232 
  233 #ifdef __cplusplus
  234 }
  235 #endif
  236 
  237 #endif  /* ! APR_TIME_H */