Neighbourhood Party Manager

    precedence-maps

    0.1.3 • Public • Published

    Precedence maps

    Graphing and ordered maps for scheduling execution of tasks, fast.

    Build Status

    Installation

    npm install precedence-maps

    then in your code:

    precedence = require('precedence-maps')

    Usage

    First we need to define a graph for our application.

    var graphDefinitions = {
      "man": { incoming: ["god"], outgoing: ["animal"]},
      "god": { outgoing: ["animal","man"]}, // outgoing means things that come after
      "animal": { incoming: ["god","man"]}  // and incoming for things that come before
    }
    precedence.setGraph("mygraph", {
      map: graphDefinitions
    });
    precedence.getOrder("mygraph"); // [ 'god', 'man', 'animal' ]

    The order will be flagged for refresh whenever setGraph is called for the specific graph. You can make several changes in the graph definitions, setGraph with/or without options(setting options refresh the configuration), and calculation will only take place when getOrder() is called or internally in the stores as needed.

    var store = precedence.newStore("mygraph", Array) // Create a store where keys match properties in graphDefinitions
    store('man').push("mike") // We declared Array to be the default constructor so that's what we get on new symbols.
    store('god').push("loki");
    store('man').push("bill");
    store('animal').push("rat");
    store('animal').push("pig");
    store('man').push("kate");
    store('god').push("thor");
    // Calling store with no arguments returns an array orders by the graph
    store().forEach(function (v) { console.log(v); });
    /*
    [ 'loki', 'thor' ]
    [ 'mike', 'bill', 'kate' ]
    [ 'rat', 'pig' ]
    */

    Parsing the graph definitions can also be customized by providing/overriding two methods. Enumerate(graph) which must return an unordered array of graph symbols and collect(graph, symbolName) which will run per symbol and must return either an object like

    { 
      incoming: ["symbolNameBefore1","symbolNameBefore2",...],
      outgoing: ["symbolNameAfter1",...]
    }

    or a false value to omit this symbol from sorting.

    API

    precedence.setGraph(name, options)

    • name {String} Unique name to refer to this graph.
    • config {Object} Configurations for this graph.

    precedence.getOrder(name)

    • name {String} name of the graph we want to get the order from

    Returns: {Array} a list of names, sorted in the order of precedence

    precedence.newStore(name, template)

    • name {String} name of the graph we want to order the map with.
    • template {Function} Optional, a constructor to create instances of when a new key is accessed.

    Tests

    Run the tests with node test.js.

    Legal

    MIT License

    Install

    npm i precedence-maps

    DownloadsWeekly Downloads

    2

    Version

    0.1.3

    License

    MIT

    Last publish

    Collaborators

    • wizgrav