forked from gephi/gephi
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathoverview.html
More file actions
61 lines (60 loc) · 3.62 KB
/
Copy pathoverview.html
File metadata and controls
61 lines (60 loc) · 3.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<body>
General API that defines the graph structure.
<p>
API is providing a complete graph data structure that has the following
features:
<ul><li>Directed, Undirected and Mixed graphs support</li>
<li>Easy iterable structure</li>
<li>Thread-safe</li>
<li>Hierarchical graphs, graphs within graphs support</li>
<li>Automatic meta-edges calculation</li>
<li>Subscrive to graph events</li>
<li>Multi-view, host sub graphs</li></ul>
</p>
<p>
The <code>Graph</code> interface has classical features needed for graph
algorithms and is simplifying accesses by returning <code>NodeIterable</code> and
<code>EdgeIterable</code>. The internal data model is flexible with the
type of graph (directed, undirected or mixed) and allows to get any type
of graph regardless to its nature. For instance its totally possible to
get an undirected graph, even if all edges are directed and the contrary.
No convert operations has to be performed because <code>Graph</code>
interfaces are only accessors. All <code>Graph</code> interfaces
(<code>DirectedGraph</code>, <code>UndirectedGraph</code>,
<code>HierarchicalGraph</code>, ...) can ge get from the graph model.
Therefore on the client side, <code>GraphModel</code> is the only object
to keep in memory. For instance to iterate over nodes, you first ask for a
new <code>Graph</code> object to the model and then call <code>getNodes()</code>.
</p>
<p>The structure is securized by a read-write lock. That means multiple
threads can read the graph at the same moment, but writing is exclusive. If
a thread is currently updating the graph, readers have to wait. Most of the
time the locking will be transparent but it can also be controlled for more
advanced operations.</p>
<p>This graph structure API differs slightly from others about hierarchical
graphs and propose an efficient automatic <b>meta-edges</b> calculation. The basic
idea is that the hierarchy defines a tree of nodes and a marker for each node
to flatten the representation. A marked node cannot have any ancestor or
descendants be marked as well. When a node is unmarked and his children are
marked we call this <b>expand</b>. The contrary operation is <b>retract</b>.
The expand and retract operations are available in the API, and let users
navigate in <b>multilevels</b> with ease. Therefore group of nodes is unified
in the model, and represents a node that has children in the hierarchy. When
a node is not a leaf, it is called a meta-node. In addition, users can access
meta-edges that comes from the current expand/retract positionning. Meta-edges
are edges that connects group of nodes according to edges between nodes.
If computed manually, that would require costly procedure. The hierarchical
graph support currently has only a single limitation, a node can only have
one parent.
</p>
<p>
The multi-view support allows to define views on the graph and thus create
sub-graphs. The API proposes, for a <code>GraphModel</code> to have several
<code>GraphView</code> on the same nodes and edges. One can get graphs
exactly in the same way on sub-graphs than on graphs, and therefore execute
the same operations.
</p>
</body>
</html>