package funkin.util.tools;

/**
 * A static extension which provides utility functions for Maps.
 *
 * For example, add `using MapTools` then call `map.values()`.
 *
 * @see https://haxe.org/manual/lf-static-extension.html
 */
class MapTools
{
  /**
   * Return the quantity of keys in the map.
   */
  public static function size<K, T>(map:Map<K, T>):Int
  {
    return map.keys().array().length;
  }

  /**
   * Return a list of values from the map, as an array.
   */
  public static function values<K, T>(map:Map<K, T>):Array<T>
  {
    return [for (i in map.iterator()) i];
  }

  /**
   * Return a list of keys from the map (as an array, rather than an iterator).
   */
  public static function keyValues<K, T>(map:Map<K, T>):Array<K>
  {
    return map.keys().array();
  }
}