/** @module MapWithDefaultValue */
/**
 * Map that has a default value specified in the constructor.
 *
 * For the complete documentation of the Map see [Map in the MDN web docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map)
 *
 * Usage:
 * ```JavaScript
 let myMap = new MapWithDefaultValue(Infinity);
 const value = myMap.getWithDefault(key)
 ```
 *
 * _Note: This version is written specially for ES6 compiled into ES5. In non-compiled ES6 is the implementation far more elegant:_
 *
 * ```JavaScript
 export class MapWithDefaultValue extends Map {
     constructor(defaultValue) {
         super();

         this.default = defaultValue;
     }

     get(key) {
         if(this.has(key)) {
             return super.get(key);
         } else {
             return this.default;
         }
     }
 }```
 * @class MapWithDefaultValue
 * @param defaultValue {any} default value that will be returned when the requested key is not found in the map
 */
export default function(defaultValue) {
    let map = new Map();
    /**
     * @param  {any} key key of a requested item
     * @return {any} value of the item with the corresponding key, or defaultValue if the key is not found in the map
     */
    map.getWithDefault = key => {
        return map.has(key) ? map.get(key) : defaultValue;
    };
    return map;
}