blob: d9919e5dafad6958d57520fa3288d41637a28f0b [file] [log] [blame]
//===- CommandLineStatusOutput.h --------------------------------*- C++ -*-===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
#ifndef LLBUILD_COMMANDS_COMMANDLINESTATUSOUTPUT_H
#define LLBUILD_COMMANDS_COMMANDLINESTATUSOUTPUT_H
#include <string>
namespace llbuild {
namespace commands {
/// Utility class for writing out progress or status information to a terminal
/// which abstracts out support for ANSI compliant terminals.
class CommandLineStatusOutput {
void *impl;
public:
CommandLineStatusOutput();
~CommandLineStatusOutput();
/// Open the output stream for writing.
bool open(std::string* error_out);
/// Close the output stream and clear any incomplete output.
bool close(std::string* error_out);
/// Check if the attached output device can update (rewrite) the current line.
bool canUpdateCurrentLine() const;
/// Clear the current output.
///
/// This requires that \see canUpdateCurrentLine() is true.
void clearOutput();
/// Update the current line of output text.
void setCurrentLine(const std::string& text);
/// Update the current line of output text, if possible, otherwise simply
/// write it out.
///
/// The text should be a single line with no newlines or carriage returns.
void setOrWriteLine(const std::string& text);
/// Finish writing the current line, if necessary.
void finishLine();
/// Write a non-overwritable block of text to the output.
///
/// Any text written by this method should always end with a newline.
void writeText(const std::string& text);
};
}
}
#endif