1 //===- NativeFormatting.h - Low level formatting helpers ---------*- 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_NATIVEFORMATTING_H
10 #define LLVM_SUPPORT_NATIVEFORMATTING_H
11 
12 #include <cstdint>
13 #include <optional>
14 
15 namespace llvm {
16 class raw_ostream;
17 enum class FloatStyle { Exponent, ExponentUpper, Fixed, Percent };
18 enum class IntegerStyle {
19   Integer,
20   Number,
21 };
22 enum class HexPrintStyle { Upper, Lower, PrefixUpper, PrefixLower };
23 
24 size_t getDefaultPrecision(FloatStyle Style);
25 
26 bool isPrefixedHexStyle(HexPrintStyle S);
27 
28 void write_integer(raw_ostream &S, unsigned int N, size_t MinDigits,
29                    IntegerStyle Style);
30 void write_integer(raw_ostream &S, int N, size_t MinDigits, IntegerStyle Style);
31 void write_integer(raw_ostream &S, unsigned long N, size_t MinDigits,
32                    IntegerStyle Style);
33 void write_integer(raw_ostream &S, long N, size_t MinDigits,
34                    IntegerStyle Style);
35 void write_integer(raw_ostream &S, unsigned long long N, size_t MinDigits,
36                    IntegerStyle Style);
37 void write_integer(raw_ostream &S, long long N, size_t MinDigits,
38                    IntegerStyle Style);
39 
40 void write_hex(raw_ostream &S, uint64_t N, HexPrintStyle Style,
41                std::optional<size_t> Width = std::nullopt);
42 void write_double(raw_ostream &S, double D, FloatStyle Style,
43                   std::optional<size_t> Precision = std::nullopt);
44 }
45 
46 #endif
47 
48