Home | History | Annotate | Download | only in Common
      1 //===--- LLVM.h - Import various common LLVM datatypes ----------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file forward declares and imports various common LLVM datatypes that
     11 // lld wants to use unqualified.
     12 //
     13 //===----------------------------------------------------------------------===//
     14 
     15 #ifndef LLD_COMMON_LLVM_H
     16 #define LLD_COMMON_LLVM_H
     17 
     18 // This should be the only #include, force #includes of all the others on
     19 // clients.
     20 #include "llvm/ADT/Hashing.h"
     21 #include "llvm/Support/Casting.h"
     22 #include <utility>
     23 
     24 namespace llvm {
     25   // ADT's.
     26   class Error;
     27   class StringRef;
     28   class Twine;
     29   class MemoryBuffer;
     30   class MemoryBufferRef;
     31   template<typename T> class ArrayRef;
     32   template<unsigned InternalLen> class SmallString;
     33   template<typename T, unsigned N> class SmallVector;
     34   template<typename T> class SmallVectorImpl;
     35 
     36   template<typename T>
     37   struct SaveAndRestore;
     38 
     39   template<typename T>
     40   class ErrorOr;
     41 
     42   template<typename T>
     43   class Expected;
     44 
     45   class raw_ostream;
     46   // TODO: DenseMap, ...
     47 }
     48 
     49 namespace lld {
     50   // Casting operators.
     51   using llvm::isa;
     52   using llvm::cast;
     53   using llvm::dyn_cast;
     54   using llvm::dyn_cast_or_null;
     55   using llvm::cast_or_null;
     56 
     57   // ADT's.
     58   using llvm::Error;
     59   using llvm::StringRef;
     60   using llvm::Twine;
     61   using llvm::MemoryBuffer;
     62   using llvm::MemoryBufferRef;
     63   using llvm::ArrayRef;
     64   using llvm::SmallString;
     65   using llvm::SmallVector;
     66   using llvm::SmallVectorImpl;
     67   using llvm::SaveAndRestore;
     68   using llvm::ErrorOr;
     69   using llvm::Expected;
     70 
     71   using llvm::raw_ostream;
     72 } // end namespace lld.
     73 
     74 namespace std {
     75 template <> struct hash<llvm::StringRef> {
     76 public:
     77   size_t operator()(const llvm::StringRef &s) const {
     78     return llvm::hash_value(s);
     79   }
     80 };
     81 }
     82 
     83 #endif
     84