Options
All
  • Public
  • Public/Protected
  • All
Menu

A data structure that maps elements to different memory locations so that they can be very efficiently stored and retrieved.

Choosing the key and determining how to detect duplicates

In the next example, we index the states of a [finite-state machine][1]. Each state has a unique id that we'd like to use as key. There is only one instance of each unique FSMState, so we can instruct HashIndex to use the much simpler strict equality check instead of the more advanced isEqual. Likewise, keys are just numbers, so we can save come CPU cycles by directly comparing them.

import { HashIndex } from "scl";

interface FSMState {
  id: string;
  isFinal: boolean;
  edgeCount: number;
  nextStates: Array<[string, FSMState]>;
}

const s0: FSMState = {
  id: 0,
  isFinal: false,
  edgeCount: 1,
  nextStates: [
    ['a', s1],
  ]
}

const s1: FSMState = {
  id: 1,
  isFinal: true,
  edgeCount 0,
  nextStates: [],
}

const allStates = new HashIndex<({
  getKey: state => state.id,
  compareKeys: (a, b) => a < b,
  isEqual: (a, b) => a === b,
  elements: [s0, s1],
});

assert(allStates.getKey(1) === s1);
see

AVLTreeIndex for when the elements have to be sorted and there are frequent lookups

see

RBTreeIndex for when the elements have to be sorted and there are frequent mutations

Type parameters

  • T

  • K = T

Hierarchy

Implements

Index

Accessors

size

  • get size(): number
  • Count the amount of elements in the collection.

    ⚠️ In most cases, this should be an O(1) operation. However, there are cases where this can be an O(n) operation. Therefore, it is recommended to always cache the result in a local variable.

    Returns number

Methods

[Symbol.iterator]

  • [Symbol.iterator](): Generator<T, void, unknown>
  • Returns an object which is able to sift through the values in this collection.

    The order by which the elements are traversed depends on the kind of collection. For unordered collections, the iteration order is unspecified and may even differ between two iterations on the same collection.

    Returns Generator<T, void, unknown>

add

clear

  • clear(): void
  • Remove all elements from this collection, effectively setting the collection to the empty collection.

    Returns void

clone

delete

  • delete(el: T): boolean

deleteAll

  • deleteAll(element: T): number

deleteAt

deleteKey

  • deleteKey(key: K): number

equalKeys

  • equalKeys(key: K): Range<T>

findKey

has

  • has(element: T): boolean

hasKey

  • hasKey(key: K): boolean

toRange

  • toRange(): FullHashRange<T, K>

Legend

  • Property
  • Method
  • Accessor
  • Property
  • Method
  • Inherited property
  • Inherited method

Generated using TypeDoc