1 | var _ = require("./lodash"),
|
2 | Graph = require("./graph");
|
3 |
|
4 | module.exports = {
|
5 | write: write,
|
6 | read: read
|
7 | };
|
8 |
|
9 | function write(g) {
|
10 | var json = {
|
11 | options: {
|
12 | directed: g.isDirected(),
|
13 | multigraph: g.isMultigraph(),
|
14 | compound: g.isCompound()
|
15 | },
|
16 | nodes: writeNodes(g),
|
17 | edges: writeEdges(g)
|
18 | };
|
19 | if (!_.isUndefined(g.graph())) {
|
20 | json.value = _.clone(g.graph());
|
21 | }
|
22 | return json;
|
23 | }
|
24 |
|
25 | function writeNodes(g) {
|
26 | return _.map(g.nodes(), function(v) {
|
27 | var nodeValue = g.node(v),
|
28 | parent = g.parent(v),
|
29 | node = { v: v };
|
30 | if (!_.isUndefined(nodeValue)) {
|
31 | node.value = nodeValue;
|
32 | }
|
33 | if (!_.isUndefined(parent)) {
|
34 | node.parent = parent;
|
35 | }
|
36 | return node;
|
37 | });
|
38 | }
|
39 |
|
40 | function writeEdges(g) {
|
41 | return _.map(g.edges(), function(e) {
|
42 | var edgeValue = g.edge(e),
|
43 | edge = { v: e.v, w: e.w };
|
44 | if (!_.isUndefined(e.name)) {
|
45 | edge.name = e.name;
|
46 | }
|
47 | if (!_.isUndefined(edgeValue)) {
|
48 | edge.value = edgeValue;
|
49 | }
|
50 | return edge;
|
51 | });
|
52 | }
|
53 |
|
54 | function read(json) {
|
55 | var g = new Graph(json.options).setGraph(json.value);
|
56 | _.each(json.nodes, function(entry) {
|
57 | g.setNode(entry.v, entry.value);
|
58 | if (entry.parent) {
|
59 | g.setParent(entry.v, entry.parent);
|
60 | }
|
61 | });
|
62 | _.each(json.edges, function(entry) {
|
63 | g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value);
|
64 | });
|
65 | return g;
|
66 | }
|