summaryrefslogtreecommitdiff
path: root/mfbt/StandardInteger.h
diff options
context:
space:
mode:
Diffstat (limited to 'mfbt/StandardInteger.h')
-rw-r--r--mfbt/StandardInteger.h43
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_ */