Home | History | Annotate | Download | only in llvm-pdbutil
      1 //===- Streamutil.h - PDB stream utilities ----------------------*- 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 #ifndef LLVM_TOOLS_LLVMPDBDUMP_STREAMUTIL_H
     11 #define LLVM_TOOLS_LLVMPDBDUMP_STREAMUTIL_H
     12 
     13 #include "llvm/ADT/Optional.h"
     14 #include "llvm/ADT/SmallVector.h"
     15 #include "llvm/ADT/StringRef.h"
     16 
     17 #include <string>
     18 
     19 namespace llvm {
     20 namespace pdb {
     21 class PDBFile;
     22 enum class StreamPurpose {
     23   NamedStream,
     24   ModuleStream,
     25   Symbols,
     26   PDB,
     27   DBI,
     28   TPI,
     29   IPI,
     30   GlobalHash,
     31   PublicHash,
     32   TpiHash,
     33   IpiHash,
     34   Other
     35 };
     36 
     37 struct StreamInfo {
     38 public:
     39   StreamInfo() {}
     40 
     41   uint32_t getModuleIndex() const { return *ModuleIndex; }
     42   StreamPurpose getPurpose() const { return Purpose; }
     43   StringRef getShortName() const { return Name; }
     44   uint32_t getStreamIndex() const { return StreamIndex; }
     45   std::string getLongName() const;
     46 
     47   static StreamInfo createStream(StreamPurpose Purpose, StringRef Name,
     48                                  uint32_t StreamIndex);
     49   static StreamInfo createModuleStream(StringRef Module, uint32_t StreamIndex,
     50                                        uint32_t Modi);
     51 
     52 private:
     53   StreamPurpose Purpose;
     54   uint32_t StreamIndex;
     55   std::string Name;
     56   Optional<uint32_t> ModuleIndex;
     57 };
     58 
     59 void discoverStreamPurposes(PDBFile &File,
     60                             SmallVectorImpl<StreamInfo> &Streams);
     61 }
     62 }
     63 
     64 #endif
     65