//
// The LLVM Compiler Infrastructure
//
-// This file was developed by Reid Spencer. It is distributed under the
-// University of Illinois Open Source License. See LICENSE.TXT for details.
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
#define LLVM_TYPE_SYMBOL_TABLE_H
#include "llvm/Type.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/DataTypes.h"
#include <map>
namespace llvm {
/// @{
public:
- TypeSymbolTable() {}
+ TypeSymbolTable():LastUnique(0) {}
~TypeSymbolTable();
/// @}
/// incrementing an integer and appending it to the name, if necessary
/// @returns the unique name
/// @brief Get a unique name for a type
- std::string getUniqueName(const std::string &BaseName) const;
+ std::string getUniqueName(StringRef BaseName) const;
/// This method finds the type with the given \p name in the type map
/// and returns it.
/// @returns null if the name is not found, otherwise the Type
/// associated with the \p name.
/// @brief Lookup a type by name.
- Type* lookup(const std::string& name) const;
+ Type *lookup(StringRef name) const;
+
+ /// Lookup the type associated with name.
+ /// @returns end() if the name is not found, or an iterator at the entry for
+ /// Type.
+ iterator find(StringRef Name) {
+ return tmap.find(Name);
+ }
+
+ /// Lookup the type associated with name.
+ /// @returns end() if the name is not found, or an iterator at the entry for
+ /// Type.
+ const_iterator find(StringRef Name) const {
+ return tmap.find(Name);
+ }
/// @returns true iff the symbol table is empty.
/// @brief Determine if the symbol table is empty
/// @brief Get a const_iterator to the start of the symbol table
inline const_iterator begin() const { return tmap.begin(); }
- /// Get an iterator to the end of the symbol talbe.
+ /// Get an iterator to the end of the symbol table.
inline iterator end() { return tmap.end(); }
/// Get a const_iterator to the end of the symbol table.
/// @{
public:
- /// This method will strip the symbol table of its names
- /// @brief Strip the symbol table.
- bool strip();
-
/// Inserts a type into the symbol table with the specified name. There can be
/// a many-to-one mapping between names and types. This method allows a type
/// with an existing entry in the symbol table to get a new name.
/// @brief Insert a type under a new name.
- void insert(const std::string &Name, const Type *Typ);
+ void insert(StringRef Name, const Type *Typ);
/// Remove a type at the specified position in the symbol table.
/// @returns the removed Type.
/// @returns the Type that was erased from the symbol table.
Type* remove(iterator TI);
- /// Remove a specific Type from the symbol table. This isn't fast, linear
- /// search, O(n), algorithm.
- /// @returns true if the erase was successful (TI was found)
- bool remove(Type* TI);
-
/// @}
/// @name AbstractTypeUser Methods
/// @{
} // End llvm namespace
#endif
-