149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//===-- ManagedStringPool.h - Managed String Pool ---------------*- C++ -*-===// 249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// 349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// The LLVM Compiler Infrastructure 449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// 549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// This file is distributed under the University of Illinois Open Source 649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// License. See LICENSE.TXT for details. 749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// 849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//===----------------------------------------------------------------------===// 949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// 1049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// The strings allocated from a managed string pool are owned by the string 1149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// pool and will be deleted together with the managed string pool. 1249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// 1349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//===----------------------------------------------------------------------===// 1449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski 1549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#ifndef LLVM_SUPPORT_MANAGED_STRING_H 1649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#define LLVM_SUPPORT_MANAGED_STRING_H 1749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski 1849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#include "llvm/ADT/SmallVector.h" 1949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#include <string> 2049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski 2149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinskinamespace llvm { 2249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski 2349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski/// ManagedStringPool - The strings allocated from a managed string pool are 2449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski/// owned by the string pool and will be deleted together with the managed 2549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski/// string pool. 2649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinskiclass ManagedStringPool { 2749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski SmallVector<std::string *, 8> Pool; 2849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski 2949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinskipublic: 3049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski ManagedStringPool() {} 3149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski ~ManagedStringPool() { 326227d5c690504c7ada5780c00a635b282c46e275Craig Topper SmallVectorImpl<std::string *>::iterator Current = Pool.begin(); 3349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski while (Current != Pool.end()) { 3449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski delete *Current; 3549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski Current++; 3649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski } 3749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski } 3849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski 3949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski std::string *getManagedString(const char *S) { 4049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski std::string *Str = new std::string(S); 4149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski Pool.push_back(Str); 4249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski return Str; 4349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski } 4449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski}; 4549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski 4649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski} 4749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski 4849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#endif 49