#include <folly/Format.h>
+#include <folly/portability/Constexpr.h>
+
#include <double-conversion/double-conversion.h>
namespace folly {
}
// 2+: for null terminator and optional sign shenanigans.
- char buf[2 + std::max(
- 2 + DoubleToStringConverter::kMaxFixedDigitsBeforePoint +
- DoubleToStringConverter::kMaxFixedDigitsAfterPoint,
- std::max(8 + DoubleToStringConverter::kMaxExponentialDigits,
- 7 + DoubleToStringConverter::kMaxPrecisionDigits))];
+ constexpr size_t bufLen =
+ 2 + constexpr_max(
+ 2 + DoubleToStringConverter::kMaxFixedDigitsBeforePoint +
+ DoubleToStringConverter::kMaxFixedDigitsAfterPoint,
+ constexpr_max(8 + DoubleToStringConverter::kMaxExponentialDigits,
+ 7 + DoubleToStringConverter::kMaxPrecisionDigits));
+ char buf[bufLen];
StringBuilder builder(buf + 1, static_cast<int> (sizeof(buf) - 1));
char plusSign;
Padded.h \
PicoSpinLock.h \
Portability.h \
+ portability/Constexpr.h \
portability/Syscall.h \
portability/SysUio.h \
Preprocessor.h \
#endif
}
-#ifdef _MSC_VER
-constexpr size_t constexpr_strlen_internal(const char* s, size_t len) {
- return *s == '\0' ? len : constexpr_strlen_internal(s + 1, len + 1);
-}
-static_assert(constexpr_strlen_internal("123456789", 0) == 9,
- "Someone appears to have broken constexpr_strlen...");
-#endif
-
-constexpr size_t constexpr_strlen(const char* s) {
-#if defined(__clang__)
- return __builtin_strlen(s);
-#elif defined(_MSC_VER)
- return s == nullptr ? 0 : constexpr_strlen_internal(s, 0);
-#else
- return strlen(s);
-#endif
-}
-
#if defined(__APPLE__) || defined(_MSC_VER)
#define MAX_STATIC_CONSTRUCTOR_PRIORITY
#else
#include <folly/Portability.h>
#include <folly/FBString.h>
#include <folly/SpookyHashV2.h>
+#include <folly/portability/Constexpr.h>
#include <algorithm>
#include <boost/operators.hpp>
#include <folly/Range.h>
#include <folly/String.h>
#include <folly/Unicode.h>
+#include <folly/portability/Constexpr.h>
namespace folly {
--- /dev/null
+/*
+ * Copyright 2016 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef FOLLY_CONSTEXPR_H_
+#define FOLLY_CONSTEXPR_H_
+
+#include <cstdint>
+
+namespace folly {
+
+template <typename T>
+constexpr T constexpr_max(T a, T b) {
+ return a > b ? a : b;
+}
+
+template <typename T>
+constexpr T constexpr_min(T a, T b) {
+ return a < b ? a : b;
+}
+
+#ifdef _MSC_VER
+constexpr size_t constexpr_strlen_internal(const char* s, size_t len) {
+ return *s == '\0' ? len : constexpr_strlen_internal(s + 1, len + 1);
+}
+static_assert(constexpr_strlen_internal("123456789", 0) == 9,
+ "Someone appears to have broken constexpr_strlen...");
+#endif
+
+constexpr size_t constexpr_strlen(const char* s) {
+#if defined(__clang__)
+ return __builtin_strlen(s);
+#elif defined(_MSC_VER)
+ return s == nullptr ? 0 : constexpr_strlen_internal(s, 0);
+#else
+ return strlen(s);
+#endif
+}
+}
+
+#endif