summaryrefslogtreecommitdiffstats
path: root/libdimension/dimension.h
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@gmail.com>2009-06-30 15:53:41 +0000
committerTavian Barnes <tavianator@gmail.com>2009-06-30 15:53:41 +0000
commit5dcc62e9f198094e3fd49be1847871853c1449bc (patch)
treeb8efb924424c0160e77782ce40e8ddb6c85c9e2f /libdimension/dimension.h
parenta50808b77e7b7f9c5239d6416bb8cb9741794670 (diff)
downloaddimension-5dcc62e9f198094e3fd49be1847871853c1449bc.tar.xz
New inline function framework.
Diffstat (limited to 'libdimension/dimension.h')
-rw-r--r--libdimension/dimension.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/libdimension/dimension.h b/libdimension/dimension.h
index 3e1bcf9..4157f8b 100644
--- a/libdimension/dimension.h
+++ b/libdimension/dimension.h
@@ -25,6 +25,27 @@
#ifndef DIMENSION_H
#define DIMENSION_H
+/* Handle inlines nicely without cheating and making them static. The
+ DMNSN_INLINE macro is set appropriately for the version of C you're using,
+ and non-inline versions are emitted in exactly one translation unit when
+ necessary. */
+#ifndef DMNSN_INLINE
+ #ifdef __cplusplus
+ /* C++ inline semantics */
+ #define DMNSN_INLINE inline
+ #elif (__STDC_VERSION__ >= 199901L)
+ /* C99 inline semantics */
+ #define DMNSN_INLINE inline
+ #elif defined(__GNUC__)
+ /* GCC inline semantics */
+ #define DMNSN_INLINE extern inline
+ #else
+ /* Unknown C - mark functions static and hope the compiler is smart enough
+ to inline them */
+ #define DMNSN_INLINE static
+ #endif
+#endif
+
#ifdef __cplusplus
/* We've been included from a C++ file; mark everything here as extern "C" */
extern "C" {