1193323Sed//===-- StringPool.cpp - Interned string pool -----------------------------===//
2193323Sed//
3193323Sed//                     The LLVM Compiler Infrastructure
4193323Sed//
5193323Sed// This file is distributed under the University of Illinois Open Source
6193323Sed// License. See LICENSE.TXT for details.
7193323Sed//
8193323Sed//===----------------------------------------------------------------------===//
9193323Sed//
10193323Sed// This file implements the StringPool class.
11193323Sed//
12193323Sed//===----------------------------------------------------------------------===//
13193323Sed
14193323Sed#include "llvm/Support/StringPool.h"
15198090Srdivacky#include "llvm/ADT/StringRef.h"
16193323Sed
17193323Sedusing namespace llvm;
18193323Sed
19193323SedStringPool::StringPool() {}
20193323Sed
21193323SedStringPool::~StringPool() {
22193323Sed  assert(InternTable.empty() && "PooledStringPtr leaked!");
23193323Sed}
24193323Sed
25210299SedPooledStringPtr StringPool::intern(StringRef Key) {
26198090Srdivacky  table_t::iterator I = InternTable.find(Key);
27193323Sed  if (I != InternTable.end())
28193323Sed    return PooledStringPtr(&*I);
29193323Sed
30198090Srdivacky  entry_t *S = entry_t::Create(Key.begin(), Key.end());
31193323Sed  S->getValue().Pool = this;
32193323Sed  InternTable.insert(S);
33193323Sed
34193323Sed  return PooledStringPtr(S);
35193323Sed}
36