index.d.cts 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. declare type Comparator<T> = (a: T, b: T) => number;
  2. declare type Predicate<T> = (value: T) => boolean;
  3. declare class SplayTreeNode<K, Node extends SplayTreeNode<K, Node>> {
  4. readonly key: K;
  5. left: Node | null;
  6. right: Node | null;
  7. constructor(key: K);
  8. }
  9. declare class SplayTreeSetNode<K> extends SplayTreeNode<K, SplayTreeSetNode<K>> {
  10. constructor(key: K);
  11. }
  12. declare class SplayTreeMapNode<K, V> extends SplayTreeNode<K, SplayTreeMapNode<K, V>> {
  13. readonly value: V;
  14. constructor(key: K, value: V);
  15. replaceValue(value: V): SplayTreeMapNode<K, V>;
  16. }
  17. declare abstract class SplayTree<K, Node extends SplayTreeNode<K, Node>> {
  18. protected abstract root: Node | null;
  19. size: number;
  20. protected modificationCount: number;
  21. protected splayCount: number;
  22. protected abstract compare: Comparator<K>;
  23. protected abstract validKey: Predicate<unknown>;
  24. protected splay(key: K): number;
  25. protected splayMin(node: Node): Node;
  26. protected splayMax(node: Node): Node;
  27. protected _delete(key: K): Node | null;
  28. protected addNewRoot(node: Node, comp: number): void;
  29. protected _first(): Node | null;
  30. protected _last(): Node | null;
  31. clear(): void;
  32. has(key: unknown): boolean;
  33. protected defaultCompare(): Comparator<K>;
  34. protected wrap(): SplayTreeWrapper<K, Node>;
  35. }
  36. declare class SplayTreeMap<K, V> extends SplayTree<K, SplayTreeMapNode<K, V>> implements Iterable<[K, V]>, Map<K, V> {
  37. protected root: SplayTreeMapNode<K, V> | null;
  38. protected compare: Comparator<K>;
  39. protected validKey: Predicate<unknown>;
  40. constructor(compare?: Comparator<K>, isValidKey?: Predicate<unknown>);
  41. delete(key: unknown): boolean;
  42. forEach(f: (value: V, key: K, map: Map<K, V>) => void): void;
  43. get(key: unknown): V | undefined;
  44. hasValue(value: unknown): boolean;
  45. set(key: K, value: V): this;
  46. setAll(other: Map<K, V>): void;
  47. setIfAbsent(key: K, ifAbsent: () => V): V;
  48. isEmpty(): boolean;
  49. isNotEmpty(): boolean;
  50. firstKey(): K | null;
  51. lastKey(): K | null;
  52. lastKeyBefore(key: K): K | null;
  53. firstKeyAfter(key: K): K | null;
  54. update(key: K, update: (value: V) => V, ifAbsent?: () => V): V;
  55. updateAll(update: (key: K, value: V) => V): void;
  56. keys(): IterableIterator<K>;
  57. values(): IterableIterator<V>;
  58. entries(): IterableIterator<[K, V]>;
  59. [Symbol.iterator](): IterableIterator<[K, V]>;
  60. [Symbol.toStringTag]: string;
  61. }
  62. declare class SplayTreeSet<E> extends SplayTree<E, SplayTreeSetNode<E>> implements Iterable<E>, Set<E> {
  63. protected root: SplayTreeSetNode<E> | null;
  64. protected compare: Comparator<E>;
  65. protected validKey: Predicate<unknown>;
  66. constructor(compare?: Comparator<E>, isValidKey?: Predicate<unknown>);
  67. delete(element: unknown): boolean;
  68. deleteAll(elements: Iterable<unknown>): void;
  69. forEach(f: (element: E, element2: E, set: Set<E>) => void): void;
  70. add(element: E): this;
  71. addAndReturn(element: E): E;
  72. addAll(elements: Iterable<E>): void;
  73. isEmpty(): boolean;
  74. isNotEmpty(): boolean;
  75. single(): E;
  76. first(): E;
  77. last(): E;
  78. lastBefore(element: E): E | null;
  79. firstAfter(element: E): E | null;
  80. retainAll(elements: Iterable<unknown>): void;
  81. lookup(object: unknown): E | null;
  82. intersection(other: Set<unknown>): Set<E>;
  83. difference(other: Set<unknown>): Set<E>;
  84. union(other: Set<E>): Set<E>;
  85. protected clone(): SplayTreeSet<E>;
  86. protected copyNode<Node extends SplayTreeNode<E, Node>>(node: Node | null): SplayTreeSetNode<E> | null;
  87. toSet(): Set<E>;
  88. entries(): IterableIterator<[E, E]>;
  89. keys(): IterableIterator<E>;
  90. values(): IterableIterator<E>;
  91. [Symbol.iterator](): IterableIterator<E>;
  92. [Symbol.toStringTag]: string;
  93. }
  94. interface SplayTreeWrapper<K, Node extends SplayTreeNode<K, Node>> {
  95. getRoot: () => Node | null;
  96. setRoot: (root: Node | null) => void;
  97. getSize: () => number;
  98. getModificationCount: () => number;
  99. getSplayCount: () => number;
  100. setSplayCount: (count: number) => void;
  101. splay: (key: K) => number;
  102. has: (key: unknown) => boolean;
  103. }
  104. export { SplayTreeMap, SplayTreeSet };