1f22ef01cSRoman Divacky //===-- StringPool.cpp - Interned string pool -----------------------------===//
2f22ef01cSRoman Divacky //
3f22ef01cSRoman Divacky //                     The LLVM Compiler Infrastructure
4f22ef01cSRoman Divacky //
5f22ef01cSRoman Divacky // This file is distributed under the University of Illinois Open Source
6f22ef01cSRoman Divacky // License. See LICENSE.TXT for details.
7f22ef01cSRoman Divacky //
8f22ef01cSRoman Divacky //===----------------------------------------------------------------------===//
9f22ef01cSRoman Divacky //
10f22ef01cSRoman Divacky // This file implements the StringPool class.
11f22ef01cSRoman Divacky //
12f22ef01cSRoman Divacky //===----------------------------------------------------------------------===//
13f22ef01cSRoman Divacky 
14f22ef01cSRoman Divacky #include "llvm/Support/StringPool.h"
15f22ef01cSRoman Divacky #include "llvm/ADT/StringRef.h"
16f22ef01cSRoman Divacky 
17f22ef01cSRoman Divacky using namespace llvm;
18f22ef01cSRoman Divacky 
StringPool()19f22ef01cSRoman Divacky StringPool::StringPool() {}
20f22ef01cSRoman Divacky 
~StringPool()21f22ef01cSRoman Divacky StringPool::~StringPool() {
22f22ef01cSRoman Divacky   assert(InternTable.empty() && "PooledStringPtr leaked!");
23f22ef01cSRoman Divacky }
24f22ef01cSRoman Divacky 
intern(StringRef Key)25ffd1746dSEd Schouten PooledStringPtr StringPool::intern(StringRef Key) {
26f22ef01cSRoman Divacky   table_t::iterator I = InternTable.find(Key);
27f22ef01cSRoman Divacky   if (I != InternTable.end())
28f22ef01cSRoman Divacky     return PooledStringPtr(&*I);
29f22ef01cSRoman Divacky 
3091bc56edSDimitry Andric   entry_t *S = entry_t::Create(Key);
31f22ef01cSRoman Divacky   S->getValue().Pool = this;
32f22ef01cSRoman Divacky   InternTable.insert(S);
33f22ef01cSRoman Divacky 
34f22ef01cSRoman Divacky   return PooledStringPtr(S);
35f22ef01cSRoman Divacky }
36