| /* -*- 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_ */ |