brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · 0674fba Raw
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