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