aboutsummaryrefslogtreecommitdiff
path: root/node_modules/toposort/README.md
diff options
context:
space:
mode:
authorruki <waruqi@gmail.com>2018-11-08 00:38:48 +0800
committerruki <waruqi@gmail.com>2018-11-07 21:53:09 +0800
commit26105034da4fcce7ac883c899d781f016559310d (patch)
treec459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/toposort/README.md
parent2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff)
downloadxmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz
xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip
switch to vuepress
Diffstat (limited to 'node_modules/toposort/README.md')
-rw-r--r--node_modules/toposort/README.md98
1 files changed, 98 insertions, 0 deletions
diff --git a/node_modules/toposort/README.md b/node_modules/toposort/README.md
new file mode 100644
index 00000000..58d4ab3e
--- /dev/null
+++ b/node_modules/toposort/README.md
@@ -0,0 +1,98 @@
+# Toposort
+
+Sort directed acyclic graphs
+
+[![Build Status](https://travis-ci.org/marcelklehr/toposort.png)](https://travis-ci.org/marcelklehr/toposort)
+
+## Installation
+
+`npm install toposort` or `component install marcelklehr/toposort`
+
+then in your code:
+
+```js
+toposort = require('toposort')
+```
+
+## Usage
+We want to sort the following graph.
+
+![graph](https://cdn.rawgit.com/marcelklehr/toposort/8b14e9fd/graph.svg)
+
+```js
+// First, we define our edges.
+var graph = [
+ ['put on your shoes', 'tie your shoes']
+, ['put on your shirt', 'put on your jacket']
+, ['put on your shorts', 'put on your jacket']
+, ['put on your shorts', 'put on your shoes']
+]
+
+
+// Now, sort the vertices topologically, to reveal a legal execution order.
+toposort(graph)
+// [ 'put on your shirt'
+// , 'put on your shorts'
+// , 'put on your jacket'
+// , 'put on your shoes'
+// , 'tie your shoes' ]
+```
+
+(Note that there is no defined order for graph parts that are not connected
+ -- you could also put on your jacket after having tied your shoes...)
+
+### Sorting dependencies
+It is usually more convenient to specify *dependencies* instead of "sequences".
+```js
+// This time, edges represent dependencies.
+var graph = [
+ ['tie your shoes', 'put on your shoes']
+, ['put on your jacket', 'put on your shirt']
+, ['put on your shoes', 'put on your shorts']
+, ['put on your jacket', 'put on your shorts']
+]
+
+toposort(graph)
+// [ 'tie your shoes'
+// , 'put on your shoes'
+// , 'put on your jacket'
+// , 'put on your shirt'
+// , 'put on your shorts' ]
+
+// Now, reversing the list will reveal a legal execution order.
+toposort(graph).reverse()
+// [ 'put on your shorts'
+// , 'put on your shirt'
+// , 'put on your jacket'
+// , 'put on your shoes'
+// , 'tie your shoes' ]
+```
+
+## API
+
+### toposort(edges)
+
++ edges {Array} An array of directed edges describing a graph. An edge looks like this: `[node1, node2]` (vertices needn't be strings but can be of any type).
+
+Returns: {Array} a list of vertices, sorted from "start" to "end"
+
+Throws an error if there are any cycles in the graph.
+
+### toposort.array(nodes, edges)
+
++ nodes {Array} An array of nodes
++ edges {Array} An array of directed edges. You don't need to mention all `nodes` here.
+
+This is a convenience method that allows you to define nodes that may or may not be connected to any other nodes. The ordering of unconnected nodes is not defined.
+
+Returns: {Array} a list of vertices, sorted from "start" to "end"
+
+Throws an error if there are any cycles in the graph.
+
+## Tests
+
+Run the tests with `node test.js`.
+
+## Legal
+
+MIT License