Remove dead field
[oota-llvm.git] / include / llvm / Module.h
index 5c27d3b55f13d8468519336a375931691b87b0fd..846b47f057606d337b461e6810dc25bd50ed1f40 100644 (file)
 
 #include "llvm/Function.h"
 #include "llvm/GlobalVariable.h"
+#include "llvm/ADT/SetVector.h"
 
 namespace llvm {
 
 class GlobalVariable;
 class GlobalValueRefMap;   // Used by ConstantVals.cpp
-class ConstantPointerRef;
 class FunctionType;
 class SymbolTable;
 
@@ -43,9 +43,11 @@ template<> struct ilist_traits<GlobalVariable>
   static iplist<GlobalVariable> &getList(Module *M);
 };
 
-struct Module {
+class Module {
+public:
   typedef iplist<GlobalVariable> GlobalListType;
   typedef iplist<Function> FunctionListType;
+  typedef SetVector<std::string> LibraryListType;
 
   // Global Variable iterators...
   typedef GlobalListType::iterator                             giterator;
@@ -59,32 +61,34 @@ struct Module {
   typedef std::reverse_iterator<iterator>             reverse_iterator;
   typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
 
+  // Library list iterators
+  typedef LibraryListType::const_iterator lib_iterator;
+
   enum Endianness  { AnyEndianness, LittleEndian, BigEndian };
   enum PointerSize { AnyPointerSize, Pointer32, Pointer64 };
 
 private:
   GlobalListType GlobalList;     // The Global Variables in the module
   FunctionListType FunctionList; // The Functions in the module
-  GlobalValueRefMap *GVRefMap;   // Keep track of GlobalValueRef's
+  LibraryListType LibraryList;   // The Libraries needed by the module
   SymbolTable *SymTab;           // Symbol Table for the module
-  std::string ModuleID;    // Human readable identifier for the module
+  std::string ModuleID;          // Human readable identifier for the module
+  std::string TargetTriple;      // Platform target triple Module compiled on
 
   // These flags are probably not the right long-term way to handle this kind of
   // target information, but it is sufficient for now.
-  Endianness  Endian;       // True if target is little endian
+  Endianness  Endian;     // True if target is little endian
   PointerSize PtrSize;    // True if target has 32-bit pointers (false = 64-bit)
 
-  // Accessor for the underlying GVRefMap... only through the Constant class...
   friend class Constant;
-  friend class ConstantPointerRef;
-  ConstantPointerRef *getConstantPointerRef(GlobalValue *GV);
-  void destroyConstantPointerRef(ConstantPointerRef *CPR);
 
 public:
   Module(const std::string &ModuleID);
   ~Module();
 
-  const std::string &getModuleIdentifier() const { return ModuleID; }
+  const std::string& getModuleIdentifier() const { return ModuleID; }
+  const std::string& getTargetTriple() const { return TargetTriple; }
+  void setTargetTriple(const std::string& T) { TargetTriple = T; }
 
   /// Target endian information...
   Endianness getEndianness() const { return Endian; }
@@ -133,7 +137,7 @@ public:
   /// getGlobalVariable - Look up the specified global variable in the module
   /// symbol table.  If it does not exist, return null.  Note that this only
   /// returns a global variable if it does not have internal linkage.  The type
-  /// argument should be the underlying type of the global, ie, it should not
+  /// argument should be the underlying type of the global, i.e., it should not
   /// have the top-level PointerType, which represents the address of the
   /// global.
   ///
@@ -181,6 +185,7 @@ public:
   //===--------------------------------------------------------------------===//
   // Module iterator forwarding functions
   //
+  // Globals list interface
   inline giterator                gbegin()       { return GlobalList.begin(); }
   inline const_giterator          gbegin() const { return GlobalList.begin(); }
   inline giterator                gend  ()       { return GlobalList.end();   }
@@ -191,15 +196,14 @@ public:
   inline reverse_giterator       grend  ()       { return GlobalList.rend();   }
   inline const_reverse_giterator grend  () const { return GlobalList.rend();   }
 
-  inline unsigned                  gsize() const { return GlobalList.size(); }
+  inline size_t                    gsize() const { return GlobalList.size(); }
   inline bool                     gempty() const { return GlobalList.empty(); }
   inline const GlobalVariable    &gfront() const { return GlobalList.front(); }
   inline       GlobalVariable    &gfront()       { return GlobalList.front(); }
   inline const GlobalVariable     &gback() const { return GlobalList.back(); }
   inline       GlobalVariable     &gback()       { return GlobalList.back(); }
 
-
-
+  // FunctionList interface
   inline iterator                begin()       { return FunctionList.begin(); }
   inline const_iterator          begin() const { return FunctionList.begin(); }
   inline iterator                end  ()       { return FunctionList.end();   }
@@ -210,13 +214,37 @@ public:
   inline reverse_iterator       rend  ()       { return FunctionList.rend();   }
   inline const_reverse_iterator rend  () const { return FunctionList.rend();   }
 
-  inline unsigned                 size() const { return FunctionList.size(); }
+  inline size_t                   size() const { return FunctionList.size(); }
   inline bool                    empty() const { return FunctionList.empty(); }
   inline const Function         &front() const { return FunctionList.front(); }
   inline       Function         &front()       { return FunctionList.front(); }
   inline const Function          &back() const { return FunctionList.back(); }
   inline       Function          &back()       { return FunctionList.back(); }
 
+  //===--------------------------------------------------------------------===//
+  // List of dependent library access functions
+
+  /// @brief Get a constant iterator to beginning of dependent library list.
+  inline lib_iterator lib_begin() const { return LibraryList.begin(); }
+
+  /// @brief Get a constant iterator to end of dependent library list.
+  inline lib_iterator lib_end() const { return LibraryList.end(); }
+
+  /// @brief Returns the number of items in the list of libraries.
+  inline size_t lib_size() const { return LibraryList.size(); }
+
+  /// @brief Add a library to the list of dependent libraries
+  inline void addLibrary(const std::string& Lib){ LibraryList.insert(Lib); }
+
+  /// @brief Remove a library from the list of dependent libraries
+  inline void removeLibrary(const std::string& Lib) { LibraryList.remove(Lib); }
+
+  /// @brief Get all the libraries 
+  inline const LibraryListType& getLibraries() const { return LibraryList; }
+
+  //===--------------------------------------------------------------------===//
+  // Utility functions for printing and dumping Module objects
+
   void print(std::ostream &OS) const { print(OS, 0); }
   void print(std::ostream &OS, AssemblyAnnotationWriter *AAW) const;