iced_x86/formatter/
num_fmt_opts.rs1use crate::formatter::*;
5use core::cmp;
6
7#[derive(Debug, Default, Copy, Clone)]
11pub struct NumberFormattingOptions<'a> {
12 pub prefix: &'a str,
14 pub suffix: &'a str,
16 pub digit_separator: &'a str,
18 pub digit_group_size: u8,
20 pub number_base: NumberBase,
22 pub uppercase_hex: bool,
24 pub small_hex_numbers_in_decimal: bool,
26 pub add_leading_zero_to_hex_numbers: bool,
28 pub leading_zeros: bool,
30 pub signed_number: bool,
32 pub displacement_leading_zeros: bool,
34}
35
36impl<'a> NumberFormattingOptions<'a> {
37 #[inline]
43 #[must_use]
44 pub fn with_immediate(options: &'a FormatterOptions) -> Self {
45 NumberFormattingOptions::new(options, options.leading_zeros(), options.signed_immediate_operands(), false)
46 }
47
48 #[inline]
54 #[must_use]
55 pub fn with_displacement(options: &'a FormatterOptions) -> Self {
56 NumberFormattingOptions::new(options, options.leading_zeros(), options.signed_memory_displacements(), options.displacement_leading_zeros())
57 }
58
59 #[inline]
65 #[must_use]
66 pub fn with_branch(options: &'a FormatterOptions) -> Self {
67 NumberFormattingOptions::new(options, options.branch_leading_zeros(), false, false)
68 }
69
70 #[inline]
79 #[must_use]
80 #[allow(clippy::missing_inline_in_public_items)]
81 pub fn new(options: &'a FormatterOptions, leading_zeros: bool, signed_number: bool, displacement_leading_zeros: bool) -> Self {
82 let (digit_group_size, prefix, suffix) = match options.number_base() {
83 NumberBase::Hexadecimal => (options.hex_digit_group_size(), options.hex_prefix(), options.hex_suffix()),
84 NumberBase::Decimal => (options.decimal_digit_group_size(), options.decimal_prefix(), options.decimal_suffix()),
85 NumberBase::Octal => (options.octal_digit_group_size(), options.octal_prefix(), options.octal_suffix()),
86 NumberBase::Binary => (options.binary_digit_group_size(), options.binary_prefix(), options.binary_suffix()),
87 };
88 Self {
89 prefix,
90 suffix,
91 digit_separator: options.digit_separator(),
92 digit_group_size: cmp::min(u8::MAX as u32, digit_group_size) as u8,
93 number_base: options.number_base(),
94 uppercase_hex: options.uppercase_hex(),
95 small_hex_numbers_in_decimal: options.small_hex_numbers_in_decimal(),
96 add_leading_zero_to_hex_numbers: options.add_leading_zero_to_hex_numbers(),
97 leading_zeros,
98 signed_number,
99 displacement_leading_zeros,
100 }
101 }
102}