common.h

00001 /*****************************************************************************
00002  * Author:   Valient Gough <vgough@pobox.com>
00003  *
00004  *****************************************************************************
00005  * Copyright (c) 2002-2004, Valient Gough
00006  *
00007  * This library is free software; you can distribute it and/or modify it under
00008  * the terms of the GNU Lesser General Public License (LGPL), as published by
00009  * the Free Software Foundation; either version 2.1 of the License, or (at your
00010  * option) any later version.
00011  *
00012  * This library is distributed in the hope that it will be useful, but WITHOUT
00013  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00014  * FITNESS FOR A PARTICULAR PURPOSE.  See the LGPL in the file COPYING for more
00015  * details.
00016  *
00017  */
00018 
00019 #ifndef _rlogconfig_incl_
00020 #define _rlogconfig_incl_
00021 
00027 /*
00028     Defined by configure if our compiler allows us to specify printf attributes
00029     on a function pointer..  Newer versions of GCC allow this, but older ones
00030     do not..
00031 */
00032 #define HAVE_PRINTF_FP 1
00033 
00034 /*
00035     Defined by configure if our compiler understands VARIADAC macros.
00036 */
00037 #define C99_VARIADAC_MACROS 1
00038 #define PREC99_VARIADAC_MACROS 1
00039 
00040 #define RLOG_TIME_TSC 1
00041 
00042 /*
00043     We use __printf__ attribute to allow gcc to inspect printf style arguments
00044     and give warnings if the rDebug(), rWarning(), etc macros are misused.
00045 
00046     We use __builtin_expect on GCC 2.96 and above to allow optimization of
00047     publication activation check.  We tell the compiler that the branch is
00048     unlikely to occur, allowing GCC to push unecessary code out of the main
00049     path.
00050 */
00051 #ifdef __GNUC__
00052 
00053 # define PRINTF(FMT,X) __attribute__ (( __format__ ( __printf__, FMT, X)))
00054 # define HAVE_PRINTF_ATTR 1
00055 
00056 # if !defined( __builtin_expect )
00057 #  define __builtin_expect(x,expected_value) (x)
00058 # endif
00059 
00060 # define   likely(x)  __builtin_expect((x),1)
00061 # define unlikely(x)  __builtin_expect((x),0)
00062 
00063 #else
00064 
00065 // Not using the gcc compiler, make the macros do nothing..  They are
00066 // documented as the last instance of the macros..
00067 
00075 # define PRINTF(FMT,X)
00076 # define HAVE_PRINTF_ATTR 0
00077 
00079 # define   likely(x)  (x)
00080 
00086 # define unlikely(x)  (x)
00087 
00088 #endif
00089 
00090 #if HAVE_PRINTF_FP
00091 # define PRINTF_FP(FMT,X) PRINTF(FMT,X)
00092 #else
00093 # define PRINTF_FP(FMT,X)
00094 #endif
00095 
00104 #ifndef RLOG_COMPONENT
00105 #  warning RLOG_COMPONENT not defined - setting to UNKNOWN
00106 #define RLOG_COMPONENT "[unknown]"
00107 #endif // RLOG_COMPONENT not defined
00108 
00109 // Use somewhat unique names (doesn't matter if they aren't as they are used in
00110 // a private context, so the compiler will make them unique if it must)
00111 #  define LOGID CONCAT(_rL_, __LINE__)
00112 
00113 #define RLOG_DECL
00114 
00115 #endif // _rlogconfig_incl_
00116 

Generated on Mon Nov 20 22:57:44 2006 for rlog by  doxygen 1.5.0