diff options
Diffstat (limited to 'mfbt/StandardInteger.h')
-rw-r--r-- | mfbt/StandardInteger.h | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/mfbt/StandardInteger.h b/mfbt/StandardInteger.h new file mode 100644 index 0000000..8e4c857 --- /dev/null +++ b/mfbt/StandardInteger.h @@ -0,0 +1,43 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* Implements the C99 <stdint.h> interface for C and C++ code. */ + +#ifndef mozilla_StandardInteger_h_ +#define mozilla_StandardInteger_h_ + +/* + * The C99 standard header <stdint.h> exposes typedefs for common fixed-width + * integer types. It would be feasible to simply #include <stdint.h>, but + * MSVC++ versions prior to 2010 don't provide <stdint.h>. We could solve this + * by reimplementing <stdint.h> for MSVC++ 2008 and earlier. But then we reach + * a second problem: our custom <stdint.h> might conflict with a <stdint.h> + * defined by an embedder already looking to work around the MSVC++ <stdint.h> + * absence. + * + * We address these issues in this manner: + * + * 1. If the preprocessor macro MOZ_CUSTOM_STDINT_H is defined to a path to a + * custom <stdint.h> implementation, we will #include it. Embedders using + * a custom <stdint.h> must define this macro to an implementation that + * will work with their embedding. + * 2. Otherwise, if we are compiling with a an MSVC++ version without + * <stdint.h>, #include our custom <stdint.h> reimplementation. + * 3. Otherwise, #include the standard <stdint.h> provided by the compiler. + * + * Note that we can't call this file "stdint.h" or something case-insensitively + * equal to "stdint.h" because then MSVC (and other compilers on + * case-insensitive file systems) will include this file, rather than the system + * stdint.h, when we ask for <stdint.h> below. + */ +#if defined(MOZ_CUSTOM_STDINT_H) +# include MOZ_CUSTOM_STDINT_H +#elif defined(_MSC_VER) && _MSC_VER < 1600 +# include "mozilla/MSStdInt.h" +#else +# include <stdint.h> +#endif + +#endif /* mozilla_StandardInteger_h_ */ |