brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 2b2266e Raw
78 lines · c
1//===- FormatUtil.h ------------------------------------------- *- C++ --*-===//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 LLDB_TOOLS_LLDB_TEST_FORMATUTIL_H10#define LLDB_TOOLS_LLDB_TEST_FORMATUTIL_H11 12#include "llvm/ADT/ArrayRef.h"13#include "llvm/ADT/StringRef.h"14#include "llvm/ADT/Twine.h"15#include "llvm/Support/FormatVariadic.h"16#include "llvm/Support/raw_ostream.h"17 18#include <list>19 20namespace lldb_private {21 22class LinePrinter {23  llvm::raw_ostream &OS;24  int IndentSpaces;25  int CurrentIndent;26 27public:28  class Line {29    LinePrinter *P;30 31  public:32    Line(LinePrinter &P) : P(&P) { P.OS.indent(P.CurrentIndent); }33    ~Line();34 35    Line(Line &&RHS) : P(RHS.P) { RHS.P = nullptr; }36    void operator=(Line &&) = delete;37 38    operator llvm::raw_ostream &() { return P->OS; }39  };40 41  LinePrinter(int Indent, llvm::raw_ostream &Stream);42 43  void Indent(uint32_t Amount = 0);44  void Unindent(uint32_t Amount = 0);45  void NewLine();46 47  void printLine(const llvm::Twine &T) { line() << T; }48  template <typename... Ts> void formatLine(const char *Fmt, Ts &&... Items) {49    printLine(llvm::formatv(Fmt, std::forward<Ts>(Items)...));50  }51 52  void formatBinary(llvm::StringRef Label, llvm::ArrayRef<uint8_t> Data,53                    uint32_t StartOffset);54  void formatBinary(llvm::StringRef Label, llvm::ArrayRef<uint8_t> Data,55                    uint64_t BaseAddr, uint32_t StartOffset);56 57  Line line() { return Line(*this); }58  int getIndentLevel() const { return CurrentIndent; }59};60 61struct AutoIndent {62  explicit AutoIndent(LinePrinter &L, uint32_t Amount = 0)63      : L(&L), Amount(Amount) {64    L.Indent(Amount);65  }66  ~AutoIndent() {67    if (L)68      L->Unindent(Amount);69  }70 71  LinePrinter *L = nullptr;72  uint32_t Amount = 0;73};74 75} // namespace lldb_private76 77#endif78