Source: common/util/dep_map.js

define(["lib/meteor"], function(meteor) {
    "use strict";

    var Deps = meteor.deps.Deps;

    /**
     * Creates a dependency map.
     *
     * @class Manages a group of Deps.Dependecy objects. Allows you to call
     *        depend() and changed() with a name instead of a reference.
     *
     * @name DepMap
     * @private
     */
    var DepMap = function() {
        /** @alias DepMap.prototype */
        var self = {};

        var deps = {};

        /**
         * Causes the current computation to depend on the dependency with the
         * given name.
         */
        self.depend = function(name) {
            if(deps[name] === undefined) {
                deps[name] = new Deps.Dependency();
            }
            deps[name].depend();
        };

        /**
         * Marks the dependency with the given name as changed.
         */
        self.changed = function(name) {
            if(deps[name]) {
                deps[name].changed();
            }
        };

        return self;
    };

    return DepMap;
});