Chunk

abstract class Chunk[+O] extends Serializable with ChunkPlatform[O]
Strict, finite sequence of values that allows index-based random access of elements.
Chunks can be created from a variety of collection types using methods on the Chunk companion
(e.g., Chunk.array, Chunk.seq, Chunk.vector).
Chunks can be appended via the ++ method. The returned chunk is a composite of the input
chunks -- that is, there's no copying of the source chunks. For example, Chunk(1, 2) ++ Chunk(3, 4) ++ Chunk(5, 6)
returns a Chunk.Queue(Chunk(1, 2), Chunk(3, 4), Chunk(5, 6)). As a result, indexed based lookup of
an appended chunk is O(number of underlying chunks). In the worse case, where each constituent chunk
has size 1, indexed lookup is O(size). To restore O(1) lookup, call compact, which copies all the underlying
chunk elements to a single array backed chunk. Note compact requires a ClassTag of the element type.
Alternatively, a collection of chunks can be directly copied to a new array backed chunk via
Chunk.concat(chunks). Like compact, Chunk.concat requires a ClassTag for the element type.
Various subtypes of Chunk are exposed for efficiency reasons:
- Chunk.Singleton
- Chunk.ArraySlice
- Chunk.Queue
In particular, calling .toArraySlice on a chunk returns a Chunk.ArraySlice, which provides
access to the underlying backing array, along with an offset and length, referring to a slice
of that array.
Companion
object
trait ChunkPlatform[O]
trait Serializable
class Object
trait Matchable
class Any
class Singleton[O]
class ArraySlice[O]
class Buffer[A, B, C]
class Queue[O]

Value members

Methods

def size: Int
Returns the number of elements in this chunk.
def apply(i: Int): O
Returns the element at the specified index. Throws if index is < 0 or >= size.
def ++[O2 >: O](that: Chunk[O2]): Chunk[O2]
Returns a chunk which consists of the elements of this chunk and the elements of
the supplied chunk. This operation is amortized O(1).
def collect[O2](pf: PartialFunction[O, O2]): Chunk[O2]
More efficient version of filter(pf.isDefinedAt).map(pf).
def copyToArray[O2 >: O](xs: Array[O2], start: Int): Unit
Copies the elements of this chunk in to the specified array at the specified start index.
def compact[O2 >: O](ct: ClassTag[O2]): ArraySlice[O2]
Converts this chunk to a chunk backed by a single array.
def drop(n: Int): Chunk[O]
Drops the first n elements of this chunk.
def dropRight(n: Int): Chunk[O]
Drops the right-most n elements of this chunk queue in a way that preserves chunk structure.
def filter(p: O => Boolean): Chunk[O]
Returns a chunk that has only the elements that satisfy the supplied predicate.
def find(p: O => Boolean): Option[O]
Returns the first element for which the predicate returns true or None if no elements satisfy the predicate.
def flatMap[O2](f: O => Chunk[O2]): Chunk[O2]
Maps f over the elements of this chunk and concatenates the result.
def foldLeft[A](init: A)(f: (A, O) => A): A
Left-folds the elements of this chunk.
def forall(p: O => Boolean): Boolean
Returns true if the predicate passes for all elements.
def foreach(f: O => Unit): Unit
Invokes the supplied function for each element of this chunk.
final def isEmpty: Boolean
True if size is zero, false otherwise.
def iterator: Iterator[O]
Creates an iterator that iterates the elements of this chunk. The returned iterator is not thread safe.
def indexWhere(p: O => Boolean): Option[Int]
Returns the index of the first element which passes the specified predicate (i.e., p(i) == true)
or None if no elements pass the predicate.
def last: Option[O]
Gets the last element of this chunk.
def map[O2](f: O => O2): Chunk[O2]
Creates a new chunk by applying f to each element in this chunk.
def mapAccumulate[S, O2](init: S)(f: (S, O) => (S, O2)): (S, Chunk[O2])
Maps the supplied stateful function over each element, outputting the final state and the accumulated outputs.
The first invocation of f uses init as the input state value. Each successive invocation uses
the output state of the previous invocation.
def mapFilter[O2](f: O => Option[O2]): Chunk[O2]
Maps the supplied function over each element and returns a chunk of just the defined results.
final def nonEmpty: Boolean
False if size is zero, true otherwise.
def reverseIterator: Iterator[O]
Creates an iterator that iterates the elements of this chunk in reverse order. The returned iterator is not thread safe.
def scanLeft[O2](z: O2)(f: (O2, O) => O2): Chunk[O2]
Like foldLeft but emits each intermediate result of f.
def scanLeftCarry[O2](z: O2)(f: (O2, O) => O2): (Chunk[O2], O2)
Like scanLeft except the final element is emitted as a standalone value instead of as
the last element of the accumulated chunk.
Equivalent to val b = a.scanLeft(z)(f); val (c, carry) = b.splitAt(b.size - 1).
def splitAt(n: Int): (Chunk[O], Chunk[O])
Splits this chunk in to two chunks at the specified index.
def startsWith[O2 >: O](seq: Seq[O2]): Boolean
Check to see if this starts with the items in the given seq
should be the same as take(seq.size).toChunk == Chunk.seq(seq).
def take(n: Int): Chunk[O]
Takes the first n elements of this chunk.
def takeRight(n: Int): Chunk[O]
Takes the right-most n elements of this chunk queue in a way that preserves chunk structure.
def toArray[O2 >: O](evidence$1: ClassTag[O2]): Array[O2]
Copies the elements of this chunk to an array.
def toArraySlice[O2 >: O](ct: ClassTag[O2]): ArraySlice[O2]
def toByteBuffer[B >: O](ev: B =:= Byte): ByteBuffer
Converts this chunk to a java.nio.ByteBuffer.
def toNel: Option[NonEmptyList[O]]
Converts this chunk to a NonEmptyList
def toChain: Chain[O]
Converts this chunk to a chain.
def toList: List[O]
Converts this chunk to a list.
def toVector: Vector[O]
Converts this chunk to a vector.
def toByteVector[B >: O](ev: B =:= Byte): ByteVector
Converts this chunk to a scodec-bits ByteVector.
def toBitVector[B >: O](ev: B =:= Byte): BitVector
Converts this chunk to a scodec-bits BitVector.
def traverse[F <: ([_$1] =>> Any), O2](f: O => F[O2])(F: Applicative[F]): F[Chunk[O2]]
def traverseFilter[F <: ([_$9] =>> Any), O2](f: O => F[Option[O2]])(F: Applicative[F]): F[Chunk[O2]]
def zip[O2](that: Chunk[O2]): Chunk[(O, O2)]
Zips this chunk the the supplied chunk, returning a chunk of tuples.
def zipWith[O2, O3](that: Chunk[O2])(f: (O, O2) => O3): Chunk[O3]
Zips this chunk with the supplied chunk, passing each pair to f, resulting in
an output chunk.
def zipWithIndex: Chunk[(O, Int)]
Zips the elements of the input chunk with its indices, and returns the new chunk.
Example
{{{
scala> Chunk("The", "quick", "brown", "fox").zipWithIndex.toList
res0: List[(String, Int)] = List((The,0), (quick,1), (brown,2), (fox,3))
}}}
override def hashCode: Int
Definition Classes
Any
override def equals(a: Any): Boolean
Definition Classes
Any
override def toString: String
Definition Classes
Any

Inherited methods

def toArraySeq[O2 >: O](evidence$1: ClassTag[O2]): ArraySeq[O2]
Inhertied from
ChunkPlatform
def toArraySeqUntagged: ArraySeq[O]
Inhertied from
ChunkPlatform
def toIArraySlice[O2 >: O](ct: ClassTag[O2]): IArraySlice[O2]
Inhertied from
ChunkPlatform
def toIArray[O2 >: O](evidence$2: ClassTag[O2]): IArray[O2]
Inhertied from
ChunkPlatform