FormattedStream.h revision 191cf2851b40fea6b7d927d5de8f22c35dd33828
1//===-- llvm/CodeGen/FormattedStream.h - Formatted streams ------*- 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 contains raw_ostream implementations for streams to do
11// things like pretty-print comments.
12//
13//===----------------------------------------------------------------------===//
14
15#ifndef LLVM_SUPPORT_FORMATTEDSTREAM_H
16#define LLVM_SUPPORT_FORMATTEDSTREAM_H
17
18#include "llvm/Support/raw_ostream.h"
19
20namespace llvm
21{
22  /// formatted_raw_ostream - Formatted raw_fd_ostream to handle
23  /// asm-specific constructs.
24  ///
25  class formatted_raw_ostream : public raw_ostream {
26  private:
27    /// TheStream - The real stream we output to.
28    ///
29    raw_ostream &TheStream;
30
31    /// Column - The current output column of the stream.  The column
32    /// scheme is zero-based.
33    ///
34    unsigned Column;
35
36    virtual void write_impl(const char *Ptr, unsigned Size) {
37      ComputeColumn(Ptr, Size);
38      TheStream.write(Ptr, Size);
39    }
40
41    /// current_pos - Return the current position within the stream,
42    /// not counting the bytes currently in the buffer.
43    virtual uint64_t current_pos() {
44      // This has the same effect as calling TheStream.current_pos(),
45      // but that interface is private.
46      return TheStream.tell() - TheStream.GetNumBytesInBuffer();
47    }
48
49    /// ComputeColumn - Examine the current output and figure out
50    /// which column we end up in after output.
51    ///
52    void ComputeColumn(const char *Ptr, unsigned Size);
53
54  public:
55    /// formatted_raw_ostream - Open the specified file for
56    /// writing. If an error occurs, information about the error is
57    /// put into ErrorInfo, and the stream should be immediately
58    /// destroyed; the string will be empty if no error occurred.
59    ///
60    /// \param Filename - The file to open. If this is "-" then the
61    /// stream will use stdout instead.
62    /// \param Binary - The file should be opened in binary mode on
63    /// platforms that support this distinction.
64    formatted_raw_ostream(raw_ostream &Stream)
65        : raw_ostream(), TheStream(Stream), Column(0) {}
66
67    /// PadToColumn - Align the output to some column number.
68    ///
69    /// \param NewCol - The column to move to.
70    /// \param MinPad - The minimum space to give after the most
71    /// recent I/O, even if the current column + minpad > newcol.
72    ///
73    void PadToColumn(unsigned NewCol, unsigned MinPad = 0);
74  };
75}
76
77#endif
78