The Deque class

(PECL ds >= 1.0.0)

Introduction

A Deque (pronounced “deck”) is a sequence of values in a contiguous buffer that grows and shrinks automatically. The name is a common abbreviation of “double-ended queue” and is used internally by Ds\Queue.

Two pointers are used to keep track of a head and a tail. The pointers can “wrap around” the end of the buffer, which avoids the need to move other values around to make room. This makes shift and unshift very fast —  something a Ds\Vector can’t compete with.

Accessing a value by index requires a translation between the index and its corresponding position in the buffer: ((head + position) % capacity).

Strengths

  • Supports array syntax (square brackets).
  • Uses less overall memory than an array for the same number of values.
  • Automatically frees allocated memory when its size drops low enough.
  • get(), set(), push(), pop(), shift(), and unshift() are all O(1).

Weaknesses

  • Capacity must be a power of 2.
  • insert() and remove() are O(n).

Class synopsis

classDs\DequeimplementsDs\Sequence, ArrayAccess {
constintMIN_CAPACITY = 8;
publicallocate(int$capacity): void
publicapply(callable$callback): void
publiccapacity(): int
publicclear(): void
publiccontains(mixed...$values): bool
publiccopy(): Ds\Deque
publicfilter(callable$callback = ?): Ds\Deque
publicfind(mixed$value): mixed
publicfirst(): mixed
publicget(int$index): mixed
publicinsert(int$index, mixed...$values): void
publicisEmpty(): bool
publicjoin(string$glue = ?): string
publiclast(): mixed
publicmap(callable$callback): Ds\Deque
publicmerge(mixed$values): Ds\Deque
publicpop(): mixed
publicpush(mixed...$values): void
publicreduce(callable$callback, mixed$initial = ?): mixed
publicremove(int$index): mixed
publicreverse(): void
publicrotate(int$rotations): void
publicset(int$index, mixed$value): void
publicshift(): mixed
publicslice(int$index, int$length = ?): Ds\Deque
publicsort(callable$comparator = ?): void
publicsorted(callable$comparator = ?): Ds\Deque
publicsum(): int|float
publictoArray(): array
publicunshift(mixed$values = ?): void
}

Predefined Constants

Ds\Deque::MIN_CAPACITY

Changelog

VersionDescription
PECL ds 1.3.0 The class now implements ArrayAccess.

Table of Contents

To Top