LLVM 22.0.0git
FormatCommon.h
Go to the documentation of this file.
1//===- FormatCommon.h - Formatters for common LLVM types --------*- 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-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLVM_SUPPORT_FORMATCOMMON_H
10#define LLVM_SUPPORT_FORMATCOMMON_H
11
15
16namespace llvm {
17enum class AlignStyle { Left, Center, Right };
18
19/// Helper class to format to a \p Width wide field, with alignment \p Where
20/// within that field.
21struct FmtAlign {
24 unsigned Width;
25 char Fill;
26
30
32 // If we don't need to align, we can format straight into the underlying
33 // stream. Otherwise we have to go through an intermediate stream first
34 // in order to calculate how long the output is so we can align it.
35 // TODO: Make the format method return the number of bytes written, that
36 // way we can also skip the intermediate stream for left-aligned output.
37 if (Width == 0) {
38 Adapter.format(S, Options);
39 return;
40 }
41 SmallString<64> Item;
42 raw_svector_ostream Stream(Item);
43
44 Adapter.format(Stream, Options);
45 if (Width <= Item.size()) {
46 S << Item;
47 return;
48 }
49
50 unsigned PadAmount = Width - static_cast<unsigned>(Item.size());
51 switch (Where) {
53 S << Item;
54 fill(S, PadAmount);
55 break;
56 case AlignStyle::Center: {
57 unsigned X = PadAmount / 2;
58 fill(S, X);
59 S << Item;
60 fill(S, PadAmount - X);
61 break;
62 }
63 default:
64 fill(S, PadAmount);
65 S << Item;
66 break;
67 }
68 }
69
70private:
71 void fill(llvm::raw_ostream &S, unsigned Count) {
72 for (unsigned I = 0; I < Count; ++I)
73 S << Fill;
74 }
75};
76}
77
78#endif
static LVOptions Options
Definition LVOptions.cpp:25
#define I(x, y, z)
Definition MD5.cpp:58
This file defines the SmallString class.
static TableGen::Emitter::OptClass< SkeletonEmitter > X("gen-skeleton-class", "Generate example skeleton class")
SmallString - A SmallString is just a SmallVector with methods and accessors that make it work better...
Definition SmallString.h:26
StringRef - Represent a constant reference to a string, i.e.
Definition StringRef.h:55
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition raw_ostream.h:53
A raw_ostream that writes to an SmallVector or SmallString.
This is an optimization pass for GlobalISel generic memory operations.
void fill(R &&Range, T &&Value)
Provide wrappers to std::fill which take ranges instead of having to pass begin/end explicitly.
Definition STLExtras.h:1747
FunctionAddr VTableAddr Count
Definition InstrProf.h:139
void format(raw_ostream &S, StringRef Options)
FmtAlign(support::detail::format_adapter &Adapter, AlignStyle Where, unsigned Width, char Fill=' ')
support::detail::format_adapter & Adapter
AlignStyle Where