/*
- * Copyright 2015 Facebook, Inc.
+ * 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.
#endif
#include <array>
+#include <cinttypes>
#include <deque>
#include <map>
#include <unordered_map>
#include <folly/Exception.h>
#include <folly/FormatTraits.h>
#include <folly/Traits.h>
+#include <folly/portability/Windows.h>
// Ignore -Wformat-nonliteral warnings within this file
#pragma GCC diagnostic push
char sign;
if (std::is_signed<T>::value) {
if (folly::is_negative(val_)) {
- uval = static_cast<UT>(-val_);
+ uval = -static_cast<UT>(val_);
sign = '-';
} else {
uval = static_cast<UT>(val_);
"' specifier");
valBufBegin = valBuf + 3; // room for sign and base prefix
+#ifdef _MSC_VER
+ char valBuf2[valBufSize];
+ snprintf(valBuf2, valBufSize, "%ju", static_cast<uintmax_t>(uval));
+ int len = GetNumberFormat(
+ LOCALE_USER_DEFAULT,
+ 0,
+ valBuf2,
+ nullptr,
+ valBufBegin,
+ (int)((valBuf + valBufSize) - valBufBegin)
+ );
+#elif defined(__ANDROID__)
+ int len = snprintf(valBufBegin, (valBuf + valBufSize) - valBufBegin,
+ "%" PRIuMAX, static_cast<uintmax_t>(uval));
+#else
int len = snprintf(valBufBegin, (valBuf + valBufSize) - valBufBegin,
"%'ju", static_cast<uintmax_t>(uval));
+#endif
// valBufSize should always be big enough, so this should never
// happen.
assert(len < valBuf + valBufSize - valBufBegin);
class TryFormatValue {
public:
template <class FormatCallback>
- static void formatOrFail(T& value, FormatArg& arg, FormatCallback& cb) {
+ static void formatOrFail(T& /* value */,
+ FormatArg& arg,
+ FormatCallback& /* cb */) {
arg.error("No formatter available for this type");
}
};
static constexpr size_t valueCount = std::tuple_size<Tuple>::value;
template <size_t K, class Callback>
- typename std::enable_if<K == valueCount>::type
- doFormatFrom(size_t i, FormatArg& arg, Callback& cb) const {
+ typename std::enable_if<K == valueCount>::type doFormatFrom(
+ size_t i, FormatArg& arg, Callback& /* cb */) const {
arg.enforce("tuple index out of range, max=", i);
}