map.ts 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /**
  2. * Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author David Sehnal <david.sehnal@gmail.com>
  5. */
  6. import { iterableToArray } from '../util'
  7. /** Immutable by convention IntMap */
  8. interface IntMap<T> {
  9. keys(): IterableIterator<number>,
  10. values(): IterableIterator<T>,
  11. get(key: number): T,
  12. readonly size: number
  13. }
  14. namespace IntMap {
  15. export interface Mutable<T> extends IntMap<T> {
  16. set(key: number, value: T): void;
  17. }
  18. export function keyArray<T>(map: IntMap<T>): number[] {
  19. return iterableToArray(map.keys());
  20. }
  21. export function ofObj<T>(obj: { [key: number]: T }): IntMap<T> {
  22. const keys = Object.keys(obj);
  23. const ret = new Map<number, T>();
  24. for (let i = 0, _i = keys.length; i < _i; i++) {
  25. const k = keys[i];
  26. ret.set(+k, obj[k as any]);
  27. }
  28. return ret as IntMap<T>;
  29. }
  30. export function Mutable<T>(): Mutable<T> {
  31. return new Map<number, T>() as Mutable<T>;
  32. }
  33. export function asImmutable<T>(map: IntMap<T>): IntMap<T> {
  34. return map;
  35. }
  36. }
  37. export default IntMap;