Mercurial > hg > octave-lyh > gnulib-hg
changeset 17176:fe213f3f2c57
gethrxtime: better 'inline'
* lib/xtime.c: New file.
* lib/gethrxtime.c, lib/gethrxtime.h (GETHRXTIME_INLINE):
* lib/xtime.h (XTIME_INCLUDE):
New macros. Replace all uses of 'static inline' with them.
* lib/gethrxtime.c (gethrxtime): Define only if
! (HAVE_ARITHMETIC_HRTIME_T && HAVE_DECL_GETHRTIME), since
this source file is now always compiled, because of the extern inline.
* lib/gethrxtime.h, lib/xtime.h:
Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END.
* m4/gethrxtime.m4 (gl_GETHRXTIME): Do not check for clock macros
if gethrtime works, as they're not needed in that case.
(gl_XTIME): Do not require AC_C_INLINE.
(gl_PREREQ_GETHRXTIME): Remove; all uses removed, as it's always
compiled now. Move the check into gl_GETHRXTIME.
* modules/gethrxtime (Files, lib_SOURCES): Add lib/xtime.c.
(Depends-on): Add extern-inline.
(configure.ac): gethrxtime is always compiled now.
(lib_SOURCES): Add gethrxtime.c.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Tue, 20 Nov 2012 22:25:07 -0800 |
parents | 3aff72f6c8ba |
children | 902795f52835 |
files | ChangeLog lib/gethrxtime.c lib/gethrxtime.h lib/xtime.c lib/xtime.h m4/gethrxtime.m4 modules/gethrxtime |
diffstat | 7 files changed, 76 insertions(+), 43 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,25 @@ 2012-11-29 Paul Eggert <eggert@cs.ucla.edu> + gethrxtime: better 'inline' + * lib/xtime.c: New file. + * lib/gethrxtime.c, lib/gethrxtime.h (GETHRXTIME_INLINE): + * lib/xtime.h (XTIME_INCLUDE): + New macros. Replace all uses of 'static inline' with them. + * lib/gethrxtime.c (gethrxtime): Define only if + ! (HAVE_ARITHMETIC_HRTIME_T && HAVE_DECL_GETHRTIME), since + this source file is now always compiled, because of the extern inline. + * lib/gethrxtime.h, lib/xtime.h: + Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. + * m4/gethrxtime.m4 (gl_GETHRXTIME): Do not check for clock macros + if gethrtime works, as they're not needed in that case. + (gl_XTIME): Do not require AC_C_INLINE. + (gl_PREREQ_GETHRXTIME): Remove; all uses removed, as it's always + compiled now. Move the check into gl_GETHRXTIME. + * modules/gethrxtime (Files, lib_SOURCES): Add lib/xtime.c. + (Depends-on): Add extern-inline. + (configure.ac): gethrxtime is always compiled now. + (lib_SOURCES): Add gethrxtime.c. + wctype-h: better 'inline' * lib/wctype-h.c: New file. * lib/wctype.in.h (_GL_WCTYPE_INLINE):
--- a/lib/gethrxtime.c +++ b/lib/gethrxtime.c @@ -19,8 +19,11 @@ #include <config.h> +#define GETHRXTIME_INLINE _GL_EXTERN_INLINE #include "gethrxtime.h" +#if ! (HAVE_ARITHMETIC_HRTIME_T && HAVE_DECL_GETHRTIME) + #include <sys/time.h> #include "timespec.h" @@ -32,30 +35,30 @@ xtime_t gethrxtime (void) { -#if HAVE_NANOUPTIME +# if HAVE_NANOUPTIME { struct timespec ts; nanouptime (&ts); return xtime_make (ts.tv_sec, ts.tv_nsec); } -#else +# else -# if defined CLOCK_MONOTONIC && HAVE_CLOCK_GETTIME +# if defined CLOCK_MONOTONIC && HAVE_CLOCK_GETTIME { struct timespec ts; if (clock_gettime (CLOCK_MONOTONIC, &ts) == 0) return xtime_make (ts.tv_sec, ts.tv_nsec); } -# endif +# endif -# if HAVE_MICROUPTIME +# if HAVE_MICROUPTIME { struct timeval tv; microuptime (&tv); return xtime_make (tv.tv_sec, 1000 * tv.tv_usec); } -# else +# else /* No monotonically increasing clocks are available; fall back on a clock that might jump backwards, since it's the best we can do. */ { @@ -63,6 +66,8 @@ gettime (&ts); return xtime_make (ts.tv_sec, ts.tv_nsec); } +# endif # endif +} + #endif -}
--- a/lib/gethrxtime.h +++ b/lib/gethrxtime.h @@ -18,9 +18,14 @@ /* Written by Paul Eggert. */ #ifndef GETHRXTIME_H_ -# define GETHRXTIME_H_ 1 +#define GETHRXTIME_H_ 1 + +#include "xtime.h" -# include "xtime.h" +_GL_INLINE_HEADER_BEGIN +#ifndef GETHRXTIME_INLINE +# define GETHRXTIME_INLINE _GL_INLINE +#endif #ifdef __cplusplus extern "C" { @@ -31,12 +36,14 @@ high-resolution clock that is not subject to resetting or drifting. */ -# if HAVE_ARITHMETIC_HRTIME_T && HAVE_DECL_GETHRTIME -# include <time.h> -static inline xtime_t gethrxtime (void) { return gethrtime (); } +#if HAVE_ARITHMETIC_HRTIME_T && HAVE_DECL_GETHRTIME +# include <time.h> +GETHRXTIME_INLINE xtime_t gethrxtime (void) { return gethrtime (); } # else xtime_t gethrxtime (void); -# endif +#endif + +_GL_INLINE_HEADER_END #ifdef __cplusplus }
new file mode 100644 --- /dev/null +++ b/lib/xtime.c @@ -0,0 +1,3 @@ +#include <config.h> +#define XTIME_INLINE _GL_EXTERN_INLINE +#include "xtime.h"
--- a/lib/xtime.h +++ b/lib/xtime.h @@ -18,24 +18,29 @@ /* Written by Paul Eggert. */ #ifndef XTIME_H_ -# define XTIME_H_ 1 +#define XTIME_H_ 1 + +_GL_INLINE_HEADER_BEGIN +#ifndef XTIME_INLINE +# define XTIME_INLINE _GL_INLINE +#endif /* xtime_t is a signed type used for time stamps. It is an integer type that is a count of nanoseconds -- except for obsolescent hosts without sufficiently-wide integers, where it is a count of seconds. */ -# if HAVE_LONG_LONG_INT +#if HAVE_LONG_LONG_INT typedef long long int xtime_t; -# define XTIME_PRECISION 1000000000 -# else -# include <limits.h> +# define XTIME_PRECISION 1000000000 +#else +# include <limits.h> typedef long int xtime_t; -# if LONG_MAX >> 31 >> 31 == 0 -# define XTIME_PRECISION 1 -# else -# define XTIME_PRECISION 1000000000 -# endif +# if LONG_MAX >> 31 >> 31 == 0 +# define XTIME_PRECISION 1 +# else +# define XTIME_PRECISION 1000000000 # endif +#endif #ifdef __cplusplus extern "C" { @@ -43,7 +48,7 @@ /* Return an extended time value that contains S seconds and NS nanoseconds, without any overflow checking. */ -static inline xtime_t +XTIME_INLINE xtime_t xtime_make (xtime_t s, long int ns) { if (XTIME_PRECISION == 1) @@ -53,14 +58,14 @@ } /* Return the number of seconds in T, which must be nonnegative. */ -static inline xtime_t +XTIME_INLINE xtime_t xtime_nonnegative_sec (xtime_t t) { return t / XTIME_PRECISION; } /* Return the number of seconds in T. */ -static inline xtime_t +XTIME_INLINE xtime_t xtime_sec (xtime_t t) { return (XTIME_PRECISION == 1 @@ -71,14 +76,14 @@ } /* Return the number of nanoseconds in T, which must be nonnegative. */ -static inline long int +XTIME_INLINE long int xtime_nonnegative_nsec (xtime_t t) { return t % XTIME_PRECISION; } /* Return the number of nanoseconds in T. */ -static inline long int +XTIME_INLINE long int xtime_nsec (xtime_t t) { long int ns = t % XTIME_PRECISION;
--- a/m4/gethrxtime.m4 +++ b/m4/gethrxtime.m4 @@ -1,4 +1,4 @@ -# gethrxtime.m4 serial 11 +# gethrxtime.m4 serial 12 dnl Copyright (C) 2005-2006, 2008-2012 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -18,8 +18,10 @@ dnl Find libraries needed to link lib/gethrxtime.c. AC_REQUIRE([gl_CLOCK_TIME]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) - AC_CHECK_FUNCS_ONCE([nanouptime]) - if test $ac_cv_func_nanouptime != yes; then + AC_CHECK_FUNCS_ONCE([microuptime nanouptime]) + if test $ac_cv_func_nanouptime != yes \ + && { test $ac_cv_have_decl_gethrtime = no \ + || test $gl_cv_arithmetic_hrtime_t = no; }; then AC_CACHE_CHECK([whether CLOCK_MONOTONIC or CLOCK_REALTIME is defined], [gl_cv_have_clock_gettime_macro], [AC_EGREP_CPP([have_clock_gettime_macro], @@ -60,14 +62,6 @@ # Prerequisites of lib/xtime.h. AC_DEFUN([gl_XTIME], [ - AC_REQUIRE([AC_C_INLINE]) AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) : ]) - -# Prerequisites of lib/gethrxtime.c. -AC_DEFUN([gl_PREREQ_GETHRXTIME], -[ - AC_CHECK_FUNCS_ONCE([microuptime]) - : -])
--- a/modules/gethrxtime +++ b/modules/gethrxtime @@ -3,6 +3,7 @@ Files: lib/xtime.h +lib/xtime.c lib/gethrxtime.c lib/gethrxtime.h m4/gethrxtime.m4 @@ -11,17 +12,15 @@ Depends-on: clock-time extensions +extern-inline gettime sys_time configure.ac: gl_GETHRXTIME -if test $ac_cv_have_decl_gethrtime = no || test $gl_cv_arithmetic_hrtime_t = no; then - AC_LIBOBJ([gethrxtime]) - gl_PREREQ_GETHRXTIME -fi Makefile.am: +lib_SOURCES += gethrxtime.c xtime.c Include: "xtime.h"