final class SuppressableSeparatorUnparserSuspendableOperation extends SuspendableOperation with StreamSplitter with AlignmentFillUnparserSuspendableMixin
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.
- Alphabetic
- By Inheritance
- SuppressableSeparatorUnparserSuspendableOperation
- AlignmentFillUnparserSuspendableMixin
- StreamSplitter
- SuspendableOperation
- Suspension
- Serializable
- Serializable
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Instance Constructors
- new SuppressableSeparatorUnparserSuspendableOperation(sepMtaAlignmentMaybe: MaybeInt, sepUnparser: Unparser, rd: TermRuntimeData)
Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
UE(ustate: UState, s: String, args: Any*): Nothing
- Definition Classes
- Suspension
- val alignmentInBits: Int
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
final
def
block(nodeOrVar: AnyRef, info: AnyRef, index: Long, exc: AnyRef): Unit
- Definition Classes
- Suspension
-
final
def
blockedLocation: String
- Definition Classes
- Suspension
- def captureDOSForEndOfSeparatedRegionBeforePostfixSeparator(s: UState): Unit
-
def
captureDOSForStartOfSeparatedRegionBeforePostfixSeparator(s: UState): Unit
Needed for the corner case of suppressing a postfix separator.
Needed for the corner case of suppressing a postfix separator.
Here we need to know whether two regions of data are zero length when dealing with trailingEmpty suppression. The data before the postfix separator must be ZL, and the data to the end of sequence must be ZL. So we have the ability to capture two ranges of buffered data from unparsing.
- def captureStateAtEndOfPotentiallyZeroLengthRegionFollowingTheSeparator(s: UState): Unit
-
def
clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
def
continuation(state: UState): Unit
Once we know whether the length is zero/non-zero, then we decide to unparse the separator or not.
Once we know whether the length is zero/non-zero, then we decide to unparse the separator or not.
If we're positional and potentially trailing, then this will only be Zero length if we're considering unparsing a trailing separator for an empty, with nothing following. So if ZL, no separator, otherwise we unparse the separator.
If we are unparsing a separator, we must also unparse associated MTA alignment if we didn't statically determine that it wasn't needed
- Definition Classes
- SuppressableSeparatorUnparserSuspendableOperation → AlignmentFillUnparserSuspendableMixin → SuspendableOperation
-
final
def
doTask(ustate: UState): Unit
- Attributes
- protected
- Definition Classes
- SuspendableOperation → Suspension
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
explain(): Unit
- Definition Classes
- Suspension
-
def
finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
getDOSFromAtoB(beforeDOS: DataOutputStream, afterDOS: DataOutputStream): Seq[DataOutputStream]
Given two DataOutputStream, determine the set of data output streams starting from the first, and in chain until (and including) we reach the second.
Given two DataOutputStream, determine the set of data output streams starting from the first, and in chain until (and including) we reach the second.
If the two are the same DataOutputStream, we get back a sequence of just the one DOS.
- Definition Classes
- StreamSplitter
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
final
def
isBlocked: Boolean
- Definition Classes
- Suspension
-
final
def
isDone: Boolean
- Definition Classes
- Suspension
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
isMakingProgress: Boolean
- Definition Classes
- Suspension
-
val
isReadOnly: Boolean
- Definition Classes
- Suspension
-
def
maybeKnownLengthInBits(ustate: UState): MaybeULong
- Attributes
- protected
- Definition Classes
- Suspension
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
val
rd: TermRuntimeData
- Definition Classes
- SuppressableSeparatorUnparserSuspendableOperation → AlignmentFillUnparserSuspendableMixin → SuspendableOperation → Suspension
-
final
def
run(ustate: UState): Unit
- Definition Classes
- Suspension
-
final
def
runSuspension(): Unit
- Definition Classes
- Suspension
-
final
def
savedUstate: UState
- Definition Classes
- Suspension
-
final
def
setDone(): Unit
- Definition Classes
- Suspension
-
final
def
setUnblocked(): Unit
- Definition Classes
- Suspension
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
test(ustate: UState): Boolean
Determine if the decision about whether to suppress or not can be taken.
Determine if the decision about whether to suppress or not can be taken.
A trailing separator may be suppressed if the things after it are zero-length to the end of the sequence.
An anyEmpty separator may be suppressed if the separated thing is zero-length.
This must be determined by examining the buffers of unparsed data. Such time as their length is known to be greater than zero the test will return true. If they are finished and length is still zero the test will also return true. Otherwise they are possibly just temporarily of length zero, so we don't know so we return false and the suspension will be retried later.
Also note that this must take into account alignment. However, we only care about alignment if we will create a separator, which only occurs when the zero length status is NonZero. If we determine the zero length status is Zero, no separator will be unparsed, and so MTA should also not be unparsed.
- Definition Classes
- SuppressableSeparatorUnparserSuspendableOperation → AlignmentFillUnparserSuspendableMixin → SuspendableOperation
-
def
toString(): String
- Definition Classes
- SuspendableOperation → AnyRef → Any
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()