Packages

package unparsers

Ordering
  1. Alphabetic
Visibility
  1. Public
  2. All

Type Members

  1. class AlignmentFillUnparser extends AlignmentPrimUnparser with SuspendableUnparser
  2. trait AlignmentFillUnparserSuspendableMixin extends AnyRef
  3. class AlignmentFillUnparserSuspendableOperation extends SuspendableOperation with AlignmentFillUnparserSuspendableMixin
  4. abstract class BCDDecimalBaseUnparser extends PackedBinaryDecimalBaseUnparser
  5. final class BCDDecimalDelimitedUnparser extends BCDDecimalBaseUnparser
  6. class BCDDecimalKnownLengthUnparser extends BCDDecimalBaseUnparser with HasKnownLengthInBits
  7. final class BCDDecimalPrefixedLengthUnparser extends BCDDecimalBaseUnparser with KnownPrefixedLengthUnparserMixin
  8. class BCDDecimalRuntimeLengthUnparser extends BCDDecimalBaseUnparser with HasRuntimeExplicitLength
  9. abstract class BCDIntegerBaseUnparser extends PackedBinaryIntegerBaseUnparser
  10. final class BCDIntegerDelimitedUnparser extends BCDIntegerBaseUnparser
  11. class BCDIntegerKnownLengthUnparser extends BCDIntegerBaseUnparser with HasKnownLengthInBits
  12. final class BCDIntegerPrefixedLengthUnparser extends BCDIntegerBaseUnparser with KnownPrefixedLengthUnparserMixin
  13. class BCDIntegerRuntimeLengthUnparser extends BCDIntegerBaseUnparser with HasRuntimeExplicitLength
  14. class BinaryBooleanPrefixedLengthUnparser extends BinaryBooleanUnparserBase with KnownPrefixedLengthUnparserMixin
  15. class BinaryBooleanUnparser extends BinaryBooleanUnparserBase
  16. abstract class BinaryBooleanUnparserBase extends PrimUnparser
  17. class BinaryDecimalKnownLengthUnparser extends BinaryDecimalUnparserBase with HasKnownLengthInBits
  18. class BinaryDecimalPrefixedLengthUnparser extends BinaryDecimalUnparserBase with KnownPrefixedLengthUnparserMixin
  19. class BinaryDecimalRuntimeLengthUnparser extends BinaryDecimalUnparserBase with HasRuntimeExplicitLength
  20. abstract class BinaryDecimalUnparserBase extends BinaryNumberBaseUnparser
  21. class BinaryDoubleUnparser extends BinaryNumberBaseUnparser
  22. class BinaryFloatUnparser extends BinaryNumberBaseUnparser
  23. abstract class BinaryIntegerBaseUnparser extends BinaryNumberBaseUnparser
  24. class BinaryIntegerKnownLengthUnparser extends BinaryIntegerBaseUnparser with HasKnownLengthInBits
  25. class BinaryIntegerPrefixedLengthUnparser extends BinaryIntegerBaseUnparser with KnownPrefixedLengthUnparserMixin
  26. class BinaryIntegerRuntimeLengthUnparser extends BinaryIntegerBaseUnparser with HasRuntimeExplicitLength
  27. abstract class BinaryNumberBaseUnparser extends PrimUnparser
  28. final class BlobSpecifiedLengthUnparser extends BlobUnparserBase
  29. abstract class BlobUnparserBase extends PrimUnparser
  30. trait CalculatedPrefixedLengthUnparserMixin extends AnyRef

    This trait is to be used with prefixed length unparsers where the length must be calculated based on the value length of the data.

    This trait is to be used with prefixed length unparsers where the length must be calculated based on the value length of the data. This means the data must be unparsed, the value length calculated, and that value will be assigned to the prefix length element.

  31. class CaptureEndOfContentLengthUnparser extends PrimUnparser
  32. class CaptureEndOfValueLengthUnparser extends PrimUnparser
  33. class CaptureStartOfContentLengthUnparser extends PrimUnparser
  34. class CaptureStartOfValueLengthUnparser extends PrimUnparser
  35. trait CaptureUnparsingValueLength extends AnyRef
  36. class ChoiceBranchEmptyUnparser extends PrimUnparserNoData
  37. case class ChoiceBranchMap(lookupTable: Map[ChoiceBranchEvent, Unparser], unmappedDefault: Option[Unparser]) extends PreSerialization with Product with Serializable
  38. class ChoiceCombinatorUnparser extends CombinatorUnparser with ToBriefXMLImpl
  39. class ChoiceUnusedUnparser extends PrimUnparser with SuspendableUnparser
  40. class ChoiceUnusedUnparserSuspendableOperation extends SuspendableOperation with StreamSplitter with SkipTheBits
  41. case class ComplexNilOrContentUnparser(ctxt: ElementRuntimeData, nilUnparser: Unparser, contentUnparser: Unparser) extends CombinatorUnparser with Product with Serializable
  42. case class ConvertBinaryCalendarSecMilliUnparser(context: ElementRuntimeData, binCalRep: BinaryCalendarRep, epochTimeMillis: Long, lengthInBits: Int, hasTZ: Boolean) extends PrimUnparser with Product with Serializable
  43. case class ConvertNonBaseTenTextNumberUnparser(context: ElementRuntimeData, base: Int) extends TextPrimUnparser with Product with Serializable
  44. case class ConvertTextBooleanUnparser(erd: ElementRuntimeData, textBooleanTrueRepEv: TextBooleanTrueRepEv, textBooleanFalseRepEv: TextBooleanFalseRepEv) extends TextPrimUnparser with Product with Serializable
  45. case class ConvertTextCalendarUnparser(erd: ElementRuntimeData, pattern: String, localeEv: CalendarLanguageEv, calendarEv: CalendarEv) extends ConvertTextCalendarProcessorBase with TextPrimUnparser with Product with Serializable
  46. case class ConvertTextCombinatorUnparser(rd: TermRuntimeData, valueUnparser: Unparser, converterUnparser: Unparser) extends CombinatorUnparser with Product with Serializable
  47. case class ConvertTextNumberUnparser(textNumberFormatEv: TextNumberFormatEv, zeroRep: Maybe[String], context: ElementRuntimeData) extends PrimUnparser with ToBriefXMLImpl with Product with Serializable
  48. case class ConvertZonedCombinatorUnparser(rd: TermRuntimeData, valueUnparser: Unparser, converterUnparser: Unparser) extends CombinatorUnparser with Product with Serializable
  49. case class ConvertZonedNumberUnparser(opl: util.DecimalUtils.OverpunchLocation.Value, zonedSignStyle: TextZonedSignStyle, context: ElementRuntimeData) extends PrimUnparser with ToBriefXMLImpl with Product with Serializable
  50. class DelimiterStackUnparser extends CombinatorUnparser
  51. class DelimiterTextUnparser extends TextPrimUnparser
  52. class DynamicEscapeSchemeUnparser extends CombinatorUnparser
  53. class ElementOVCSpecifiedLengthUnparser extends ElementUnparserBase with OVCStartEndStrategy with ElementSpecifiedLengthMixin
  54. class ElementOVCSpecifiedLengthUnparserSuspendableExpression extends SuspendableExpression

    For dfdl:outputValueCalc elements.

  55. class ElementOVCUnspecifiedLengthUnparser extends ElementUnparserBase with OVCStartEndStrategy with RepMoveMixin
  56. trait ElementSpecifiedLengthMixin extends AnyRef
  57. class ElementSpecifiedLengthUnparser extends ElementUnparserBase with RegularElementUnparserStartEndStrategy with ElementSpecifiedLengthMixin

    For regular (not dfdl:outputValueCalc) elements.

  58. sealed abstract class ElementUnparserBase extends CombinatorUnparser with RepMoveMixin with ElementUnparserStartEndStrategy

    Base class for unparsing elements

    Base class for unparsing elements

    Depends on use of separate unparsers for the padding/fill regions which calculate their own sizes, generally after the length of the value region has been determined.

  59. class ElementUnparserInputValueCalc extends ElementUnparserBase with RegularElementUnparserStartEndStrategy

    The unparser used for an element that has inputValueCalc.

    The unparser used for an element that has inputValueCalc.

    The only thing we do is move over one child element, because the inputValueCalc element does take up one child element position. However, not in the group - because that is what is used to decide whether to place separators, and there should not be any separator corresponding to an IVC element.

  60. sealed trait ElementUnparserStartEndStrategy extends AnyRef

    specifies the way the element will consume infoset events,

  61. class ElementUnspecifiedLengthUnparser extends ElementUnparserBase with RegularElementUnparserStartEndStrategy with RepMoveMixin

    Elements that, when unparsing, have no length specified.

    Elements that, when unparsing, have no length specified.

    That is, lengtKind delimited, pattern, and implicit(for complexTypes)

  62. class ElementUnusedUnparser extends PrimUnparser with SuspendableUnparser
  63. class ElementUnusedUnparserSuspendableOperation extends SuspendableOperation with SkipTheBits with NeedValueAndTargetLengthMixin
  64. final class HexBinaryLengthPrefixedUnparser extends HexBinaryMinLengthInBytesUnparser with KnownPrefixedLengthUnparserMixin
  65. class HexBinaryMinLengthInBytesUnparser extends HexBinaryUnparserBase
  66. final class HexBinarySpecifiedLengthUnparser extends HexBinaryUnparserBase
  67. abstract class HexBinaryUnparserBase extends PrimUnparser
  68. class HexBinaryZeroLengthDetector extends ZeroLengthDetector with HexBinaryZeroLengthMixin

    Use when the element is of simple type hexBinary, not nillable.

  69. sealed trait HexBinaryZeroLengthMixin extends AnyRef
  70. class HiddenGroupCombinatorUnparser extends CombinatorUnparser

    The purpose of this combinator is to increment/decrement the depth counter for hidden groups, and call the group's unparser.

    The purpose of this combinator is to increment/decrement the depth counter for hidden groups, and call the group's unparser. As we get deeper into the hiddenGroupRefs, we'll increment the counter, call the group's unparser, and as we unwind from the refs, we'll decrement.

  71. abstract class IBM4690PackedDecimalBaseUnparser extends PackedBinaryDecimalBaseUnparser
  72. final class IBM4690PackedDecimalDelimitedUnparser extends IBM4690PackedDecimalBaseUnparser
  73. class IBM4690PackedDecimalKnownLengthUnparser extends IBM4690PackedDecimalBaseUnparser with HasKnownLengthInBits
  74. final class IBM4690PackedDecimalPrefixedLengthUnparser extends IBM4690PackedDecimalBaseUnparser with KnownPrefixedLengthUnparserMixin
  75. class IBM4690PackedDecimalRuntimeLengthUnparser extends IBM4690PackedDecimalBaseUnparser with HasRuntimeExplicitLength
  76. abstract class IBM4690PackedIntegerBaseUnparser extends PackedBinaryIntegerBaseUnparser
  77. final class IBM4690PackedIntegerDelimitedUnparser extends IBM4690PackedIntegerBaseUnparser
  78. class IBM4690PackedIntegerKnownLengthUnparser extends IBM4690PackedIntegerBaseUnparser with HasKnownLengthInBits
  79. final class IBM4690PackedIntegerPrefixedLengthUnparser extends IBM4690PackedIntegerBaseUnparser with KnownPrefixedLengthUnparserMixin
  80. class IBM4690PackedIntegerRuntimeLengthUnparser extends IBM4690PackedIntegerBaseUnparser with HasRuntimeExplicitLength
  81. trait KnownPrefixedLengthUnparserMixin extends AnyRef

    This trait is to be used with prefixed length unparsers where the length is known without needing to unparse the data.

    This trait is to be used with prefixed length unparsers where the length is known without needing to unparse the data. This means there is either a fixed length (like in the case of some binary numbers), or the length can be determined completly be inspecting the infoset data (like in the case of packed decimals). The length calculation performed in the getBitLength function, which returns the length of the data in bits.

  82. class LayeredSequenceUnparser extends OrderedUnseparatedSequenceUnparser
  83. class LeftCenteredPaddingUnparser extends OnlyPaddingUnparser
  84. class LeftCenteredPaddingUnparserSuspendableOperation extends OnlyPaddingUnparserSuspendableOperation
  85. class LiteralNilDelimitedEndOfDataUnparser extends StringDelimitedUnparser
  86. class LiteralValueNilOfSpecifiedLengthUnparser extends StringNoTruncateUnparser
  87. class MandatoryTextAlignmentUnparser extends AlignmentFillUnparser with TextProcessor
  88. class NadaUnparser extends PrimUnparser
  89. sealed trait NeedValueAndTargetLengthMixin extends AnyRef

    Several sub-unparsers need to have the value length, and the target length in order to compute their own length.

  90. final class NewVariableInstanceDefaultValueSuspendableExpression extends SuspendableExpression
  91. class NewVariableInstanceEndUnparser extends PrimUnparserNoData
  92. class NewVariableInstanceStartUnparser extends PrimUnparserNoData
  93. class NilLiteralCharacterUnparser extends TextPrimUnparser with SuspendableUnparser
  94. class NilLiteralCharacterUnparserSuspendableOperation extends SuspendableOperation with PaddingUnparserMixin
  95. class NilStringLiteralForUnparserEv extends Evaluatable[String] with InfosetCachedEvaluatable[String]
  96. class NillableHexBinaryZeroLengthDetector extends ZeroLengthDetector with NillableZeroLengthMixin with HexBinaryZeroLengthMixin

    Use for nillable hexBinary when they can be zero length two different ways.

  97. class NillableStringZeroLengthDetector extends ZeroLengthDetector with NillableZeroLengthMixin with StringZeroLengthMixin

    Use for nillable strings when they can be zero length two different ways.

  98. class NillableZeroLengthDetector extends ZeroLengthDetector with NillableZeroLengthMixin

    Use when the characteristics of the nil representation are such that unparsing a nilled element will result in non-zero length.

    Use when the characteristics of the nil representation are such that unparsing a nilled element will result in non-zero length.

    This is used for complex types, and simple types that cannot have a zero-length representation other than the nil representation, meaning not strings, and not hexBinary.

  99. sealed trait NillableZeroLengthMixin extends AnyRef

    Applies to both simple and complex types that are nillable when the nil representation is zero-length, and the non-nil representation cannot be zero length.

  100. trait OVCStartEndStrategy extends ElementUnparserStartEndStrategy
  101. class OnlyPaddingUnparser extends TextPrimUnparser with SuspendableUnparser

    Doesn't matter if we're left or right padding if we're the only padding

  102. class OnlyPaddingUnparserSuspendableOperation extends SuspendableOperation with PaddingUnparserMixin
  103. class OrderedSeparatedSequenceUnparser extends OrderedSequenceUnparserBase
  104. abstract class OrderedSequenceUnparserBase extends CombinatorUnparser
  105. class OrderedUnseparatedSequenceUnparser extends OrderedSequenceUnparserBase
  106. abstract class PackedBinaryBaseUnparser extends PrimUnparser with PackedBinaryConversion
  107. trait PackedBinaryConversion extends AnyRef
  108. abstract class PackedBinaryDecimalBaseUnparser extends PackedBinaryBaseUnparser
  109. abstract class PackedBinaryIntegerBaseUnparser extends PackedBinaryBaseUnparser
  110. abstract class PackedDecimalBaseUnparser extends PackedBinaryDecimalBaseUnparser
  111. final class PackedDecimalDelimitedUnparser extends PackedDecimalBaseUnparser
  112. class PackedDecimalKnownLengthUnparser extends PackedDecimalBaseUnparser with HasKnownLengthInBits
  113. final class PackedDecimalPrefixedLengthUnparser extends PackedDecimalBaseUnparser with KnownPrefixedLengthUnparserMixin
  114. class PackedDecimalRuntimeLengthUnparser extends PackedDecimalBaseUnparser with HasRuntimeExplicitLength
  115. abstract class PackedIntegerBaseUnparser extends PackedBinaryIntegerBaseUnparser
  116. final class PackedIntegerDelimitedUnparser extends PackedIntegerBaseUnparser
  117. class PackedIntegerKnownLengthUnparser extends PackedIntegerBaseUnparser with HasKnownLengthInBits
  118. final class PackedIntegerPrefixedLengthUnparser extends PackedIntegerBaseUnparser with KnownPrefixedLengthUnparserMixin
  119. class PackedIntegerRuntimeLengthUnparser extends PackedIntegerBaseUnparser with HasRuntimeExplicitLength
  120. trait PaddingRuntimeMixin extends AnyRef

    When dfdl:lengthKind is 'explicit' (and dfdl:length is an expression), 'delimited', 'prefixed', 'pattern' the data value is padded to the length given by the XSD minLength facet for type 'xs:string' or dfdl:textOutputMinLength property for other types.

    When dfdl:lengthKind is 'explicit' (and dfdl:length is an expression), 'delimited', 'prefixed', 'pattern' the data value is padded to the length given by the XSD minLength facet for type 'xs:string' or dfdl:textOutputMinLength property for other types.

    dfdl:textOutputMinLength: Only used when dfdl:textPadKind is 'padChar' and dfdl:lengthKind is 'delimited', 'prefixed', 'pattern', 'explicit' (when dfdl:length is an expression) or 'endOfParent', and type is not xs:string Specifies the minimum content length during unparsing for simple types that do not allow the XSD minLength facet to be specified. For dfdl:lengthKind 'delimited', 'pattern' and 'endOfParent' the length units are always characters, for other dfdl:lengthKinds the length units are specified by the dfdl:lengthUnits property. If dfdl:textOutputMinLength is zero or less than the length of the representation text then no padding occurs.

  121. trait PaddingUnparserMixin extends NeedValueAndTargetLengthMixin
  122. class PrefixLengthSuspendableOperation extends SuspendableOperation with CalculatedPrefixedLengthUnparserMixin
  123. final class RegionSplitSuspendableOperation extends SuspendableOperation
  124. class RegionSplitUnparser extends PrimUnparser with SuspendableUnparser

    We need to isolate the regions that we have to test for ZL/notZL for separator suppression.

    We need to isolate the regions that we have to test for ZL/notZL for separator suppression. So we want these regions to not share data output streams with anything outside them.

    To achieve that we split the data output stream using its buffering capabilities. Some of the splits are natural. They are one side of the (potentially suppressed) separator itself. So creating that suspendable unparser for the separator gives us a split.

    The other side of these regions is however, an artificial split.

    To avoid duplication of complex code paths, we create this suspendable unparser that exists purely to split the underlying DOS but maintain all the invariants of the underlying DOS code, i.e., the streams still get finalized (and therefore collapsed) the regular way.

    We are counting on the fact that these objects live on the garbage collected heap, so have unbounded lifetimes, i.e., they aren't recycled in a pool or anything.

    Performance Note: These do not need to capture state like a normal suspension does (e.g., for dfdl:outputValueCalc), as they're not actually suspending any actual unparsing behavior. Just forcing a boundary in the data output streams so that we can use the data output streams to measure the length (zero/non-zero) of unparsed data.

  125. sealed trait RegularElementUnparserStartEndStrategy extends ElementUnparserStartEndStrategy
  126. sealed trait RepMoveMixin extends AnyRef
  127. class RepOrderedSeparatedSequenceChildUnparser extends RepeatingChildUnparser with Separated
  128. class RepOrderedUnseparatedSequenceChildUnparser extends RepeatingChildUnparser with Unseparated
  129. abstract class RepeatingChildUnparser extends SequenceChildUnparser with MinMaxRepeatsMixin with EndArrayChecksMixin

    Base for unparsers of array/optional elements.

    Base for unparsers of array/optional elements.

    The unparse() method unparses exactly one occurrance, does NOT iterate over all the occurrences.

  130. class RightCenteredPaddingUnparser extends OnlyPaddingUnparser
  131. class RightCenteredPaddingUnparserSuspendaableOperation extends OnlyPaddingUnparserSuspendableOperation
  132. class RightFillUnparser extends ElementUnusedUnparser
  133. class RightFillUnparserSuspendableOperation extends ElementUnusedUnparserSuspendableOperation with PaddingUnparserMixin
  134. class ScalarOrderedSeparatedSequenceChildUnparser extends ScalarOrderedSeparatedSequenceChildUnparserBase
  135. sealed abstract class ScalarOrderedSeparatedSequenceChildUnparserBase extends SequenceChildUnparser with Separated
  136. class ScalarOrderedUnseparatedSequenceChildUnparser extends SequenceChildUnparser with Unseparated
  137. trait Separated extends AnyRef
  138. abstract class SequenceChildUnparser extends CombinatorUnparser

    base for unparsers for the children of sequences.

    base for unparsers for the children of sequences.

    There is one sequence child unparser for each child (declared) of the sequence.

    These do not iterate over multiple recurring instances. That iteration happens in the caller. These unparse only a single occurrence when the child unparser is for an array/optional element.

  139. final class SetVariableSuspendableExpression extends SuspendableExpression
  140. final class SetVariableUnparser extends PrimUnparserNoData

    Used when unparsing to evaluate dfdl:setVariable statements.

    Used when unparsing to evaluate dfdl:setVariable statements.

    TODO: Possible bug. This will allow expressions to forward reference, even when the variables are being referenced from expressions that are NOT allowed to forward reference - e.g., property value expressions such as delimiters and byte order.

    This forward suspension is only supposed to be allowed for dfdl:outputValueCalc.

  141. case class SimpleNilOrValueUnparser(ctxt: ElementRuntimeData, nilUnparser: Unparser, valueUnparser: Unparser) extends CombinatorUnparser with Product with Serializable
  142. class SimpleTypeRetryUnparser extends PrimUnparser with SuspendableUnparser
  143. class SimpleTypeRetryUnparserSuspendableOperation extends SuspendableOperation
  144. class SkipRegionUnparser extends AlignmentPrimUnparser
  145. trait SkipTheBits extends AnyRef
  146. final class SpecifiedLengthExplicitImplicitUnparser extends CombinatorUnparser
  147. class SpecifiedLengthPrefixedUnparser extends CombinatorUnparser with CaptureUnparsingValueLength with CalculatedPrefixedLengthUnparserMixin
  148. sealed abstract class SpecifiedLengthUnparserBase extends AnyRef

    Restricts the bits available for unparsing to just those within the specified length computed.

    Restricts the bits available for unparsing to just those within the specified length computed.

    If a unparser (supplied as arg) runs past the available space, that's an unparse error.

    Truncation of strings - the only case where we truncate, and only when dfdl:truncateSpecifiedLengthString is 'yes', is handled elsewhere.

  149. trait StreamSplitter extends AnyRef
  150. sealed class StringDelimitedUnparser extends TextPrimUnparser
  151. class StringMaybeTruncateBitsUnparser extends StringSpecifiedLengthUnparserTruncateBase

    Truncates strings to the right length measured in bits.

    Truncates strings to the right length measured in bits. LengthUnits is Bits, but we still don't know whether the encoding is fixed width or variable width.

  152. class StringMaybeTruncateCharactersUnparser extends StringSpecifiedLengthUnparserTruncateBase

    Truncates strings to the right length measured in characters.

    Truncates strings to the right length measured in characters.

    LengthUnits is 'characters', but we still don't know what encoding so whether it is fixed or variable width.

    What's interesting is that we don't care whether the encoding is fixed or variable width in this case.

    This is more efficient for variable-width encodings than lengthUnits 'bytes' (or bits), because we don't need a pass to measure the number of bits.

    So, for utf-8, we should recommend lengthUnits 'characters' ? Maybe so.

  153. class StringNoTruncateUnparser extends StringSpecifiedLengthUnparserBase
  154. sealed abstract class StringSpecifiedLengthUnparserBase extends TextPrimUnparser
  155. sealed abstract class StringSpecifiedLengthUnparserTruncateBase extends StringSpecifiedLengthUnparserBase
  156. class StringZeroLengthDetector extends ZeroLengthDetector with StringZeroLengthMixin

    Use when the element is of simple type string, not nillable.

  157. sealed trait StringZeroLengthMixin extends AnyRef
  158. final class SuppressableSeparatorUnparser extends PrimUnparser with SuspendableUnparser
  159. final class SuppressableSeparatorUnparserSuspendableOperation extends SuspendableOperation with StreamSplitter with AlignmentFillUnparserSuspendableMixin

    Performance Note: This can be a very special purpose suspension.

    Performance Note: This can be a very special purpose suspension. Unlike the suspensions for dfdl:outputValueCalc, a separator expression can only look backwards to data that is already known. Hence, we can evaluate the separator, and just cache it, and when we decide to unsuspend this, we either blat out that cached data or not. But we need none of the state needed to unparse or evaluate expressions.

  160. class TargetLengthOperation extends SuspendableOperation

    Carries out computation of the target length for a specified-length element.

    Carries out computation of the target length for a specified-length element.

    This is not a SuspendableExpression because the dfdl:length property cannot be forward referencing. However, it can refer backward to elements that have dfdl:outputValueCalc or variables that have not yet been computed. So we have to retry this in order to get the target length used to compute the amount of padding or the amount of unused space.

  161. class TypeValueCalcUnparser extends CombinatorUnparser
  162. trait Unseparated extends AnyRef
  163. sealed trait ZeroLengthDetector extends Serializable

    Rapidly determines if an Infoset Element will have non-zero length when unparsed.

    Rapidly determines if an Infoset Element will have non-zero length when unparsed.

    This enables an important optimization for separator suppression.

    If by looking at the infoset value/nilled status we can tell whether it would be non-zero length immediately, then we don't need to suspend whether to unparse the separator or not, we just unparse it directly.

    Conversely, if we don't know if the value will unparse to zero-length or not, we must use a suspendable unparser for the separator, and that has a lot of overhead. But we avoid this overhead in most cases.

    The specific concrete sub-class is selected based on a compile time analysis of whether the element can have zero length at all, and if so, under what conditions.

Value Members

  1. object NeverZeroLengthDetector extends ZeroLengthDetector

    Use when analysis shows the element can never be zero length.

  2. object NotRepresentedZeroLengthDetector extends ZeroLengthDetector
  3. object PossiblyZeroArrayOccurrencesDetector extends ZeroLengthDetector
  4. object PossiblyZeroLengthModelGroupDetector extends ZeroLengthDetector
  5. object RegionSplitUnparser extends Serializable
  6. object SuppressableSeparatorUnparser extends Serializable

Ungrouped