diff options
author | Chris Lattner <sabre@nondot.org> | 2009-09-14 01:19:16 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-09-14 01:19:16 +0000 |
commit | 971aad136c0c8d7a5552043dfb68c56f7449a6c7 (patch) | |
tree | 2d2feb47f87ebc211adc744268948796e531278a /llvm/utils/TableGen/AsmWriterEmitter.cpp | |
parent | b47ed61f26e4a0fdd7827ef07d48d8f2c1e8697b (diff) | |
download | bcm5719-llvm-971aad136c0c8d7a5552043dfb68c56f7449a6c7.tar.gz bcm5719-llvm-971aad136c0c8d7a5552043dfb68c56f7449a6c7.zip |
move StringToOffsetTable out to its own header.
llvm-svn: 81740
Diffstat (limited to 'llvm/utils/TableGen/AsmWriterEmitter.cpp')
-rw-r--r-- | llvm/utils/TableGen/AsmWriterEmitter.cpp | 57 |
1 files changed, 1 insertions, 56 deletions
diff --git a/llvm/utils/TableGen/AsmWriterEmitter.cpp b/llvm/utils/TableGen/AsmWriterEmitter.cpp index aee4653bcde..8f8f89a79b0 100644 --- a/llvm/utils/TableGen/AsmWriterEmitter.cpp +++ b/llvm/utils/TableGen/AsmWriterEmitter.cpp @@ -15,68 +15,13 @@ #include "AsmWriterEmitter.h" #include "CodeGenTarget.h" #include "Record.h" +#include "StringToOffsetTable.h" #include "llvm/ADT/StringExtras.h" -#include "llvm/ADT/StringMap.h" #include "llvm/Support/Debug.h" #include "llvm/Support/MathExtras.h" #include <algorithm> using namespace llvm; -/// StringToOffsetTable - This class uniques a bunch of nul-terminated strings -/// and keeps track of their offset in a massive contiguous string allocation. -/// It can then output this string blob and use indexes into the string to -/// reference each piece. -class StringToOffsetTable { - StringMap<unsigned> StringOffset; - std::string AggregateString; -public: - - unsigned GetOrAddStringOffset(StringRef Str) { - unsigned &Entry = StringOffset[Str]; - if (Entry == 0) { - // Add the string to the aggregate if this is the first time found. - Entry = AggregateString.size(); - AggregateString.append(Str.begin(), Str.end()); - AggregateString += '\0'; - } - - return Entry; - } - - void EmitString(raw_ostream &O) { - O << " \""; - unsigned CharsPrinted = 0; - EscapeString(AggregateString); - for (unsigned i = 0, e = AggregateString.size(); i != e; ++i) { - if (CharsPrinted > 70) { - O << "\"\n \""; - CharsPrinted = 0; - } - O << AggregateString[i]; - ++CharsPrinted; - - // Print escape sequences all together. - if (AggregateString[i] != '\\') - continue; - - assert(i+1 < AggregateString.size() && "Incomplete escape sequence!"); - if (isdigit(AggregateString[i+1])) { - assert(isdigit(AggregateString[i+2]) && - isdigit(AggregateString[i+3]) && - "Expected 3 digit octal escape!"); - O << AggregateString[++i]; - O << AggregateString[++i]; - O << AggregateString[++i]; - CharsPrinted += 3; - } else { - O << AggregateString[++i]; - ++CharsPrinted; - } - } - O << "\""; - } -}; - static bool isIdentChar(char C) { return (C >= 'a' && C <= 'z') || |