18 bool uses_64bit_storage)
20 if (!Config::enable_integer)
22 return ResolvedField{.error = Error::ArgumentTypeMismatch};
24 if (uses_64bit_storage && !Config::enable_integer_64bit)
26 return ResolvedField{.error = Error::ArgumentTypeMismatch};
29 if (parsed.has_precision)
31 return ResolvedField{.error = Error::ArgumentTypeMismatch};
34 if (parsed.presentation ==
'c')
36 if (parsed.alternate ||
HasSignOption(parsed) || parsed.zero_pad)
38 return ResolvedField{.error = Error::ArgumentTypeMismatch};
40 return ResolvedField{.field =
MakeField(parsed, FormatType::Character,
41 FormatPackKind::Character)};
48 return ResolvedField{.error = Error::ArgumentTypeMismatch};
52 return ResolvedField{.error = Error::ArgumentTypeMismatch};
59 uses_64bit_storage ? FormatType::Signed64
60 : FormatType::Signed32,
61 uses_64bit_storage ? FormatPackKind::I64
62 : FormatPackKind::I32)};
67 uses_64bit_storage ? FormatType::Unsigned64
68 : FormatType::Unsigned32,
69 uses_64bit_storage ? FormatPackKind::U64
70 : FormatPackKind::U32)};
73 if (!Config::enable_integer_base8_16 ||
HasSignOption(parsed))
75 return ResolvedField{.error = Error::ArgumentTypeMismatch};
78 switch (parsed.presentation)
83 uses_64bit_storage ? FormatType::Binary64
84 : FormatType::Binary32,
85 uses_64bit_storage ? FormatPackKind::U64
86 : FormatPackKind::U32)};
90 uses_64bit_storage ? FormatType::Binary64
91 : FormatType::Binary32,
92 uses_64bit_storage ? FormatPackKind::U64
93 : FormatPackKind::U32,
98 uses_64bit_storage ? FormatType::Octal64
99 : FormatType::Octal32,
100 uses_64bit_storage ? FormatPackKind::U64
101 : FormatPackKind::U32)};
105 uses_64bit_storage ? FormatType::HexLower64
106 : FormatType::HexLower32,
107 uses_64bit_storage ? FormatPackKind::U64
108 : FormatPackKind::U32)};
112 uses_64bit_storage ? FormatType::HexUpper64
113 : FormatType::HexUpper32,
114 uses_64bit_storage ? FormatPackKind::U64
115 : FormatPackKind::U32,
118 return ResolvedField{.error = Error::ArgumentTypeMismatch};
143 if (parsed.presentation != 0 && parsed.presentation !=
'c')
145 return ResolvedField{.error = Error::ArgumentTypeMismatch};
147 if (parsed.alternate ||
HasSignOption(parsed) || parsed.zero_pad || parsed.has_precision)
149 return ResolvedField{.error = Error::ArgumentTypeMismatch};
151 if (!Config::enable_text)
153 return ResolvedField{.error = Error::ArgumentTypeMismatch};
156 ParsedField adjusted = parsed;
157 if (adjusted.align == Align::None)
159 adjusted.align = Align::Left;
162 return ResolvedField{
163 .field =
MakeField(adjusted, FormatType::Character, FormatPackKind::Character)};
173 if (parsed.presentation != 0 && parsed.presentation !=
's')
175 return ResolvedField{.error = Error::ArgumentTypeMismatch};
177 if (parsed.alternate ||
HasSignOption(parsed) || parsed.zero_pad)
179 return ResolvedField{.error = Error::ArgumentTypeMismatch};
181 if (!Config::enable_text)
183 return ResolvedField{.error = Error::ArgumentTypeMismatch};
186 ParsedField adjusted = parsed;
187 if (adjusted.align == Align::None)
189 adjusted.align = Align::Left;
192 return ResolvedField{
193 .field =
MakeField(adjusted, FormatType::String, FormatPackKind::StringView)};
203 if (parsed.presentation != 0 && parsed.presentation !=
'p')
205 return ResolvedField{.error = Error::ArgumentTypeMismatch};
207 if (parsed.alternate ||
HasSignOption(parsed) || parsed.zero_pad || parsed.has_precision)
209 return ResolvedField{.error = Error::ArgumentTypeMismatch};
211 if (!Config::enable_pointer)
213 return ResolvedField{.error = Error::ArgumentTypeMismatch};
216 return ResolvedField{
217 .field =
MakeField(parsed, FormatType::Pointer, FormatPackKind::Pointer)};
constexpr FormatField MakeField(const ParsedField &parsed, FormatType type, FormatPackKind pack, bool upper_case=false)
根据 brace 字段属性构造一条共享 FormatField 记录 / Build one shared FormatField record from parsed brace-field prop...