UNPKG

1.55 kBJavaScriptView Raw
1
2//
3// # IperEdge
4//
5
6var _ = require('underscore')
7 , inherits = require('inherits')
8
9var IperElement = require('./IperElement')
10
11//
12// ## Constructor
13//
14
15function IperEdge(graph, nodeIds) {
16
17 //
18 // ### signature (graph, nodeIds)
19 //
20
21 // *graph* must be defined
22 if (_.isUndefined(graph))
23 throw new Error()
24
25 // *graph.nodes* must be an object
26 if (! (_.isObject(graph.nodes)))
27 throw new Error()
28
29 // *nodeIds* must be an array
30 if (! (_.isArray(nodeIds)))
31 throw new Error()
32
33 _.each(nodeIds, function (id) {
34 var node = graph.getNode(id)
35
36 /* check that nodeIds refers to existing nodes */
37 if (_.isUndefined(node))
38 throw new Error()
39
40 /* if maxDegree is not defined there is no trouble ... */
41 if (_.isUndefined(node.maxDegree))
42 return
43
44 /* otherwise check that node degree is not going to exceed its maxDegree */
45 if (node.degree === node.maxDegree)
46 throw new Error()
47 })
48
49 IperElement.call(this, graph)
50
51 //
52 // ## Attributes
53 //
54
55 //
56 // ### nodeIds
57 //
58 // It is an array of node ids.
59 //
60
61 Object.defineProperty(this, 'nodeIds', {
62 enumerable: true,
63 value: nodeIds
64 })
65
66 /* add this edge to graph */
67 graph.edges.push(this)
68}
69
70inherits(IperEdge, IperElement)
71
72//
73// ## Methods
74//
75
76//
77// ### remove()
78//
79// Removes the edge from its graph
80//
81
82function remove () {
83 this.graph.removeEdge(this.id)
84}
85
86IperEdge.prototype.remove = remove
87
88module.exports = IperEdge
89