diff options
author | Chris Lattner <sabre@nondot.org> | 2008-11-10 04:22:46 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-11-10 04:22:46 +0000 |
commit | 886645a3c3a5628b2c062cd486e24b86d82d84d9 (patch) | |
tree | 5df745d850c2ba41185e74b3c9ac8e30874bd8d9 /include/llvm/ADT/StringExtras.h | |
parent | 497a7a81a806748b7a49b529b6da4040da0a3832 (diff) | |
download | llvm-886645a3c3a5628b2c062cd486e24b86d82d84d9.tar.gz llvm-886645a3c3a5628b2c062cd486e24b86d82d84d9.tar.bz2 llvm-886645a3c3a5628b2c062cd486e24b86d82d84d9.tar.xz |
split out the functionality of utohexstr into a new utohex_buffer
helper. This allows us to convert numbers to hex without necessarily
needing to make a std::string to hold the result.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58961 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/ADT/StringExtras.h')
-rw-r--r-- | include/llvm/ADT/StringExtras.h | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/include/llvm/ADT/StringExtras.h b/include/llvm/ADT/StringExtras.h index fcd03982e6..e6f027c31b 100644 --- a/include/llvm/ADT/StringExtras.h +++ b/include/llvm/ADT/StringExtras.h @@ -29,19 +29,34 @@ static inline char hexdigit(unsigned X) { return X < 10 ? '0' + X : 'A' + X - 10; } -static inline std::string utohexstr(uint64_t X) { - char Buffer[40]; - char *BufPtr = Buffer+39; - - *BufPtr = 0; // Null terminate buffer... - if (X == 0) *--BufPtr = '0'; // Handle special case... +/// utohex_buffer - Emit the specified number into the buffer specified by +/// BufferEnd, returning a pointer to the start of the string. This can be used +/// like this: (note that the buffer must be large enough to handle any number): +/// char Buffer[40]; +/// printf("0x%s", utohex_buffer(X, Buffer+40)); +/// +/// This should only be used with unsigned types. +/// +template<typename IntTy> +static inline char *utohex_buffer(IntTy X, char *BufferEnd) { + char *BufPtr = BufferEnd; + *--BufPtr = 0; // Null terminate buffer. + if (X == 0) { + *--BufPtr = '0'; // Handle special case. + return BufPtr; + } while (X) { unsigned char Mod = static_cast<unsigned char>(X) & 15; *--BufPtr = hexdigit(Mod); X >>= 4; } - return std::string(BufPtr); + return BufPtr; +} + +static inline std::string utohexstr(uint64_t X) { + char Buffer[40]; + return utohex_buffer(X, Buffer); } static inline std::string utostr_32(uint32_t X, bool isNeg = false) { |