StringToOffsetTable: Allow uniquing the first element, add an option to skip appendin...
authorBenjamin Kramer <benny.kra@googlemail.com>
Sat, 3 Mar 2012 19:13:20 +0000 (19:13 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Sat, 3 Mar 2012 19:13:20 +0000 (19:13 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151983 91177308-0d34-0410-b5e6-96231b3b80d8

utils/TableGen/StringToOffsetTable.h

index ac9422c5d72daa0a1bf6f86b261a1e87df6f5894..803f5bd5cf014e1d5e7a18f60d11bc769a8e0745 100644 (file)
@@ -26,16 +26,17 @@ class StringToOffsetTable {
   std::string AggregateString;
 public:
   
-  unsigned GetOrAddStringOffset(StringRef Str) {
-    unsigned &Entry = StringOffset[Str];
-    if (Entry == 0) {
+  unsigned GetOrAddStringOffset(StringRef Str, bool appendZero = true) {
+    StringMapEntry<unsigned> &Entry = StringOffset.GetOrCreateValue(Str, -1U);
+    if (Entry.getValue() == -1U) {
       // Add the string to the aggregate if this is the first time found.
-      Entry = AggregateString.size();
+      Entry.setValue(AggregateString.size());
       AggregateString.append(Str.begin(), Str.end());
-      AggregateString += '\0';
+      if (appendZero)
+        AggregateString += '\0';
     }
     
-    return Entry;
+    return Entry.getValue();
   }
   
   void EmitString(raw_ostream &O) {