Lines Matching refs:edit
20 static bool EditBOZOutput(IoStatementState &io, const DataEdit &edit, in EditBOZOutput() argument
58 int editWidth{edit.width.value_or(0)}; in EditBOZOutput()
60 if (edit.digits && significant <= *edit.digits) { // Bw.m, Ow.m, Zw.m in EditBOZOutput()
61 if (*edit.digits == 0 && bytes == 0) { in EditBOZOutput()
64 leadingZeroes = *edit.digits - significant; in EditBOZOutput()
100 bool EditIntegerOutput(IoStatementState &io, const DataEdit &edit, in EditIntegerOutput() argument
107 switch (edit.descriptor) { in EditIntegerOutput()
114 if (isNegative || (edit.modes.editingFlags & signPlus)) { in EditIntegerOutput()
125 io, edit, reinterpret_cast<const unsigned char *>(&n), KIND); in EditIntegerOutput()
128 io, edit, reinterpret_cast<const unsigned char *>(&n), KIND); in EditIntegerOutput()
131 io, edit, reinterpret_cast<const unsigned char *>(&n), KIND); in EditIntegerOutput()
134 io, edit, reinterpret_cast<char *>(&n), sizeof n); in EditIntegerOutput()
138 edit.descriptor); in EditIntegerOutput()
144 int editWidth{edit.width.value_or(0)}; in EditIntegerOutput()
145 if (edit.digits && digits <= *edit.digits) { // Iw.m in EditIntegerOutput()
146 if (*edit.digits == 0 && n == 0) { in EditIntegerOutput()
152 leadingZeroes = *edit.digits - digits; in EditIntegerOutput()
162 if (edit.IsListDirected()) { in EditIntegerOutput()
177 int expo, const DataEdit &edit, int &length) { in FormatExponent() argument
186 if (edit.expoDigits) { in FormatExponent()
187 if (int ed{*edit.expoDigits}) { // Ew.dEe with e > 0 in FormatExponent()
201 if (edit.expoDigits || edit.IsListDirected() || exponent + 3 == eEnd) { in FormatExponent()
202 *--exponent = edit.descriptor == 'D' ? 'D' : 'E'; // not 'G' or 'Q' in FormatExponent()
209 const DataEdit &edit, std::size_t length, std::size_t width) { in EmitPrefix() argument
210 if (edit.IsListDirected()) { in EmitPrefix()
211 int prefixLength{edit.descriptor == DataEdit::ListDirectedRealPart ? 2 in EmitPrefix()
212 : edit.descriptor == DataEdit::ListDirectedImaginaryPart ? 0 in EmitPrefix()
214 int suffixLength{edit.descriptor == DataEdit::ListDirectedRealPart || in EmitPrefix()
215 edit.descriptor == DataEdit::ListDirectedImaginaryPart in EmitPrefix()
229 bool RealOutputEditingBase::EmitSuffix(const DataEdit &edit) { in EmitSuffix() argument
230 if (edit.descriptor == DataEdit::ListDirectedRealPart) { in EmitSuffix()
231 return io_.Emit(edit.modes.editingFlags & decimalComma ? ";" : ",", 1); in EmitSuffix()
232 } else if (edit.descriptor == DataEdit::ListDirectedImaginaryPart) { in EmitSuffix()
255 bool RealOutputEditing<binaryPrecision>::EditEorDOutput(const DataEdit &edit) { in EditEorDOutput() argument
256 int editDigits{edit.digits.value_or(0)}; // 'd' field in EditEorDOutput()
257 int editWidth{edit.width.value_or(0)}; // 'w' field in EditEorDOutput()
260 if (edit.modes.editingFlags & signPlus) { in EditEorDOutput()
264 int scale{edit.modes.scale}; // 'kP' value in EditEorDOutput()
266 if (edit.digits.has_value()) { // E0.d in EditEorDOutput()
276 bool isEN{edit.variation == 'N'}; in EditEorDOutput()
277 bool isES{edit.variation == 'S'}; in EditEorDOutput()
307 Convert(significantDigits, edit.modes.round, flags)}; in EditEorDOutput()
309 return EmitPrefix(edit, converted.length, editWidth) && in EditEorDOutput()
310 io_.Emit(converted.str, converted.length) && EmitSuffix(edit); in EditEorDOutput()
342 FormatExponent(converted.decimalExponent, edit, expoLength)}; in EditEorDOutput()
367 return EmitPrefix(edit, totalLength, width) && in EditEorDOutput()
370 io_.Emit(edit.modes.editingFlags & decimalComma ? "," : ".", 1) && in EditEorDOutput()
375 io_.Emit(exponent, expoLength) && EmitSuffix(edit); in EditEorDOutput()
381 bool RealOutputEditing<binaryPrecision>::EditFOutput(const DataEdit &edit) { in EditFOutput() argument
382 int fracDigits{edit.digits.value_or(0)}; // 'd' field in EditFOutput()
383 const int editWidth{edit.width.value_or(0)}; // 'w' field in EditFOutput()
384 enum decimal::FortranRounding rounding{edit.modes.round}; in EditFOutput() enumerator
386 if (edit.modes.editingFlags & signPlus) { in EditFOutput()
390 if (!edit.digits.has_value()) { // F0 in EditFOutput()
403 return EmitPrefix(edit, converted.length, editWidth) && in EditFOutput()
404 io_.Emit(converted.str, converted.length) && EmitSuffix(edit); in EditFOutput()
406 int expo{converted.decimalExponent + edit.modes.scale /*kP*/}; in EditFOutput()
416 if (!edit.digits.has_value()) { // F0 in EditFOutput()
427 rounding != edit.modes.round && // it changed below in EditFOutput()
472 return EmitPrefix(edit, totalLength, width) && in EditFOutput()
475 io_.Emit(edit.modes.editingFlags & decimalComma ? "," : ".", 1) && in EditFOutput()
481 io_.EmitRepeated(' ', trailingBlanks_) && EmitSuffix(edit); in EditFOutput()
487 DataEdit RealOutputEditing<binaryPrecision>::EditForGOutput(DataEdit edit) { in EditForGOutput() argument
488 edit.descriptor = 'E'; in EditForGOutput()
489 int editWidth{edit.width.value_or(0)}; in EditForGOutput()
491 edit.digits.value_or(BinaryFloatingPoint::decimalPrecision)}; // 'd' in EditForGOutput()
493 return edit; // Gw.0Ee -> Ew.0Ee for w > 0 in EditForGOutput()
496 if (edit.modes.editingFlags & signPlus) { in EditForGOutput()
500 Convert(significantDigits, edit.modes.round, flags)}; in EditForGOutput()
502 return edit; // Inf/Nan -> Ew.d (same as Fw.d) in EditForGOutput()
506 if (editWidth == 0 && !edit.expoDigits) { // G0.d -> G0.dE0 in EditForGOutput()
507 edit.expoDigits = 0; in EditForGOutput()
509 return edit; // Ew.dEe in EditForGOutput()
511 edit.descriptor = 'F'; in EditForGOutput()
512 edit.modes.scale = 0; // kP is ignored for G when no exponent field in EditForGOutput()
515 int expoDigits{edit.expoDigits.value_or(0)}; in EditForGOutput()
517 *edit.width = std::max(0, editWidth - trailingBlanks_); in EditForGOutput()
519 if (edit.digits.has_value()) { in EditForGOutput()
520 *edit.digits = std::max(0, *edit.digits - expo); in EditForGOutput()
522 return edit; in EditForGOutput()
528 const DataEdit &edit) { in EditListDirectedOutput() argument
529 decimal::ConversionToDecimalResult converted{Convert(1, edit.modes.round)}; in EditListDirectedOutput()
531 return EditEorDOutput(edit); in EditListDirectedOutput()
540 DataEdit copy{edit}; in EditListDirectedOutput()
544 return EditFOutput(edit); in EditListDirectedOutput()
554 template <int KIND> bool RealOutputEditing<KIND>::Edit(const DataEdit &edit) { in Edit() argument
555 switch (edit.descriptor) { in Edit()
557 return EditEorDOutput(edit); in Edit()
559 if (edit.variation == 'X') { in Edit()
560 return EditEXOutput(edit); in Edit()
562 return EditEorDOutput(edit); in Edit()
565 return EditFOutput(edit); in Edit()
567 return EditBOZOutput<1>(io_, edit, in Edit()
571 return EditBOZOutput<3>(io_, edit, in Edit()
575 return EditBOZOutput<4>(io_, edit, in Edit()
579 return Edit(EditForGOutput(edit)); in Edit()
582 io_, edit, reinterpret_cast<char *>(&x_), sizeof x_); in Edit()
584 if (edit.IsListDirected()) { in Edit()
585 return EditListDirectedOutput(edit); in Edit()
589 edit.descriptor); in Edit()
600 bool EditLogicalOutput(IoStatementState &io, const DataEdit &edit, bool truth) { in EditLogicalOutput() argument
601 switch (edit.descriptor) { in EditLogicalOutput()
604 return io.EmitRepeated(' ', std::max(0, edit.width.value_or(1) - 1)) && in EditLogicalOutput()
607 return EditBOZOutput<1>(io, edit, in EditLogicalOutput()
610 return EditBOZOutput<3>(io, edit, in EditLogicalOutput()
613 return EditBOZOutput<4>(io, edit, in EditLogicalOutput()
618 edit.descriptor); in EditLogicalOutput()
678 bool EditCharacterOutput(IoStatementState &io, const DataEdit &edit, in EditCharacterOutput() argument
681 int width{edit.width.value_or(len)}; in EditCharacterOutput()
682 switch (edit.descriptor) { in EditCharacterOutput()
691 return EditBOZOutput<1>(io, edit, in EditCharacterOutput()
694 return EditBOZOutput<3>(io, edit, in EditCharacterOutput()
697 return EditBOZOutput<4>(io, edit, in EditCharacterOutput()
702 edit.descriptor); in EditCharacterOutput()