diff options
| author | LV-426 <lv-426@taproot.org.il> | 2014-11-13 17:41:57 +0200 |
|---|---|---|
| committer | LV-426 <lv-426@taproot.org.il> | 2014-11-13 17:41:57 +0200 |
| commit | 76d1de512a58f023ae348ae8500100490fba9915 (patch) | |
| tree | 87a3df058d3aaf1a3f2c408a784ffe63209cdaac /scripts/model | |
| parent | 4a303d5a7a7e1f8327bb18a2ef3e3093a30a50b6 (diff) | |
rename scripts/ -> src/
Diffstat (limited to 'scripts/model')
| -rw-r--r-- | scripts/model/core.js | 80 | ||||
| -rw-r--r-- | scripts/model/diff.js | 144 | ||||
| -rw-r--r-- | scripts/model/graph.js | 649 | ||||
| -rw-r--r-- | scripts/model/util.js | 117 |
4 files changed, 0 insertions, 990 deletions
diff --git a/scripts/model/core.js b/scripts/model/core.js deleted file mode 100644 index 43a87b5d..00000000 --- a/scripts/model/core.js +++ /dev/null @@ -1,80 +0,0 @@ -"use strict" - -/** - * core model module - currently unused - */ -define([], function() { - - /** - * return a random id - */ - var random_id = function() { - return Math.random().toString(36).substring(2); - } - - function random_node_name() { - return Math.random().toString(36).substring(2, 10); - } - - function Node() { - } - - function create_node__set_random_id(node_spec) { - if (undefined == node_spec) { - node_spec = {}; - } - - var ret = new Node(); - ret.id = random_id(); - - ret.name = node_spec.name; - ret.type = node_spec.type; - ret.state = node_spec.state; - ret.status = node_spec.status; - ret.url = node_spec.url; - - ret.start = node_spec.start; - ret.end = node_spec.end; - - return ret; - } - - function create_link__set_random_id(link_spec) { - var ret = new Link(); - ret.id = random_id(); - } - - /** - * determine if nodes are equal by ID - * - * @param other_node - * @returns {Boolean} - */ - Node.prototype.equlas_by_id = function(other) { - ret = this.id.toLowerCase() == other.id.toLowerCase(); - if (false == ret) { - console.debug(this.id + ' != ' + other.id); - } - return ret; - } - - function Link() { - - } - - /** - * determine if links are equal by ID - * - * @param other_node - * @returns {Boolean} - */ - Link.prototype.equlas_by_id = function(other) { - return this.id.toLowerCase() == other.id.toLowerCase(); - } - - return { - random_node_name : random_node_name, - create_node__set_random_id : create_node__set_random_id, - create_link__set_random_id : create_link__set_random_id, - }; -}); diff --git a/scripts/model/diff.js b/scripts/model/diff.js deleted file mode 100644 index 1bcfc5a2..00000000 --- a/scripts/model/diff.js +++ /dev/null @@ -1,144 +0,0 @@ -"use strict" - -/** - * Diff module - */ -define([], - function() { - - /** - * A set of diff objects - */ - function Diff_Set(obj_spec) { - this.__diff_set_topo = []; - this.__diff_set_attr = []; - this.__diff_set_vis = []; - } - Diff_Set.prototype.add_diff_obj = function(diff_obj) { - if (diff_obj instanceof Topo_Diff) { - this.__diff_set_topo.push(diff_obj); - } - if (diff_obj instanceof Attr_Diff) { - this.__diff_set_attr.push(diff_obj); - } - if (diff_obj instanceof Vis_Diff) { - this.__diff_set_vis.push(diff_obj); - } - } - - /** - * Topological diff object - */ - function Topo_Diff(obj_spec) { - - this.link_set_rm = obj_spec.link_set_rm; - this.node_set_rm = obj_spec.node_set_rm; - this.node_set_add = obj_spec.node_set_add; - this.link_set_add = obj_spec.link_set_add; - } - - /** - * Attribute diff object, organized by type, where currently - * node,link types are supported - */ - function Attr_Diff(obj_spec) { - this.__type_node = {} - this.__type_link = {} - } - - Attr_Diff.prototype.init_attr_diff = function(type, id) { - - if ('node' != type && 'link' != type) { - console - .error('attempt to init attribute diff for unsupported type: ' - + type); - return; - } - - var type_field = '__type_' + type; - this[type_field][id] = { - '__attr_write' : {}, - '__attr_remove' : [] - }; - - return this; - } - - Attr_Diff.prototype.init_attr_diff_node = function(id) { - return this.init_attr_diff('node', id); - } - - Attr_Diff.prototype.init_attr_diff_link = function(id) { - return this.init_attr_diff('link', id); - } - - Attr_Diff.prototype.add_attr_write_node = function(n_id, attr_name, - attr_val) { - - if (undefined == this.__type_node[n_id]) { - this.init_attr_diff_node(n_id); - } - this.__type_node[n_id].__attr_write[attr_name] = attr_val; - return this; - } - - Attr_Diff.prototype.add_attr_rm_node = function(n_id, attr_name) { - if (undefined == this[n_id]) { - this.init_attr_diff(n_id); - } - this.__type_node[n_id].__attr_remove.push(attr_name); - return this; - } - - /** - * Visual diff object expressing any visual change to the state of a - * particular visualization type - */ - function Vis_Diff(obj_spec) { - } - - function new_topo_diff(obj_spec) { - /* - * validate obj_spec - */ - // TODO - var ret = new Topo_Diff(obj_spec); - return ret; - } - - function new_attr_diff(obj_spec) { - /* - * validate obj_spec - */ - // TODO - var ret = new Attr_Diff(obj_spec); - ret.__type_node = {}; // id-to-obj map - ret.__type_link = {}; // id-to-obj map - return ret; - } - - function new_vis_diff(obj_spec) { - /* - * validate obj_spec - */ - // TODO - var ret = new Vis_Diff(obj_spec); - return ret; - } - - function new_diff_set(obj_spec) { - /* - * validate obj_spec - */ - // TODO - var ret = new Diff_Set(obj_spec); - return ret; - } - - return { - new_topo_diff : new_topo_diff, - new_attr_diff : new_attr_diff, - new_vis_diff : new_vis_diff, - new_diff_set : new_diff_set, - } - });
\ No newline at end of file diff --git a/scripts/model/graph.js b/scripts/model/graph.js deleted file mode 100644 index 820daef0..00000000 --- a/scripts/model/graph.js +++ /dev/null @@ -1,649 +0,0 @@ -"use strict" - -define(['signal', 'consts', 'util', 'textanalysis', 'model/core', 'model/util', 'rz_api_backend', 'rz_api_mesh'], -function (signal, consts, util, textanalysis, model_core, model_util, rz_api_backend, rz_api_mesh) { - -function Graph(el) { - - var nodes = [], - links = []; - - function id_generator_generator() { - var id = 0; - function get_next() { - var next = id; - id += 1; - return next; - } - return get_next; - } - var id_generator = id_generator_generator(); - - ///FUNCTIONS - this.addNode = function(name, type, state) { - if (type === undefined) { - console.log('bug: adding undefined type'); - } - var new_node = this._addNodeNoHistory( - {name:name, - type:type, - state:state, - start:0, - end:0, - status:"unknown"}); - if (new_node) { - signal.signal(consts.APPLIED_GRAPH_DIFF, [{ - nodes: {add: [new_node]}}]); - return new_node; - } - } - - this._addNodeNoHistory = function(spec) { - // No history recorded - this is a helper for loading from files / constant graphs - var node; - if (spec.id === undefined) { - node = findNodeByName(spec.name, null); - } else { - if (spec.id !== undefined) { - node = findNode(spec.id, null); - } - } - if (node === undefined) { - node = { - "id": spec.id || id_generator(), - "name": spec.name, - "type": spec.type, - "state": spec.state, - "start": spec.start, - "end": spec.end, - "status": spec.status, - 'url': spec.url, - 'x': spec.x, - 'y': spec.y, - }; - nodes.push(node); - } - return node; - } - - this.removeNode = function(id, state) { - var i = 0; - var n = findNode(id, state); - while (i < links.length) { - if ((links[i]['source'] === n) || (links[i]['target'] == n)) links.splice(i, 1); - else i++; - } - var index = findNodeIndex(id, state); - if (index !== undefined) { - nodes.splice(index, 1); - } - signal.signal(consts.APPLIED_GRAPH_DIFF, [{nodes: {removed: [id]}}]); - } - - this.removeNodes = function(state) { - var id = null; - var ns = findNodes(null, state); - for (var j = 0; j < ns.length; j++) { - var n = ns[j]; - var i = 0; - while (i < links.length) { - if ((links[i]['source'] === n) || (links[i]['target'] == n)) links.splice(i, 1); - else i++; - } - var index = findNodeIndex(id, state); - if (index !== undefined) { - nodes.splice(index, 1); - } - } - if (ns.length > 0) { - signal.signal(consts.APPLIED_GRAPH_DIFF, [{nodes: {removed: ns.map(function(n) { return n.id; })}}]); - } - } - - /** - * - * getConnectedNodesAndLinks - * - * @id - * @state - defines the starting node (must have id and state) - * @d - depth defining connected component. If -1 returns the entire connected component. (can be the whole graph) - * - * NOTE: chainlinks are treated specially, they don't count for distance. So all their decendants will be added. - * - * NOTE: temp state nodes (n.state === 'temp') are ignored. - * - * @return - { - * 'node': [node] - * 'link': [link] - * } - * - * TODO: rewrite using efficient data structure. Right now iterates over everything - * TODO: implement for d !== 1 - * - */ - this.getConnectedNodesAndLinks = function(n, d) { - var i = 0, - j = 0, - adjacentnode, - link, - link2, - ret = {'nodes':[], 'links':[]}; - - $(".debug").html(n.state); - - if (n === undefined) { - console.log('getConnectedNodesAndLinks: bug: called with undefined node'); - return; - } - if (d !== 1) { - console.log('getConnectedNodesAndLinks: bug: not implemented for d == ' + d); - } - d = d || 1; - - while (i < links.length) { - link = links[i]; - // XXX: using name comparison because n might be stale - if (compareNames(link.source.name, n.name)) { - adjacentnode = findNode(link.target.id, null); - if (adjacentnode.state !== "temp") { - ret.nodes.push({type: 'exit', node: adjacentnode}); - } - ret.links.push({type: 'exit', link: link}); - - if (link.target.type === "chainlink") { - while (j < links.length) { - link2 = links[j]; - if (link.target.id === link2.target.id && - link2.target.type === "chainlink" && - link2.target.state !== "temp") { - adjacentnode = findNode(link2.source.id, null); - if (adjacentnode.state !== "temp") { - ret.nodes.push({type: 'enter', node: adjacentnode}); - } - ret.links.push({type: 'enter', link: link2}); - } - j++; - } - } - j=0; - } - if (compareNames(links[i].target.name, n.name)) { - adjacentnode = findNode(links[i].source.id, null); - if (adjacentnode.state !== "temp") adjacentnode.state = "enter"; - links[i].state = "enter"; - } - i++; - } - return ret; - } - - /* compareSubset: - * state: one of the optional states that defines a subgraph - * new_nodes: array of objects with name - * new_links: array of length two arrays [source_name, target_name] - * returns: true if current and new graph are homomorphic up to - * a single node id change. false otherwise - */ - this.compareSubset = function(state, new_nodes, new_links) { - // Note: the nodes include a state=='temp', type=='bubble' node - // but it's ok since it exists both in new_nodes and in state_nodes - var state_nodes = findNodes(null, state).filter(function (nd) { - return nd.type !== 'bubble'; - }); - var state_links = findLinks(state).map(function(link) { - return [link.source.name, link.target.name]; - }).sort(); - var k; - var state_source, state_target, new_source, new_target; - var changed_nodes; - var verbose = false; // XXX should be global. - var set_old_name, set_new_name; - - new_nodes.map(function (f) { - if (!f.name) { - console.log('missing name on node. node follows'); - console.log(f); - } - }); - new_nodes.sort(); - new_links.sort(); - if (new_nodes.length != state_nodes.length || new_links.length != state_links.length) { - if (verbose) { - console.log('not same size: new/old ' + new_nodes.length + ' / ' + state_nodes.length + '; ' + - new_links.length + ' / ' + state_links.length); - } - return {graph_same: false}; - } - changed_nodes = util.set_diff(util.set_from_array(state_nodes.map(function(d) { return d.name; })), - util.set_from_array(new_nodes.map(function (f) { return f.name; }))); - // we allow any number of changed nodes as long as we it is 1 or 2 :) - if (changed_nodes.a_b.length > 2) { - if (verbose) { - console.log('changed too many nodes'); - console.log(changed_nodes); - } - return {graph_same: false}; - } - set_old_name = util.set_from_array(changed_nodes.a_b); - set_new_name = util.set_from_array(changed_nodes.b_a); - for (k = 0 ; k < state_links.length ; ++k) { - state_source = state_links[k][0]; - state_target = state_links[k][1]; - new_source = new_links[k][0]; - new_target = new_links[k][1]; - if ((state_source !== new_source && - !(state_source in set_old_name && new_source in set_new_name)) - || - (state_target !== new_target && - !(state_target in set_old_name && new_target in set_new_name))) { - if (verbose) { - console.log('not same link: ' + - state_source + '->' + state_target + ' != ' + - new_source + '->' + new_target); - console.log('state_source === new_source: ' + String(state_source === new_source)); - console.log('state_target === new_target: ' + String(state_target === new_target)); - console.log(set_old_name); - console.log(set_new_name); - } - return {graph_same: false}; - } - } - return {graph_same: true, old_name: changed_nodes.a_b, new_name: changed_nodes.b_a}; - } - - this.addLinkByName = function(sourceName, targetName, name, state, drop_conjugator_links) { - var source = findNodeByName(sourceName, null), - target = findNodeByName(targetName, null), - sourceId = source ? source.id : null, - targetId = target ? target.id : null; - - if (sourceId === null || targetId === null) { - console.log('error: link of missing nodes: ' + sourceName + ' (' + sourceId + ') -> ' - + targetName + ' (' + targetId + ')'); - return; - } - this.addLink(sourceId, targetId, name, state, drop_conjugator_links); - } - - this.addLink = function(sourceId, targetId, name, state, drop_conjugator_links) { - var sourceNode = findNode(sourceId, null); - var targetNode = findNode(targetId, null); - var found = findLink(sourceId,targetId,name); - - if (drop_conjugator_links && name && (name.replace(/ /g,"") === "and")) { - state = "temp"; - } - if (sourceNode === undefined || targetNode === undefined) { - return; - } - if (!found) { - var id = id_generator(), - link = { - source: sourceNode, - target: targetNode, - name: name, - state: state, - id: id, - }; - links.push(link); - signal.signal(consts.APPLIED_GRAPH_DIFF, [{links: {add: [link]}}]); - } else { - found.name = name; - found.state = state; - } - } - - this.editLink = function(sourceId, targetId, newname, newstate) { - var link = findLink(sourceId, targetId, newname); - if (link !== undefined) { - link.name = newname; - if (newstate !== undefined) { - link.state = newstate; - } - } - } - - this.editLinkTarget = function(sourceId, targetId, newTarget) { - var link = findLink(sourceId, targetId, null); - if (link !== undefined) { - link.target = findNode(newTarget, null); - - } else { - - } - } - - this.editNameByName = function(old_name, new_name) { - var node = findNodeByName(old_name, null); - - if (node === undefined) { - console.log('editNameByName: error: cannot find node with name ' + old_name); - return; - } - return this.editName(node.id, new_name); // TODO: introduce Node class (yes Amir, I'm now down with that). - } - - this.editName = function(id, new_name) { - var index2 = findNodeByName(new_name, null); - var index = findNode(id, null); - var acceptReplace=true; - - if ((index !== undefined)) { - if (index2 !== undefined) { - acceptReplace = confirm('"' + index2.name + '" will replace "' + index.name + '", are you sure?'); - if (acceptReplace){ - for (var i = 0; i < links.length; i++) { - if (links[i].source === index) { - links[i].source = index2; - } - if (links[i].target === index) { - links[i].target = index2; - } - } - this.removeNode(index.id,null); - } - } else { - index.name = new_name; - } - } - } - - this.editDates = function(id, type, start, end) { - var index = findNode(id, type); - if ((index !== undefined)) { - index.start = start; - index.end = end; - } - } - - /** - * editType: - * - * @return true if type changed - */ - this.editType = function(id, state, newtype) { - var index = findNode(id, state); - if ((index !== undefined)) { - index.type = newtype; - } - } - - this.editURL = function(id, state, url) { - var index = findNode(id, state); - if ((index === undefined)) return; - index.url = url; - } - - this.editState = function(id, state, newstate) { - var index = findNode(id, state); - - if ((index !== undefined)) { - index.state = newstate; - } - } - - this.findCoordinates = function(id, type) { - var index = findNode(id, type); - if ((index !== undefined)) { - $('.typeselection').css('top', index.y - 90); - $('.typeselection').css('left', index.x - 230); - } - } - - this.removeLink = function(link) { - var link, - i; - - for ( i = 0 ; i < links.length; ++i ) { - if (link.id !== undefined) { - if (link.id === links[i].id) { - links.splice(i, 1); - return; - } - } else { - if (link.sourceId === links[i].sourceId && link.targetId === links[i].targetId) { - links.splice(i, 1); - return; - } - } - } - console.log('bug: attempt to remove non existant link'); - } - - this.removeLinks = function(state) { - var id = null; - var ls = findLinks(state); - for (var j = 0; j < ls.length; j++) { - var l = ls[j]; - var i = 0; - while (i < links.length) { - if (links[i] === l) links.splice(i, 1); - else i++; - } - } - } - - var findLink = function(sourceId, targetId, name) { - for (var i = 0; i < links.length; i++) { - if (links[i].source.id === sourceId && links[i].target.id === targetId) { - return links[i]; - } - } - } - - var findLinks = function(state) { - var foundLinks = []; - for (var i = 0; i < links.length; i++) { - if (links[i].state == state) { - foundLinks.push(links[i]); - } - } - return foundLinks; - } - - var compareNames = function(name1, name2) { - return name1.toLowerCase() === name2.toLowerCase(); - }; - - var hasNodeByName = function(name, state) { - var i; - - for (i = 0 ; i < nodes.length; ++i) { - if (compareNames(nodes[i].name, name) && nodes[i].state === state) { - return true; - } - } - return false; - } - this.hasNodeByName = hasNodeByName; - - var hasNode = function(id, state) { - var i; - - for (i = 0 ; i < nodes.length; ++i) { - if (nodes[i].id === id && nodes[i].state === state) { - return true; - } - } - return false; - } - this.hasNode = hasNode; - - var findNode = function(id, state) { - for (var i = 0; i < nodes.length; i++) { - if (nodes[i].id === id || nodes[i].state === state) - return nodes[i]; - }; - } - - var findNodeByName = function(name, state) { - for (var i = 0 ; i < nodes.length ; ++i) { - if (compareNames(nodes[i].name, name) || nodes[i].state === state) { - return nodes[i]; - } - } - } - - var findNodes = function(id, state) { - // id=id.toLowerCase(); - var foundNodes = []; - for (var i = 0; i < nodes.length; i++) { - if ((id && nodes[i].id === id) || (state && nodes[i].state === state)) - foundNodes.push(nodes[i]); - } - return foundNodes; - } - - var findNodeIndex = function(id, state) { - for (var i = 0; i < nodes.length; i++) { - if ((id && nodes[i].id === id) || (state && nodes[i].state === state)) - return i; - }; - } - - function clear() { - nodes.length = 0; - links.length = 0; - } - this.clear = clear; - - function empty() { - return nodes.length == 0 && links.length == 0; - } - this.empty = empty; - - // @ajax-trans - this.commit_diff_set = function (diff_set) { - - function on_success(data){ - // TODO impl - } - - rz_api_mesh.broadcast_possible_next_diff_block(diff_set); - } - - /** - * perform initial DB load from backend - */ - // @ajax-trans - function load_from_backend() { - - function on_success(data){ - var n_set = []; - var l_set = []; - var len; - - len = data['node_set'].length; - for (var i = 0; i < len; i++) { - var n_raw = data['node_set'][i]; - var n = model_util.adapt_format_read_node(n_raw); - n_set.push(n); - } - - len = data['link_set'].length; - for (var i = 0; i < len; i++) { - var l_raw = data['link_set'][i]; - var l = model_util.adapt_format_read_link(l_raw); - l_set.push(l); - } - - len = n_set.length - for (var i = 0; i < len; i++) { - var n = n_set[i]; - graph.addNode(n.id, n.type, n.state) - } - - len = l_set.length - for (var i = 0; i < len; i++) { - var l = l_set[i]; - graph.addLink_byIds(l.sourceId, l.targetId, l.name, "perm") - } - } - - rz_api_backend.clone(0, on_success); - } - - this.load_from_json = function(json) { - var data = JSON.parse(json); - var i, node, link; - - clear(); - if (data == null) { - console.log('load callback: no data to load'); - return; - } - for(i = 0; i < data["nodes"].length; i++){ - node = data.nodes[i]; - this._addNodeNoHistory({id:node.id, name:node.name ? node.name : node.id, - type:node.type,state:"perm", - start:new Date(node.start), - end:new Date(node.end), - status:node.status, - url:node.url, - x: node.x, - y: node.y, - }); - textanalysis.autoSuggestAddName(node.name.toLowerCase()); - } - for(i = 0; i < data["links"].length; i++){ - link = data.links[i]; - this.addLink(link.source, link.target, link.name, "perm"); - } - this.clear_history(); - } - - this.save_to_json = function() { - var d = {"nodes":[], "links":[]}; - for(var i = 0 ; i < nodes.length ; i++){ - var node = nodes[i]; - d['nodes'].push({ - "id": node.id, - "name": node.name, - "type":node.type, - "state":"perm", - "start":node.start, - "end":node.end, - "status": node.status, - "url": node.url, - "x": node.x, - "y": node.y, - }); - } - for(var j=0 ; j < links.length ; j++){ - var link = links[j]; - d['links'].push({ - "source":link.source.id, - "target":link.target.id, - "name":link.name - }); - } - return JSON.stringify(d); - } - - this.set_user = function(user) { - this.user = user; - this.history = new History(this.user, $('svg g.zoom')[0]); - console.log('new user: ' + user); - } - - function clear_history() { - if (this.history !== undefined) { - this.history.clear(); - } - } - - this.clear_history = clear_history; - - var get_nodes = function() { return nodes; }; - this.nodes = get_nodes; - - var get_links = function() { return links; }; - this.links = get_links; - -} - -return { - Graph: Graph, -}; - -}); diff --git a/scripts/model/util.js b/scripts/model/util.js deleted file mode 100644 index 43fa66db..00000000 --- a/scripts/model/util.js +++ /dev/null @@ -1,117 +0,0 @@ -"use strict" - -/** - * model utility functions: - * - convert from/to client/backend data representations - */ -define(['jquery', 'model/diff'], -function($, model_diff) { - - /** - * read by adapting from backend format - */ - function adapt_format_read_node(n_raw) { - var ret; - - ret = $.extend({ - 'type' : n_raw['__type'].toLowerCase(), // discard all - // labels except - 'state' : 'temp', - }, n_raw); - - delete ret.__label_set; - - return ret; - } - - /** - * write by adapting to backend format - */ - function adapt_format_write_node(n_raw) { - var ret = $.extend({ - '__type' : n_raw.type, - }, n_raw); - - delete ret.type; - delete ret.state; - - return ret - } - - /** - * read by adapting from backend format - */ - function adapt_format_read_link(l_raw) { - var ret; - - ret = $.extend({ - 'sourceId' : l_raw['__src'], - 'targetId' : l_raw['__dst'], - 'type' : l_raw['__type'].toLowerCase(), // discard all - // labels except - 'state' : 'temp', - }, l_raw); - - ret['name'] = ret['type']; - - delete ret.__src; - delete ret.__dst; - delete ret.__type; - - return ret; - } - - /** - * write by adapting to backend format - */ - function adapt_format_write_link(l_raw) { - var ret = $.extend({ - '__src' : l_raw.sourceId, - '__dst' : l_raw.targetId, - '__type' : 'textual_link', - }, l_raw); - - delete ret.source; - delete ret.target; - delete ret.state; - - return ret; - } - - /** - * write adapt diff from node set, link set. sets may be passed by reference - * as they are cloned - */ - function adapt_format_write_topo_diff(n_set, l_set) { - - var new_n_set = $.extend([], n_set); - var new_l_set = $.extend([], l_set); - - // filter out 'bubble' nodes - new_n_set = new_n_set.filter(function(n) { - return 'bubble' != n.type; - }); - - new_n_set = $.map(new_n_set, function(n, _) { - return adapt_format_write_node(n); - }) - - new_l_set = $.map(new_l_set, function(l, _) { - return adapt_format_write_link(l); - }) - - var topo_diff = new model_diff.new_topo_diff({ - node_set_add : new_n_set, - link_set_add : new_l_set - }); - return topo_diff; - } - - return { - adapt_format_read_node : adapt_format_read_node, - adapt_format_read_link : adapt_format_read_link, - adapt_format_write_node : adapt_format_write_node, - adapt_format_write_link : adapt_format_write_link, - adapt_format_write_topo_diff : adapt_format_write_topo_diff, - } -});
\ No newline at end of file |
