0001 function g = graph(n)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 if ~graph_system_exists
0012 graph_init;
0013 end
0014
0015 global GRAPH_MAGIC;
0016
0017
0018 idx = find_available;
0019 if (idx == 0)
0020 error('Graph system memory is full; cannot create new graph');
0021 end
0022
0023
0024 if (nargin==0)
0025 n = 0;
0026 end
0027
0028
0029
0030 if (isa(n,'graph'))
0031 GRAPH_MAGIC.in_use(idx) = 1;
0032 GRAPH_MAGIC.graphs{idx} = GRAPH_MAGIC.graphs{n.idx};
0033 g.idx = idx;
0034 g = class(g,'graph');
0035 make_logical(g);
0036 return
0037 end
0038
0039
0040
0041 [nr,nc] = size(n);
0042 if (nc > 2)
0043 error('Graph constructor argument is wrong shape')
0044 end
0045 if (nc==2)
0046 v = max(max(n));
0047 GRAPH_MAGIC.in_use(idx) = 1;
0048 GRAPH_MAGIC.graphs{idx}.array = logical(sparse([],[],[],v,v,1));
0049 g.idx = idx;
0050 g = class(g,'graph');
0051
0052 if (v <= GRAPH_MAGIC.large_size)
0053 full(g);
0054 end
0055 add(g,n);
0056 return
0057 end
0058
0059
0060
0061 GRAPH_MAGIC.in_use(idx) = 1;
0062 GRAPH_MAGIC.graphs{idx}.array = logical(sparse([],[],[],n,n,n));
0063
0064 g.idx = idx;
0065 g = class(g,'graph');
0066
0067
0068
0069
0070 if (n < GRAPH_MAGIC.large_size)
0071 full(g)
0072 end
0073
0074 make_logical(g);