Sequence are indexed collection.

The first item is 0. The last is length-1.

Introduced properties

abstract fun []=(index: Int, item: E)

core :: Sequence :: []=

Set the item at index.
fun append(coll: Collection[E])

core :: Sequence :: append

Add each item of coll after the last.
fun as_fifo: Queue[E]

core :: Sequence :: as_fifo

Return a FIFO proxy queue where result.take is shift.
fun as_lifo: Queue[E]

core :: Sequence :: as_lifo

Return a LIFO proxy queue (stack) where result.take is pop.
fun first=(item: E)

core :: Sequence :: first=

Set the first item.
abstract fun insert(item: E, index: Int)

core :: Sequence :: insert

Insert an element at a given position, following elements are shifted.
fun insert_all(coll: Collection[E], index: Int)

core :: Sequence :: insert_all

Insert all elements at a given position, following elements are shifted.
fun last=(item: E)

core :: Sequence :: last=

Set the last item.
fun modulo=(index: Int, value: E)

core :: Sequence :: modulo=

Set the index-th element but wrap
abstract fun pop: E

core :: Sequence :: pop

Remove the last item.
fun prepend(coll: Collection[E])

core :: Sequence :: prepend

Add all items of coll before the first one.
abstract fun push(e: E)

core :: Sequence :: push

Add an item after the last one.
abstract fun remove_at(index: Int)

core :: Sequence :: remove_at

Remove the item at index and shift all following elements
fun rotate_left

core :: Sequence :: rotate_left

Rotates the elements of self once to the left
fun rotate_right

core :: Sequence :: rotate_right

Rotates the elements of self once to the right
abstract fun shift: E

core :: Sequence :: shift

Remove the first item.
fun subarray(start: Int, len: Int): Array[E]

core :: Sequence :: subarray

Copy the content of self between start and len to a new Array.
abstract fun unshift(e: E)

core :: Sequence :: unshift

Add an item before the first one.

Redefined properties

redef type CONCURRENT: ConcurrentSequence[E]

pthreads :: concurrent_collections $ Sequence :: CONCURRENT

Type of the concurrent variant of this collection
redef type SELF: Sequence[E]

core $ Sequence :: SELF

Type of this instance, automatically specialized in every class
redef fun add(e: E)

core $ Sequence :: add

A synonym of push

All properties

fun !=(other: nullable Object): Bool

core :: Object :: !=

Have self and other different values?
fun ==(other: nullable Object): Bool

core :: Object :: ==

Have self and other the same value?
type CLASS: Class[SELF]

core :: Object :: CLASS

The type of the class of self.
type CONCURRENT: ConcurrentCollection[E]

core :: Collection :: CONCURRENT

Type of the concurrent variant of this collection
type SELF: Object

core :: Object :: SELF

Type of this instance, automatically specialized in every class
abstract fun [](index: Int): E

core :: SequenceRead :: []

Return the index-th element of the sequence.
abstract fun []=(index: Int, item: E)

core :: Sequence :: []=

Set the item at index.
protected fun accept_json_serializer(v: JsonSerializer)

serialization :: Serializable :: accept_json_serializer

Refinable service to customize the serialization of this class to JSON
protected fun accept_msgpack_attribute_counter(v: AttributeCounter)

serialization :: Serializable :: accept_msgpack_attribute_counter

Hook to customize the behavior of the AttributeCounter
protected fun accept_msgpack_serializer(v: MsgPackSerializer)

serialization :: Serializable :: accept_msgpack_serializer

Hook to customize the serialization of this class to MessagePack
abstract fun add(item: E)

core :: SimpleCollection :: add

Add item to this collection.
fun add_all(coll: Collection[E])

core :: SimpleCollection :: add_all

Add each item of coll.
protected fun add_to_bundle(bundle: NativeBundle, key: JavaString)

serialization :: Serializable :: add_to_bundle

Called by []= to dynamically choose the appropriate method according
fun append(coll: Collection[E])

core :: Sequence :: append

Add each item of coll after the last.
fun as_fifo: Queue[E]

core :: Sequence :: as_fifo

Return a FIFO proxy queue where result.take is shift.
fun as_lifo: Queue[E]

core :: Sequence :: as_lifo

Return a LIFO proxy queue (stack) where result.take is pop.
fun as_random: Queue[E]

core :: SimpleCollection :: as_random

Return a random proxy queue where result.take is random.
protected fun class_factory(name: String): CLASS

core :: Object :: class_factory

Implementation used by get_class to create the specific class.
fun class_name: String

core :: Object :: class_name

The class name of the object.
abstract fun clear

core :: RemovableCollection :: clear

Remove all items
fun combinations(r: Int): Collection[SequenceRead[E]]

core :: Collection :: combinations

All r-length combinations on self (in same order) without repeated elements.
fun combinations_with_replacement(r: Int): Collection[SequenceRead[E]]

core :: Collection :: combinations_with_replacement

All r-length combination on self (in same order) with repeated elements.
fun core_serialize_to(serializer: Serializer)

serialization :: Serializable :: core_serialize_to

Actual serialization of self to serializer
fun count(item: nullable Object): Int

core :: Collection :: count

How many occurrences of item are in the collection?
fun first: E

core :: Collection :: first

Return the first item of the collection
fun first=(item: E)

core :: Sequence :: first=

Set the first item.
init from_deserializer(deserializer: Deserializer)

serialization :: Serializable :: from_deserializer

Create an instance of this class from the deserializer
fun get_class: CLASS

core :: Object :: get_class

The meta-object representing the dynamic type of self.
fun get_or_default(index: Int, default: E): E

core :: SequenceRead :: get_or_default

Try to get an element, return default if the index is invalid.
fun get_or_null(index: Int): nullable E

core :: SequenceRead :: get_or_null

Try to get an element, return null if the index is invalid.
fun has(item: nullable Object): Bool

core :: Collection :: has

Is item in the collection ?
fun has_all(other: Collection[nullable Object]): Bool

core :: Collection :: has_all

Does the collection contain at least each element of other?
fun has_any(other: Collection[nullable Object]): Bool

core :: Collection :: has_any

Does the collection contain at least one element of other?
fun has_exactly(other: Collection[nullable Object]): Bool

core :: Collection :: has_exactly

Does the collection contain exactly all the elements of other?
fun has_only(item: nullable Object): Bool

core :: Collection :: has_only

Is the collection contain only item?
fun hash: Int

core :: Object :: hash

The hash code of the object.
fun index_of(item: nullable Object): Int

core :: SequenceRead :: index_of

The index of the first occurrence of item.
fun index_of_from(item: nullable Object, pos: Int): Int

core :: SequenceRead :: index_of_from

The index of the first occurrence of item, starting from pos.
init init

core :: Object :: init

abstract fun insert(item: E, index: Int)

core :: Sequence :: insert

Insert an element at a given position, following elements are shifted.
fun insert_all(coll: Collection[E], index: Int)

core :: Sequence :: insert_all

Insert all elements at a given position, following elements are shifted.
fun inspect: String

core :: Object :: inspect

Developer readable representation of self.
protected fun inspect_head: String

core :: Object :: inspect_head

Return "CLASSNAME:#OBJECTID".
fun is_empty: Bool

core :: Collection :: is_empty

Is there no item in the collection?
intern fun is_same_instance(other: nullable Object): Bool

core :: Object :: is_same_instance

Return true if self and other are the same instance (i.e. same identity).
fun is_same_serialized(other: nullable Object): Bool

core :: Object :: is_same_serialized

Is self the same as other in a serialization context?
intern fun is_same_type(other: Object): Bool

core :: Object :: is_same_type

Return true if self and other have the same dynamic type.
abstract fun iterator: Iterator[E]

core :: Collection :: iterator

Get a new iterator on the collection.
fun iterator_from(pos: Int): IndexedIterator[E]

core :: SequenceRead :: iterator_from

Gets a new Iterator starting at position pos
fun join(separator: nullable Text, last_separator: nullable Text): String

core :: Collection :: join

Concatenate and separate each elements with separator.
fun last: E

core :: SequenceRead :: last

Get the last item.
fun last=(item: E)

core :: Sequence :: last=

Set the last item.
fun last_index_of(item: nullable Object): Int

core :: SequenceRead :: last_index_of

The index of the last occurrence of item.
fun last_index_of_from(item: nullable Object, pos: Int): Int

core :: SequenceRead :: last_index_of_from

The index of the last occurrence of item starting from pos and decrementing.
fun length: Int

core :: Collection :: length

Number of items in the collection.
fun modulo(index: Int): E

core :: SequenceRead :: modulo

Return the index-th element but wrap
fun modulo=(index: Int, value: E)

core :: Sequence :: modulo=

Set the index-th element but wrap
fun modulo_index(index: Int): Int

core :: SequenceRead :: modulo_index

Returns the real index for a modulo index.
protected fun msgpack_extra_array_items: Int

serialization :: Serializable :: msgpack_extra_array_items

Hook to request a larger than usual metadata array
fun not_empty: Bool

core :: Collection :: not_empty

Alias for not is_empty.
intern fun object_id: Int

core :: Object :: object_id

An internal hash code for the object based on its identity.
fun output

core :: Object :: output

Display self on stdout (debug only).
intern fun output_class_name

core :: Object :: output_class_name

Display class name on stdout (debug only).
fun permutations(r: Int): Collection[SequenceRead[E]]

core :: Collection :: permutations

All r-length permutations on self (all possible ordering) without repeated elements.
fun plain_to_s: String

core :: Collection :: plain_to_s

Concatenate elements without separators
abstract fun pop: E

core :: Sequence :: pop

Remove the last item.
fun prepend(coll: Collection[E])

core :: Sequence :: prepend

Add all items of coll before the first one.
fun product(r: Int): Collection[SequenceRead[E]]

core :: Collection :: product

Cartesian product, over r times self.
abstract fun push(e: E)

core :: Sequence :: push

Add an item after the last one.
fun rand: E

core :: Collection :: rand

Return a random element form the collection
abstract fun remove(item: nullable Object)

core :: RemovableCollection :: remove

Remove an occurrence of item
fun remove_all(item: nullable Object)

core :: RemovableCollection :: remove_all

Remove all occurrences of item
abstract fun remove_at(index: Int)

core :: Sequence :: remove_at

Remove the item at index and shift all following elements
abstract fun reverse_iterator: IndexedIterator[E]

core :: SequenceRead :: reverse_iterator

Gets an iterator starting at the end and going backwards
fun reverse_iterator_from(pos: Int): IndexedIterator[E]

core :: SequenceRead :: reverse_iterator_from

Gets an iterator on the chars of self starting from pos
fun rotate_left

core :: Sequence :: rotate_left

Rotates the elements of self once to the left
fun rotate_right

core :: Sequence :: rotate_right

Rotates the elements of self once to the right
fun sample(length: Int): Array[E]

core :: Collection :: sample

Return a new array made of (at most) length elements randomly chosen.
fun serialization_hash: Int

core :: Object :: serialization_hash

Hash value use for serialization
fun serialize_msgpack(plain: nullable Bool): Bytes

serialization :: Serializable :: serialize_msgpack

Serialize self to MessagePack bytes
fun serialize_to(serializer: Serializer)

serialization :: Serializable :: serialize_to

Serialize self to serializer
fun serialize_to_json(plain: nullable Bool, pretty: nullable Bool): String

serialization :: Serializable :: serialize_to_json

Serialize self to JSON
abstract fun shift: E

core :: Sequence :: shift

Remove the first item.
fun subarray(start: Int, len: Int): Array[E]

core :: Sequence :: subarray

Copy the content of self between start and len to a new Array.
intern fun sys: Sys

core :: Object :: sys

Return the global sys object, the only instance of the Sys class.
fun to_a: Array[E]

core :: Collection :: to_a

Build a new array from a collection
abstract fun to_concurrent: CONCURRENT

core :: Collection :: to_concurrent

Wraps self in a thread-safe collection
fun to_counter: Counter[E]

core :: Collection :: to_counter

Create and fill up a counter with the elements of `self.
fun to_curlslist: CURLSList

core :: Collection :: to_curlslist

Convert Collection[String] to CURLSList
fun to_json: String

serialization :: Serializable :: to_json

Serialize self to plain JSON
abstract fun to_jvalue(env: JniEnv): JValue

core :: Object :: to_jvalue

fun to_pretty_json: String

serialization :: Serializable :: to_pretty_json

Serialize self to plain pretty JSON
fun to_s: String

core :: Object :: to_s

User readable representation of self.
fun to_shuffle: Array[E]

core :: Collection :: to_shuffle

Return a new array made of elements in a random order.
abstract fun unshift(e: E)

core :: Sequence :: unshift

Add an item before the first one.
package_diagram core::Sequence Sequence core::SequenceRead SequenceRead core::Sequence->core::SequenceRead core::SimpleCollection SimpleCollection core::Sequence->core::SimpleCollection core::Collection Collection core::SequenceRead->core::Collection serialization::Serializable Serializable core::SimpleCollection->serialization::Serializable core::RemovableCollection RemovableCollection core::SimpleCollection->core::RemovableCollection ...core::Collection ... ...core::Collection->core::Collection ...serialization::Serializable ... ...serialization::Serializable->serialization::Serializable ...core::RemovableCollection ... ...core::RemovableCollection->core::RemovableCollection core::AbstractArray AbstractArray core::AbstractArray->core::Sequence core::List List core::List->core::Sequence core::CircularArray CircularArray core::CircularArray->core::Sequence pthreads::ConcurrentSequence ConcurrentSequence pthreads::ConcurrentSequence->core::Sequence more_collections::UnrolledList UnrolledList more_collections::UnrolledList->core::Sequence core::Array Array core::Array->core::AbstractArray core::Bytes Bytes core::Bytes->core::AbstractArray core::Array... ... core::Array...->core::Array core::Bytes... ... core::Bytes...->core::Bytes pthreads::ConcurrentList ConcurrentList pthreads::ConcurrentList->core::List pthreads::ConcurrentList->pthreads::ConcurrentSequence scene2d::LiveGroup LiveGroup scene2d::LiveGroup->core::List pthreads::ConcurrentList... ... pthreads::ConcurrentList...->pthreads::ConcurrentList scene2d::LiveGroup... ... scene2d::LiveGroup...->scene2d::LiveGroup pthreads::ConcurrentArray ConcurrentArray pthreads::ConcurrentArray->pthreads::ConcurrentSequence pthreads::ConcurrentArray... ... pthreads::ConcurrentArray...->pthreads::ConcurrentArray

Ancestors

interface Collection[E: nullable Object]

core :: Collection

The root of the collection hierarchy.
interface Object

core :: Object

The root of the class hierarchy.
interface RemovableCollection[E: nullable Object]

core :: RemovableCollection

Items can be removed from this collection
interface Serializable

serialization :: Serializable

Instances of this class can be passed to Serializer::serialize

Parents

interface SequenceRead[E: nullable Object]

core :: SequenceRead

Sequences are indexed collections.
interface SimpleCollection[E: nullable Object]

core :: SimpleCollection

Items can be added to these collections.

Children

abstract class AbstractArray[E: nullable Object]

core :: AbstractArray

Resizable one dimension array of objects.
class CircularArray[E: nullable Object]

core :: CircularArray

Efficient data structure to access both end of the sequence.
abstract class ConcurrentSequence[E: nullable Object]

pthreads :: ConcurrentSequence

A concurrent variant to the standard Sequence
class List[E: nullable Object]

core :: List

Double linked lists.
class UnrolledList[E: nullable Object]

more_collections :: UnrolledList

An unrolled linked list

Descendants

class Array[E: nullable Object]

core :: Array

Resizable one dimension array of objects.
class ArrayCmp[E: nullable Comparable]

core :: ArrayCmp

Comparable array for comparable elements.
class BlockingQueue[E: nullable Object]

pthreads :: BlockingQueue

A Blocking queue implemented from a ConcurrentList
class BoxedArray[E: Boxed[Numeric]]

geometry :: BoxedArray

BoxedCollection implemented by an array
class Bytes

core :: Bytes

A buffer containing Byte-manipulation facilities
class ConcurrentArray[E: nullable Object]

pthreads :: ConcurrentArray

A concurrent variant to the standard Array
class ConcurrentList[E: nullable Object]

pthreads :: ConcurrentList

A concurrent variant to the standard List
class Interfaces

nitcorn :: Interfaces

A list of interfaces with dynamic port listeners
class JsonArray

json :: JsonArray

A JSON array.
class LiveGroup[E: LiveObject]

scene2d :: LiveGroup

Organizational class to manage groups of sprites and other live objects.
class Mailbox[E: nullable Object]

actors :: Mailbox

A Blocking queue implemented from a ConcurrentList
class MongoPipeline

mongodb :: MongoPipeline

Mongo pipelines are arrays of aggregation stages
class ReverseBlockingQueue[E: nullable Object]

pthreads :: ReverseBlockingQueue

A collection which is_empty method blocks until it's empty
class VirtualHosts

nitcorn :: VirtualHosts

A list of virtual hosts with dynamic port listeners

Class definitions

core $ Sequence
# Sequence are indexed collection.
# The first item is 0. The last is `length-1`.
interface Sequence[E]
	super SequenceRead[E]
	super SimpleCollection[E]

	# Set the first item.
	# Is equivalent with `self[0] = item`.
	#
	#     var a = [1,2,3]
	#     a.first = 10
	#     assert a == [10,2,3]
	fun first=(item: E)
	do self[0] = item end

	# Set the last item.
	# Is equivalent with `self[length-1] = item`.
	#
	#     var a = [1,2,3]
	#     a.last = 10
	#     assert a == [1,2,10]
	#
	# If the sequence is empty, `last=` is equivalent with `self[0]=` (thus with `first=`)
	#
	#     var b = new Array[Int]
	#     b.last = 10
	#     assert b == [10]
	fun last=(item: E)
	do
		var l = length
		if l > 0 then
			self[l-1] = item
		else
			self[0] = item
		end
	end

	# A synonym of `push`
	redef fun add(e) do push(e)

	# Add an item after the last one.
	#
	#     var a = [1,2,3]
	#     a.push(10)
	#     a.push(20)
	#     assert a  == [1,2,3,10,20]
	fun push(e: E) is abstract

	# Add each item of `coll` after the last.
	#
	#     var a = [1,2,3]
	#     a.append([7..9])
	#     assert a  == [1,2,3,7,8,9]
	#
	# Alias of `add_all`
	fun append(coll: Collection[E]) do add_all(coll)

	# Remove the last item.
	#
	#     var a = [1,2,3]
	#     assert a.pop  == 3
	#     assert a.pop  == 2
	#     assert a == [1]
	#
	# REQUIRE `not is_empty`
	fun pop: E is abstract

	# Add an item before the first one.
	#
	#     var a = [1,2,3]
	#     a.unshift(10)
	#     a.unshift(20)
	#     assert a  == [20,10,1,2,3]
	fun unshift(e: E) is abstract

	# Add all items of `coll` before the first one.
	#
	#     var a = [1,2,3]
	#     a.prepend([7..9])
	#     assert a  == [7,8,9,1,2,3]
	#
	# Alias of `insert_at(coll, 0)`
	fun prepend(coll: Collection[E]) do insert_all(coll, 0)

	# Remove the first item.
	# The second item thus become the first.
	#
	#     var a = [1,2,3]
	#     assert a.shift  == 1
	#     assert a.shift  == 2
	#     assert a == [3]
	#
	# REQUIRE `not is_empty`
	fun shift: E is abstract

	# Set the `item` at `index`.
	#
	#     var a = [10,20,30]
	#     a[1] = 200
	#     assert a  == [10,200,30]
	#
	# like with `[]`, index should be between `0` and `length-1`
	# However, if `index==length`, `[]=` works like `push`.
	#
	#     a[3] = 400
	#     assert a  == [10,200,30,400]
	#
	# REQUIRE `index >= 0 and index <= length`
	fun []=(index: Int, item: E) is abstract

	# Set the index-th element but wrap
	#
	# Whereas `self[]=` requires the index to exists, the `modulo` accessor automatically
	# wraps overbound and underbouds indexes.
	#
	# ~~~
	# var a = [10,20,30]
	# a.modulo(1) = 200
	# a.modulo(3) = 100
	# a.modulo(-1) = 300
	# a.modulo(-10) = 301
	# assert a == [100, 200, 301]
	# ~~~
	#
	# REQUIRE `not_empty`
	# ENSURE `self[modulo_index(index)] == value`
	fun modulo=(index: Int, value: E) do self[modulo_index(index)] = value

	# Insert an element at a given position, following elements are shifted.
	#
	#     var a = [10, 20, 30, 40]
	#     a.insert(100, 2)
	#     assert a      ==  [10, 20, 100, 30, 40]
	#
	# REQUIRE `index >= 0 and index <= length`
	# ENSURE `self[index] == item`
	fun insert(item: E, index: Int) is abstract

	# Insert all elements at a given position, following elements are shifted.
	#
	#     var a = [10, 20, 30, 40]
	#     a.insert_all([100..102], 2)
	#     assert a      ==  [10, 20, 100, 101, 102, 30, 40]
	#
	# REQUIRE `index >= 0 and index <= length`
	# ENSURE `self[index] == coll.first`
	fun insert_all(coll: Collection[E], index: Int)
	do
		assert index >= 0 and index < length
		if index == length then
			add_all(coll)
		end
		for c in coll do
			insert(c, index)
			index += 1
		end
	end

	# Remove the item at `index` and shift all following elements
	#
	#     var a = [10,20,30]
	#     a.remove_at(1)
	#     assert a  == [10,30]
	#
	# REQUIRE `index >= 0 and index < length`
	fun remove_at(index: Int) is abstract

	# Rotates the elements of self once to the left
	#
	# ~~~nit
	# var a = [12, 23, 34, 45]
	# a.rotate_left
	# assert a == [23, 34, 45, 12]
	# ~~~
	fun rotate_left do
		var fst = shift
		push fst
	end

	# Rotates the elements of self once to the right
	#
	# ~~~nit
	# var a = [12, 23, 34, 45]
	# a.rotate_right
	# assert a == [45, 12, 23, 34]
	# ~~~
	fun rotate_right do
		var lst = pop
		unshift lst
	end
end
lib/core/collection/abstract_collection.nit:1072,1--1262,3

core :: collection $ Sequence
redef class Sequence[E]

	# Copy the content of `self` between `start` and `len` to a new Array.
	fun subarray(start, len: Int): Array[E]
	do
		var a = new Array[E].with_capacity(len)
		for i in [start .. start+len[ do a.add(self[i])
		return a
	end
end
lib/core/collection/collection.nit:24,1--33,3

core :: queue $ Sequence
redef class Sequence[E]
	# Return a LIFO proxy queue (stack) where `result.take` is `pop`.
	#
	# The point of such a proxy is to let the user choose the underling data structure
	# behind the LIFO.
	#
	# ~~~
	# var a = [1, 2, 3]
	# var q = a.as_lifo
	# assert q.take == 3
	# assert q.take == 2
	# q.add(4)
	# q.add(5)
	# assert q.take == 5
	# assert a == [1, 4]
	# ~~~
	fun as_lifo: Queue[E] do return new LifoQueue[E](self)

	# Return a FIFO proxy queue where `result.take` is `shift`.
	#
	# The point of such a proxy is to let the user choose the underling data structure
	# behind the FIFO.
	#
	# Note that some `Sequence`, like `Array`, have an inefficient `shift` implementation,
	# thus are not the best candidates to serve as a FIFO.
	#
	# ~~~
	# var a = new List[Int].from([1,2,3])
	# var q = a.as_fifo
	# assert q.take == 1
	# q.add(4)
	# q.add(5)
	# assert q.take == 2
	# assert a == [3, 4, 5]
	# ~~~
	fun as_fifo: Queue[E] do return new FifoQueue[E](self)
end
lib/core/queue.nit:100,1--136,3

pthreads :: concurrent_collections $ Sequence
redef class Sequence[E]
	redef type CONCURRENT: ConcurrentSequence[E]
end
lib/pthreads/concurrent_collections.nit:52,1--54,3