//===-- llvm/Bitcode/ReaderWriter.h - Bitcode reader/writers ----*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file was developed by Chris Lattner and is distributed under
// the University of Illinois Open Source License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This header defines interfaces to read and write LLVM bitcode files/streams.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_BITCODE_H
#define LLVM_BITCODE_H

#include <iosfwd>
#include <string>

namespace llvm {
  class Module;
  class ModuleProvider;
  class MemoryBuffer;
  class ModulePass;
  
  /// getBitcodeModuleProvider - Read the header of the specified bitcode buffer
  /// and prepare for lazy deserialization of function bodies.  If successful,
  /// this takes ownership of 'buffer' and returns a non-null pointer.  On
  /// error, this returns null, *does not* take ownership of Buffer, and fills
  /// in *ErrMsg with an error description if ErrMsg is non-null.
  ModuleProvider *getBitcodeModuleProvider(MemoryBuffer *Buffer,
                                           std::string *ErrMsg = 0);

  /// ParseBitcodeFile - Read the specified bitcode file, returning the module.
  /// If an error occurs, this returns null and fills in *ErrMsg if it is
  /// non-null.  This method *never* takes ownership of Buffer.
  Module *ParseBitcodeFile(MemoryBuffer *Buffer, std::string *ErrMsg = 0);
  
  /// WriteBitcodeToFile - Write the specified module to the specified output
  /// stream.
  void WriteBitcodeToFile(const Module *M, std::ostream &Out);
  
  /// CreateBitcodeWriterPass - Create and return a pass that writes the module
  /// to the specified ostream.
  ModulePass *CreateBitcodeWriterPass(std::ostream &Str);
} // End llvm namespace

#endif
