Package

scodec.stream

decode

Permalink

package decode

Module containing various streaming decoding combinators. Decoding errors are represented using scodec.stream.decode.DecodingError.

Source
package.scala
Linear Supertypes
AnyRef, Any
Ordering
  1. Alphabetic
  2. By inheritance
Inherited
  1. decode
  2. AnyRef
  3. Any
  1. Hide All
  2. Show all
Visibility
  1. Public
  2. All

Type Members

  1. case class Cursor[+A](run: (BitVector) ⇒ Attempt[DecodeResult[A]]) extends Product with Serializable

    Permalink
  2. case class DecodingError(err: Err) extends Exception with Product with Serializable

    Permalink
  3. trait StreamDecoder[+A] extends AnyRef

    Permalink

    A streaming decoding process, represented as a stream of state actions on scodec.bits.BitVector.

    A streaming decoding process, represented as a stream of state actions on scodec.bits.BitVector. Most clients will typically use one of the decoding convenience methods on this class, rather than using decoder directly.

Value Members

  1. object Cursor extends Serializable

    Permalink
  2. object StreamDecoder

    Permalink
  3. def advance(n: Long): StreamDecoder[Nothing]

    Permalink

    Advance the input by the given number of bits, purely as an effect.

  4. def ask: StreamDecoder[BitVector]

    Permalink

    Obtain the current input.

    Obtain the current input. This stream returns a single element.

  5. def drop(n: Long): StreamDecoder[BitVector]

    Permalink

    Advance the input by the given number of bits.

  6. def emit[A](a: A): StreamDecoder[A]

    Permalink

    The decoder that consumes no input, emits the given a, then halts.

  7. def emitAll[A](as: Seq[A]): StreamDecoder[A]

    Permalink

    The decoder that consumes no input, emits the given A values, then halts.

  8. def fail(err: Err): StreamDecoder[Nothing]

    Permalink

    The decoder that consumes no input and halts with the given error.

  9. def fail(err: Throwable): StreamDecoder[Nothing]

    Permalink

    The decoder that consumes no input and halts with the given error.

  10. val halt: StreamDecoder[Nothing]

    Permalink

    The decoder that consumes no input and emits no values.

  11. def isolate[A](numberOfBits: Long)(d: ⇒ StreamDecoder[A]): StreamDecoder[A]

    Permalink

    Run the given StreamDecoder using only the first numberOfBits bits of the current stream, then advance the cursor by that many bits on completion.

  12. def isolateBytes[A](numberOfBytes: Long)(d: ⇒ StreamDecoder[A]): StreamDecoder[A]

    Permalink

    Run the given StreamDecoder using only the first numberOfBytes bytes of the current stream, then advance the cursor by that many bytes on completion.

  13. def many[A](implicit A: Lazy[Decoder[A]]): StreamDecoder[A]

    Permalink

    Parse a stream of A values from the input, using the given decoder.

    Parse a stream of A values from the input, using the given decoder. The returned stream terminates normally if the final value decoded exhausts in and leaves no trailing bits. The returned stream terminates with an error if the Decoder[A] ever fails on the input.

  14. def many1[A](implicit A: Lazy[Decoder[A]]): StreamDecoder[A]

    Permalink

    Like scodec.stream.decode.many, but fails with an error if no elements are decoded.

    Like scodec.stream.decode.many, but fails with an error if no elements are decoded. The returned stream will have at least one element if it succeeds.

  15. def manyChunked[A](chunkSize: Int)(implicit A: Lazy[Decoder[A]]): StreamDecoder[A]

    Permalink

    Like many, but reads up to chunkSize elements from the stream at a time, to minimize overhead.

    Like many, but reads up to chunkSize elements from the stream at a time, to minimize overhead. Since this "reads ahead" in the stream, it can't be used predictably when the returned decoder will be interleaved with another decoder, as in sepBy, or any other combinator that uses tee.

  16. def modify(f: (BitVector) ⇒ BitVector): StreamDecoder[BitVector]

    Permalink

    Modify the current input.

    Modify the current input. This stream returns a single element.

  17. def once[A](implicit A: Lazy[Decoder[A]]): StreamDecoder[A]

    Permalink

    Run the given Decoder once and emit its result, if successful.

  18. def or[A](p1: StreamDecoder[A], p2: StreamDecoder[A]): StreamDecoder[A]

    Permalink

    Runs p1, then runs p2 if p1 emits no elements.

    Runs p1, then runs p2 if p1 emits no elements. Example: or(tryOnce(codecs.int32), once(codecs.uint32)). This function does no backtracking of its own; backtracking should be handled by p1.

  19. def peek[A](d: StreamDecoder[A]): StreamDecoder[A]

    Permalink

    Run this decoder, but leave its input unconsumed.

    Run this decoder, but leave its input unconsumed. Note that this requires keeping the current stream in memory for as long as the given decoder takes to complete.

  20. def process[A](implicit A: Lazy[Decoder[A]]): Process1[BitVector, A]

    Permalink

    Promote a decoder to a Process1.

    Promote a decoder to a Process1. The returned Process1 may be given chunks larger or smaller than what is needed to decode a single element, and will buffer any unconsumed input, but a decoding error will result if the decoder fails for a reason other than Err.InsufficientBits.

    This combinator relies on the decoder satisfying the following property: If successful on input x, A should also succeed with the same value given input x ++ y, for any choice of y. This ensures the decoder can be given more input than it needs without affecting correctness, and generally restricts this combinator to being used with "self-delimited" decoders. Using this combinator with a decoder not satisfying this property will make results highly dependent on the sequence of chunk sizes passed to the process.

  21. def sepBy[A, D](implicit A: Lazy[Decoder[A]], D: Lazy[Decoder[D]]): StreamDecoder[A]

    Permalink

    Like many, but parses and ignores a D delimiter value in between decoding each A value.

  22. def sepBy1[A, D](implicit A: Lazy[Decoder[A]], D: Lazy[Decoder[D]]): StreamDecoder[A]

    Permalink

    Like scodec.stream.decode.sepBy, but fails with an error if no elements are decoded.

    Like scodec.stream.decode.sepBy, but fails with an error if no elements are decoded. The returned stream will have at least one element if it succeeds.

  23. def set(bits: BitVector): StreamDecoder[Nothing]

    Permalink

    Set the current cursor to the given BitVector.

  24. def suspend[A](d: ⇒ StreamDecoder[A]): StreamDecoder[A]

    Permalink

    Produce a StreamDecoder lazily.

  25. def take(n: Long): StreamDecoder[BitVector]

    Permalink

    Trim the input by calling take(n) on the input BitVector.

  26. def tryMany[A](implicit A: Lazy[Decoder[A]]): StreamDecoder[A]

    Permalink

    Like scodec.stream.decode.many, but in the event of a decoding error, resets cursor to end of last successful decode, then halts normally.

  27. def tryManyChunked[A](chunkSize: Int)(implicit A: Lazy[Decoder[A]]): StreamDecoder[A]

    Permalink

    Like scodec.stream.decode.tryMany, but reads up to chunkSize elements at once.

    Like scodec.stream.decode.tryMany, but reads up to chunkSize elements at once. As mentioned in scodec.stream.decode.manyChunked, the resulting decoder cannot be meaningfully interleaved with other decoders.

  28. def tryOnce[A](implicit A: Lazy[Decoder[A]]): StreamDecoder[A]

    Permalink

    Like scodec.stream.decode.once, but halts normally and leaves the input unconsumed in the event of a decoding error.

    Like scodec.stream.decode.once, but halts normally and leaves the input unconsumed in the event of a decoding error. tryOnce[A].repeat will produce the same result as many[A], but allows.

Inherited from AnyRef

Inherited from Any

Ungrouped