61 lines · c
1//===- RenderingSupport.h - output stream rendering support functions ----===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLVM_COV_RENDERINGSUPPORT_H10#define LLVM_COV_RENDERINGSUPPORT_H11 12#include "llvm/Support/raw_ostream.h"13#include <utility>14 15namespace llvm {16 17/// A helper class that resets the output stream's color if needed18/// when destroyed.19class ColoredRawOstream {20 ColoredRawOstream(const ColoredRawOstream &OS) = delete;21 22public:23 raw_ostream &OS;24 bool IsColorUsed;25 26 ColoredRawOstream(raw_ostream &OS, bool IsColorUsed)27 : OS(OS), IsColorUsed(IsColorUsed) {}28 29 ColoredRawOstream(ColoredRawOstream &&Other)30 : OS(Other.OS), IsColorUsed(Other.IsColorUsed) {31 // Reset the other IsColorUsed so that the other object won't reset the32 // color when destroyed.33 Other.IsColorUsed = false;34 }35 36 ~ColoredRawOstream() {37 if (IsColorUsed)38 OS.resetColor();39 }40};41 42template <typename T>43inline raw_ostream &operator<<(const ColoredRawOstream &OS, T &&Value) {44 return OS.OS << std::forward<T>(Value);45}46 47/// Change the color of the output stream if the `IsColorUsed` flag48/// is true. Returns an object that resets the color when destroyed.49inline ColoredRawOstream colored_ostream(raw_ostream &OS,50 raw_ostream::Colors Color,51 bool IsColorUsed = true,52 bool Bold = false, bool BG = false) {53 if (IsColorUsed)54 OS.changeColor(Color, Bold, BG);55 return ColoredRawOstream(OS, IsColorUsed);56}57 58} // namespace llvm59 60#endif // LLVM_COV_RENDERINGSUPPORT_H61