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 DivackyStringPool::StringPool() {} 20f22ef01cSRoman Divacky ~StringPool()21f22ef01cSRoman DivackyStringPool::~StringPool() { 22f22ef01cSRoman Divacky assert(InternTable.empty() && "PooledStringPtr leaked!"); 23f22ef01cSRoman Divacky } 24f22ef01cSRoman Divacky intern(StringRef Key)25ffd1746dSEd SchoutenPooledStringPtr 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