summaryrefslogtreecommitdiff
path: root/Source/WTF/wtf/HexNumber.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WTF/wtf/HexNumber.h')
-rw-r--r--Source/WTF/wtf/HexNumber.h43
1 files changed, 26 insertions, 17 deletions
diff --git a/Source/WTF/wtf/HexNumber.h b/Source/WTF/wtf/HexNumber.h
index b698dd50e..c67b71edc 100644
--- a/Source/WTF/wtf/HexNumber.h
+++ b/Source/WTF/wtf/HexNumber.h
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2011 Research In Motion Limited. All rights reserved.
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -17,33 +18,29 @@
* Boston, MA 02110-1301, USA.
*/
-#ifndef HexNumber_h
-#define HexNumber_h
+#pragma once
#include <wtf/text/StringConcatenate.h>
namespace WTF {
-enum HexConversionMode {
- Lowercase,
- Uppercase
-};
+enum HexConversionMode { Lowercase, Uppercase };
namespace Internal {
-const LChar lowerHexDigits[17] = "0123456789abcdef";
-const LChar upperHexDigits[17] = "0123456789ABCDEF";
inline const LChar* hexDigitsForMode(HexConversionMode mode)
{
- return mode == Lowercase ? lowerHexDigits : upperHexDigits;
+ static const LChar lowercaseHexDigits[17] = "0123456789abcdef";
+ static const LChar uppercaseHexDigits[17] = "0123456789ABCDEF";
+ return mode == Lowercase ? lowercaseHexDigits : uppercaseHexDigits;
}
-}; // namespace Internal
+} // namespace Internal
template<typename T>
inline void appendByteAsHex(unsigned char byte, T& destination, HexConversionMode mode = Uppercase)
{
- const LChar* hexDigits = Internal::hexDigitsForMode(mode);
+ auto* hexDigits = Internal::hexDigitsForMode(mode);
destination.append(hexDigits[byte >> 4]);
destination.append(hexDigits[byte & 0xF]);
}
@@ -51,7 +48,7 @@ inline void appendByteAsHex(unsigned char byte, T& destination, HexConversionMod
template<typename T>
inline void placeByteAsHexCompressIfPossible(unsigned char byte, T& destination, unsigned& index, HexConversionMode mode = Uppercase)
{
- const LChar* hexDigits = Internal::hexDigitsForMode(mode);
+ auto* hexDigits = Internal::hexDigitsForMode(mode);
if (byte >= 0x10)
destination[index++] = hexDigits[byte >> 4];
destination[index++] = hexDigits[byte & 0xF];
@@ -60,7 +57,7 @@ inline void placeByteAsHexCompressIfPossible(unsigned char byte, T& destination,
template<typename T>
inline void placeByteAsHex(unsigned char byte, T& destination, HexConversionMode mode = Uppercase)
{
- const LChar* hexDigits = Internal::hexDigitsForMode(mode);
+ auto* hexDigits = Internal::hexDigitsForMode(mode);
*destination++ = hexDigits[byte >> 4];
*destination++ = hexDigits[byte & 0xF];
}
@@ -68,7 +65,7 @@ inline void placeByteAsHex(unsigned char byte, T& destination, HexConversionMode
template<typename T>
inline void appendUnsignedAsHex(unsigned number, T& destination, HexConversionMode mode = Uppercase)
{
- const LChar* hexDigits = Internal::hexDigitsForMode(mode);
+ auto* hexDigits = Internal::hexDigitsForMode(mode);
Vector<LChar, 8> result;
do {
result.append(hexDigits[number % 16]);
@@ -78,6 +75,20 @@ inline void appendUnsignedAsHex(unsigned number, T& destination, HexConversionMo
result.reverse();
destination.append(result.data(), result.size());
}
+
+template<typename T>
+inline void appendUnsigned64AsHex(uint64_t number, T& destination, HexConversionMode mode = Uppercase)
+{
+ auto* hexDigits = Internal::hexDigitsForMode(mode);
+ Vector<LChar, 8> result;
+ do {
+ result.append(hexDigits[number % 16]);
+ number >>= 4;
+ } while (number > 0);
+
+ result.reverse();
+ destination.append(result.data(), result.size());
+}
// Same as appendUnsignedAsHex, but using exactly 'desiredDigits' for the conversion.
template<typename T>
@@ -85,7 +96,7 @@ inline void appendUnsignedAsHexFixedSize(unsigned number, T& destination, unsign
{
ASSERT(desiredDigits);
- const LChar* hexDigits = Internal::hexDigitsForMode(mode);
+ auto* hexDigits = Internal::hexDigitsForMode(mode);
Vector<LChar, 8> result;
do {
result.append(hexDigits[number % 16]);
@@ -105,5 +116,3 @@ using WTF::appendUnsignedAsHexFixedSize;
using WTF::placeByteAsHex;
using WTF::placeByteAsHexCompressIfPossible;
using WTF::Lowercase;
-
-#endif // HexNumber_h