SNAP Library 4.1, Developer Reference  2018-07-26 16:30:42
SNAP, a general purpose, high performance system for analysis and manipulation of large networks
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
gio.h
Go to the documentation of this file.
1 // Loading and saving graphs from/to various file formats.
3 namespace TSnap {
4 
5 //const TStr EDGES_START("#EDGES");
6 const TStr EDGES_START = ("#EDGES");
7 const TStr NODES_START = ("#NODES");
8 const TStr END_SENTINEL = ("#END");
9 const TStr SRC_ID_NAME = ("SrcNId");
10 const TStr DST_ID_NAME = ("DstNId");
11 const TStr NID_NAME = ("NId");
12 const TStr INT_TYPE_PREFIX = ("Int");
13 const TStr FLT_TYPE_PREFIX = ("Flt");
14 const TStr STR_TYPE_PREFIX = ("Str");
15 const TStr NULL_VAL = ("__null__");
16 
18 template <class PGraph> PGraph LoadEdgeList(const TStr& InFNm, const int& SrcColId=0, const int& DstColId=1);
20 template <class PGraph> PGraph LoadEdgeList(const TStr& InFNm, const int& SrcColId, const int& DstColId, const char& Separator);
22 PNEANet LoadEdgeListNet(const TStr& InFNm, const char& Separator);
24 template <class PGraph> PGraph LoadEdgeListStr(const TStr& InFNm, const int& SrcColId=0, const int& DstColId=1);
26 template <class PGraph> PGraph LoadEdgeListStr(const TStr& InFNm, const int& SrcColId, const int& DstColId, TStrHash<TInt>& StrToNIdH);
28 template <class PGraph> PGraph LoadConnList(const TStr& InFNm);
30 template <class PGraph> PGraph LoadConnListStr(const TStr& InFNm, TStrHash<TInt>& StrToNIdH);
31 
33 
35 template <class PGraph> PGraph LoadPajek(const TStr& InFNm);
37 PNGraph LoadDyNet(const TStr& FNm);
40 
41 //TODO: Sparse/Dense adjacency matrix which values we threshold at Thresh to obtain an adjacency matrix.
42 //template <class PGraph> PGraph LoadAdjMtx(const TStr& FNm, const int Thresh);
43 //TODO: Load from a GML file format (http://en.wikipedia.org/wiki/Graph_Modelling_Language)
44 //template <class PGraph> PGraph LoadGml(const TStr& FNm, const int Thresh);
45 
46 
48 template <class PGraph> void SaveEdgeList(const PGraph& Graph, const TStr& OutFNm, const TStr& Desc=TStr());
50 void SaveEdgeListNet(const PNEANet& Graph, const TStr& OutFNm, const TStr& Desc);
52 template <class PGraph> void SavePajek(const PGraph& Graph, const TStr& OutFNm);
54 template <class PGraph> void SavePajek(const PGraph& Graph, const TStr& OutFNm, const TIntStrH& NIdColorH);
56 template <class PGraph> void SavePajek(const PGraph& Graph, const TStr& OutFNm, const TIntStrH& NIdColorH, const TIntStrH& NIdLabelH);
58 template <class PGraph> void SavePajek(const PGraph& Graph, const TStr& OutFNm, const TIntStrH& NIdColorH, const TIntStrH& NIdLabelH, const TIntStrH& EIdColorH);
60 template <class PGraph> void SaveMatlabSparseMtx(const PGraph& Graph, const TStr& OutFNm);
62 
65 template<class PGraph> void SaveGViz(const PGraph& Graph, const TStr& OutFNm, const TStr& Desc=TStr(), const bool& NodeLabels=false, const TIntStrH& NIdColorH=TIntStrH());
67 
70 template<class PGraph> void SaveGViz(const PGraph& Graph, const TStr& OutFNm, const TStr& Desc, const TIntStrH& NIdLabelH);
71 
72 //TODO: Save to a GML file format (http://en.wikipedia.org/wiki/Graph_Modelling_Language)
73 //template <class PGraph> SaveGml(const PGraph& Graph, const TStr& OutFNm, const TStr& Desc);
74 
76 // Implementation
77 
79 
83 template <class PGraph>
84 PGraph LoadEdgeList(const TStr& InFNm, const int& SrcColId, const int& DstColId) {
85  TSsParser Ss(InFNm, ssfWhiteSep, true, true, true);
86  PGraph Graph = PGraph::TObj::New();
87  int SrcNId, DstNId;
88 
89  while (Ss.Next()) {
90  if (! Ss.GetInt(SrcColId, SrcNId) || ! Ss.GetInt(DstColId, DstNId)) { continue; }
91  if (! Graph->IsNode(SrcNId)) { Graph->AddNode(SrcNId); }
92  if (! Graph->IsNode(DstNId)) { Graph->AddNode(DstNId); }
93  Graph->AddEdge(SrcNId, DstNId);
94  }
95  Graph->Defrag();
96  return Graph;
97 }
98 
100 
104 template <class PGraph>
105 PGraph LoadEdgeList(const TStr& InFNm, const int& SrcColId, const int& DstColId, const char& Separator) {
106  TSsParser Ss(InFNm, Separator);
107  PGraph Graph = PGraph::TObj::New();
108  int SrcNId, DstNId;
109  while (Ss.Next()) {
110  if (! Ss.GetInt(SrcColId, SrcNId) || ! Ss.GetInt(DstColId, DstNId)) { continue; }
111  if (! Graph->IsNode(SrcNId)) { Graph->AddNode(SrcNId); }
112  if (! Graph->IsNode(DstNId)) { Graph->AddNode(DstNId); }
113  Graph->AddEdge(SrcNId, DstNId);
114  }
115  Graph->Defrag();
116  return Graph;
117 }
118 
120 
125 template <class PGraph>
126 PGraph LoadEdgeListStr(const TStr& InFNm, const int& SrcColId, const int& DstColId) {
127  TSsParser Ss(InFNm, ssfWhiteSep);
128  PGraph Graph = PGraph::TObj::New();
129  TStrHash<TInt> StrToNIdH(Mega(1), true); // hash-table mapping strings to integer node ids
130  while (Ss.Next()) {
131  const int SrcNId = StrToNIdH.AddKey(Ss[SrcColId]);
132  const int DstNId = StrToNIdH.AddKey(Ss[DstColId]);
133  if (! Graph->IsNode(SrcNId)) { Graph->AddNode(SrcNId); }
134  if (! Graph->IsNode(DstNId)) { Graph->AddNode(DstNId); }
135  Graph->AddEdge(SrcNId, DstNId);
136  }
137  Graph->Defrag();
138  return Graph;
139 }
140 
142 
148 template <class PGraph>
149 PGraph LoadEdgeListStr(const TStr& InFNm, const int& SrcColId, const int& DstColId, TStrHash<TInt>& StrToNIdH) {
150  TSsParser Ss(InFNm, ssfWhiteSep);
151  PGraph Graph = PGraph::TObj::New();
152  while (Ss.Next()) {
153  const int SrcNId = StrToNIdH.AddKey(Ss[SrcColId]);
154  const int DstNId = StrToNIdH.AddKey(Ss[DstColId]);
155  if (! Graph->IsNode(SrcNId)) { Graph->AddNode(SrcNId); }
156  if (! Graph->IsNode(DstNId)) { Graph->AddNode(DstNId); }
157  Graph->AddEdge(SrcNId, DstNId);
158  }
159  Graph->Defrag();
160  return Graph;
161 }
162 
164 
168 template <class PGraph>
169 PGraph LoadConnList(const TStr& InFNm) {
170  TSsParser Ss(InFNm, ssfWhiteSep, true, true, true);
171  PGraph Graph = PGraph::TObj::New();
172  while (Ss.Next()) {
173  if (! Ss.IsInt(0)) { continue; }
174  const int SrcNId = Ss.GetInt(0);
175  if (! Graph->IsNode(SrcNId)) { Graph->AddNode(SrcNId); }
176  for (int dst = 1; dst < Ss.Len(); dst++) {
177  const int DstNId = Ss.GetInt(dst);
178  if (! Graph->IsNode(DstNId)) { Graph->AddNode(DstNId); }
179  Graph->AddEdge(SrcNId, DstNId);
180  }
181  }
182  Graph->Defrag();
183  return Graph;
184 }
185 
187 
192 template <class PGraph>
193 PGraph LoadConnListStr(const TStr& InFNm, TStrHash<TInt>& StrToNIdH) {
194  TSsParser Ss(InFNm, ssfWhiteSep, true, true, true);
195  PGraph Graph = PGraph::TObj::New();
196  while (Ss.Next()) {
197  const int SrcNId = StrToNIdH.AddDatId(Ss[0]);
198  if (! Graph->IsNode(SrcNId)) { Graph->AddNode(SrcNId); }
199  for (int dst = 1; dst < Ss.Len(); dst++) {
200  const int DstNId = StrToNIdH.AddDatId(Ss[dst]);
201  if (! Graph->IsNode(DstNId)) { Graph->AddNode(DstNId); }
202  Graph->AddEdge(SrcNId, DstNId);
203  }
204  }
205  Graph->Defrag();
206  return Graph;
207 }
208 
209 template <class PGraph>
210 PGraph LoadPajek(const TStr& InFNm) {
211  PGraph Graph = PGraph::TObj::New();
212  TSsParser Ss(InFNm, ssfSpaceSep, true, true, true);
213  while ((Ss.Len()==0 || strstr(Ss[0], "*vertices") == NULL) && ! Ss.Eof()) {
214  Ss.Next(); Ss.ToLc(); }
215  // nodes
216  bool EdgeList = true;
217  EAssert(strstr(Ss[0], "*vertices") != NULL);
218  while (Ss.Next()) {
219  Ss.ToLc();
220  if (Ss.Len()>0 && Ss[0][0] == '%') { continue; } // comment
221  if (strstr(Ss[0], "*arcslist")!=NULL || strstr(Ss[0],"*edgeslist")!=NULL) { EdgeList=false; break; }
222  if (strstr(Ss[0], "*arcs")!=NULL || strstr(Ss[0],"*edges")!=NULL) { break; } // arcs are directed, edges are undirected
223  Graph->AddNode(Ss.GetInt(0));
224  }
225  // edges
226  while (Ss.Next()) {
227  if (Ss.Len()>0 && Ss[0][0] == '%') { continue; } // comment
228  if (Ss.Len()>0 && Ss[0][0] == '*') { break; }
229  if (EdgeList) {
230  // <source> <destination> [ <weight> ]
231  if (Ss.Len() >= 2 && Ss.IsInt(0) && Ss.IsInt(1)) {
232  Graph->AddEdge(Ss.GetInt(0), Ss.GetInt(1));
233  }
234  } else {
235  // <source> <destination1> <destination2> <destination3> ...
236  const int SrcNId = Ss.GetInt(0);
237  for (int i = 1; i < Ss.Len(); i++) {
238  Graph->AddEdge(SrcNId, Ss.GetInt(i)); }
239  }
240  }
241  return Graph;
242 }
243 
244 template <class PGraph>
245 void SaveEdgeList(const PGraph& Graph, const TStr& OutFNm, const TStr& Desc) {
246  FILE *F = fopen(OutFNm.CStr(), "wt");
247  if (HasGraphFlag(typename PGraph::TObj, gfDirected)) { fprintf(F, "# Directed graph: %s \n", OutFNm.CStr()); }
248  else { fprintf(F, "# Undirected graph (each unordered pair of nodes is saved once): %s\n", OutFNm.CStr()); }
249  if (! Desc.Empty()) { fprintf(F, "# %s\n", Desc.CStr()); }
250  fprintf(F, "# Nodes: %d Edges: %d\n", Graph->GetNodes(), Graph->GetEdges());
251  if (HasGraphFlag(typename PGraph::TObj, gfDirected)) { fprintf(F, "# FromNodeId\tToNodeId\n"); }
252  else { fprintf(F, "# NodeId\tNodeId\n"); }
253  for (typename PGraph::TObj::TEdgeI ei = Graph->BegEI(); ei < Graph->EndEI(); ei++) {
254  fprintf(F, "%d\t%d\n", ei.GetSrcNId(), ei.GetDstNId());
255  }
256  fclose(F);
257 }
258 
259 template <class PGraph>
260 void SavePajek(const PGraph& Graph, const TStr& OutFNm) {
261  TIntH NIdToIdH(Graph->GetNodes(), true);
262  FILE *F = fopen(OutFNm.CStr(), "wt");
263  fprintf(F, "*Vertices %d\n", Graph->GetNodes());
264  int i = 0;
265  for (typename PGraph::TObj::TNodeI NI = Graph->BegNI(); NI < Graph->EndNI(); NI++, i++) {
266  fprintf(F, "%d \"%d\" ic Red fos 10\n", i+1, NI.GetId()); // ic: internal color, fos: font size
267  NIdToIdH.AddDat(NI.GetId(), i+1);
268  }
269  if (HasGraphFlag(typename PGraph::TObj, gfDirected)) {
270  fprintf(F, "*Arcs %d\n", Graph->GetEdges()); } // arcs are directed, edges are undirected
271  else {
272  fprintf(F, "*Edges %d\n", Graph->GetEdges());
273  }
274  for (typename PGraph::TObj::TEdgeI EI = Graph->BegEI(); EI < Graph->EndEI(); EI++) {
275  const int SrcNId = NIdToIdH.GetDat(EI.GetSrcNId());
276  const int DstNId = NIdToIdH.GetDat(EI.GetDstNId());
277  fprintf(F, "%d %d %d c Black\n", SrcNId, DstNId, 1); // width=1
278  }
279  fclose(F);
280 }
281 
284 template <class PGraph>
285 void SavePajek(const PGraph& Graph, const TStr& OutFNm, const TIntStrH& NIdColorH) {
286  TIntH NIdToIdH(Graph->GetNodes(), true);
287  FILE *F = fopen(OutFNm.CStr(), "wt");
288  fprintf(F, "*Vertices %d\n", Graph->GetNodes());
289  int i = 0;
290  for (typename PGraph::TObj::TNodeI NI = Graph->BegNI(); NI < Graph->EndNI(); NI++, i++) {
291  fprintf(F, "%d \"%d\" ic %s fos 10\n", i+1, NI.GetId(),
292  NIdColorH.IsKey(NI.GetId()) ? NIdColorH.GetDat(NI.GetId()).CStr() : "Red");
293  NIdToIdH.AddDat(NI.GetId(), i+1);
294  }
295  if (HasGraphFlag(typename PGraph::TObj, gfDirected)) {
296  fprintf(F, "*Arcs %d\n", Graph->GetEdges()); } // arcs are directed, edges are undirected
297  else {
298  fprintf(F, "*Edges %d\n", Graph->GetEdges());
299  }
300  for (typename PGraph::TObj::TEdgeI EI = Graph->BegEI(); EI < Graph->EndEI(); EI++) {
301  const int SrcNId = NIdToIdH.GetDat(EI.GetSrcNId());
302  const int DstNId = NIdToIdH.GetDat(EI.GetDstNId());
303  fprintf(F, "%d %d %d c Black\n", SrcNId, DstNId, 1);
304  }
305  fclose(F);
306 }
307 
311 template <class PGraph>
312 void SavePajek(const PGraph& Graph, const TStr& OutFNm, const TIntStrH& NIdColorH, const TIntStrH& NIdLabelH) {
313  TIntH NIdToIdH(Graph->GetNodes(), true);
314  FILE *F = fopen(OutFNm.CStr(), "wt");
315  fprintf(F, "*Vertices %d\n", Graph->GetNodes());
316  int i = 0;
317  for (typename PGraph::TObj::TNodeI NI = Graph->BegNI(); NI < Graph->EndNI(); NI++, i++) {
318  fprintf(F, "%d \"%s\" ic %s fos 10\n", i+1,
319  NIdLabelH.IsKey(NI.GetId()) ? NIdLabelH.GetDat(NI.GetId()).CStr() : TStr::Fmt("%d", NI.GetId()).CStr(),
320  NIdColorH.IsKey(NI.GetId()) ? NIdColorH.GetDat(NI.GetId()).CStr() : "Red");
321  NIdToIdH.AddDat(NI.GetId(), i+1);
322  }
323  if (HasGraphFlag(typename PGraph::TObj, gfDirected)) {
324  fprintf(F, "*Arcs %d\n", Graph->GetEdges()); } // arcs are directed, edges are undirected
325  else {
326  fprintf(F, "*Edges %d\n", Graph->GetEdges());
327  }
328  for (typename PGraph::TObj::TEdgeI EI = Graph->BegEI(); EI < Graph->EndEI(); EI++) {
329  const int SrcNId = NIdToIdH.GetDat(EI.GetSrcNId());
330  const int DstNId = NIdToIdH.GetDat(EI.GetDstNId());
331  fprintf(F, "%d %d %d c Black\n", SrcNId, DstNId, 1);
332  }
333  fclose(F);
334 }
335 
340 template <class PGraph>
341 void SavePajek(const PGraph& Graph, const TStr& OutFNm, const TIntStrH& NIdColorH, const TIntStrH& NIdLabelH, const TIntStrH& EIdColorH) {
342  CAssert(HasGraphFlag(typename PGraph::TObj, gfMultiGraph)); // network needs to have edge ids
343  TIntH NIdToIdH(Graph->GetNodes(), true);
344  FILE *F = fopen(OutFNm.CStr(), "wt");
345  fprintf(F, "*Vertices %d\n", Graph->GetNodes());
346  int i = 0;
347  for (typename PGraph::TObj::TNodeI NI = Graph->BegNI(); NI < Graph->EndNI(); NI++, i++) {
348  fprintf(F, "%d \"%s\" ic %s fos 10\n", i+1,
349  NIdLabelH.IsKey(NI.GetId()) ? NIdLabelH.GetDat(NI.GetId()).CStr() : TStr::Fmt("%d", NI.GetId()).CStr(),
350  NIdColorH.IsKey(NI.GetId()) ? NIdColorH.GetDat(NI.GetId()).CStr() : "Red");
351  NIdToIdH.AddDat(NI.GetId(), i+1);
352  }
353  if (HasGraphFlag(typename PGraph::TObj, gfDirected)) {
354  fprintf(F, "*Arcs %d\n", Graph->GetEdges()); } // arcs are directed, edges are undirected
355  else {
356  fprintf(F, "*Edges %d\n", Graph->GetEdges());
357  }
358  for (typename PGraph::TObj::TEdgeI EI = Graph->BegEI(); EI < Graph->EndEI(); EI++) {
359  const int SrcNId = NIdToIdH.GetDat(EI.GetSrcNId());
360  const int DstNId = NIdToIdH.GetDat(EI.GetDstNId());
361  fprintf(F, "%d %d 1 c %s\n", SrcNId, DstNId,
362  EIdColorH.IsKey(EI.GetId()) ? EIdColorH.GetDat(EI.GetId()).CStr() : "Black");
363  }
364  fclose(F);
365 }
366 
368 template <class PGraph>
369 void SaveMatlabSparseMtx(const PGraph& Graph, const TStr& OutFNm) {
370  FILE *F = fopen(OutFNm.CStr(), "wt");
371  TIntSet NIdSet(Graph->GetNodes()); // so that
372  for (typename PGraph::TObj::TNodeI NI = Graph->BegNI(); NI < Graph->EndNI(); NI++) {
373  NIdSet.AddKey(NI.GetId());
374  }
375  for (typename PGraph::TObj::TEdgeI EI = Graph->BegEI(); EI < Graph->EndEI(); EI++) {
376  const int Src = NIdSet.GetKeyId(EI.GetSrcNId())+1;
377  const int Dst = NIdSet.GetKeyId(EI.GetDstNId())+1;
378  fprintf(F, "%d\t%d\t1\n", Src, Dst);
379  if (! HasGraphFlag(typename PGraph::TObj, gfDirected) && Src!=Dst) {
380  fprintf(F, "%d\t%d\t1\n", Dst, Src);
381  }
382  }
383  fclose(F);
384 }
385 
386 template<class PGraph>
387 void SaveGViz(const PGraph& Graph, const TStr& OutFNm, const TStr& Desc, const bool& NodeLabels, const TIntStrH& NIdColorH) {
388  const bool IsDir = HasGraphFlag(typename PGraph::TObj, gfDirected);
389  FILE *F = fopen(OutFNm.CStr(), "wt");
390  if (! Desc.Empty()) fprintf(F, "/*****\n%s\n*****/\n\n", Desc.CStr());
391  if (IsDir) { fprintf(F, "digraph G {\n"); } else { fprintf(F, "graph G {\n"); }
392  fprintf(F, " graph [splines=false overlap=false]\n"); //size=\"12,10\" ratio=fill
393  // node [width=0.3, height=0.3, label=\"\", style=filled, color=black]
394  // node [shape=box, width=0.3, height=0.3, label=\"\", style=filled, fillcolor=red]
395  fprintf(F, " node [shape=ellipse, width=0.3, height=0.3%s]\n", NodeLabels?"":", label=\"\"");
396  // node colors
397  //for (int i = 0; i < NIdColorH.Len(); i++) {
398  for (typename PGraph::TObj::TNodeI NI = Graph->BegNI(); NI < Graph->EndNI(); NI++) {
399  if (NIdColorH.IsKey(NI.GetId())) {
400  fprintf(F, " %d [style=filled, fillcolor=\"%s\"];\n", NI.GetId(), NIdColorH.GetDat(NI.GetId()).CStr()); }
401  else {
402  fprintf(F, " %d ;\n", NI.GetId());
403  }
404  }
405  // edges
406  for (typename PGraph::TObj::TNodeI NI = Graph->BegNI(); NI < Graph->EndNI(); NI++) {
407  if (NI.GetOutDeg()==0 && NI.GetInDeg()==0 && !NIdColorH.IsKey(NI.GetId())) {
408  fprintf(F, "%d;\n", NI.GetId()); }
409  else {
410  for (int e = 0; e < NI.GetOutDeg(); e++) {
411  if (! IsDir && NI.GetId() > NI.GetOutNId(e)) { continue; }
412  fprintf(F, " %d %s %d;\n", NI.GetId(), IsDir?"->":"--", NI.GetOutNId(e));
413  }
414  }
415  }
416  if (! Desc.Empty()) {
417  fprintf(F, " label = \"\\n%s\\n\";", Desc.CStr());
418  fprintf(F, " fontsize=24;\n");
419  }
420  fprintf(F, "}\n");
421  fclose(F);
422 }
423 
424 template<class PGraph>
425 void SaveGViz(const PGraph& Graph, const TStr& OutFNm, const TStr& Desc, const TIntStrH& NIdLabelH) {
426  const bool IsDir = Graph->HasFlag(gfDirected);
427  FILE *F = fopen(OutFNm.CStr(), "wt");
428  if (! Desc.Empty()) fprintf(F, "/*****\n%s\n*****/\n\n", Desc.CStr());
429  if (IsDir) { fprintf(F, "digraph G {\n"); } else { fprintf(F, "graph G {\n"); }
430  fprintf(F, " graph [splines=true overlap=false]\n"); //size=\"12,10\" ratio=fill
431  fprintf(F, " node [shape=ellipse, width=0.3, height=0.3]\n");
432  // node colors
433  //for (int i = 0; i < NodeLabelH.Len(); i++) {
434  for (typename PGraph::TObj::TNodeI NI = Graph->BegNI(); NI < Graph->EndNI(); NI++) {
435  fprintf(F, " %d [label=\"%s\"];\n", NI.GetId(), NIdLabelH.GetDat(NI.GetId()).CStr());
436 }
437  // edges
438  for (typename PGraph::TObj::TNodeI NI = Graph->BegNI(); NI < Graph->EndNI(); NI++) {
439  if (NI.GetOutDeg()==0 && NI.GetInDeg()==0 && ! NIdLabelH.IsKey(NI.GetId())) {
440  fprintf(F, "%d;\n", NI.GetId()); }
441  else {
442  for (int e = 0; e < NI.GetOutDeg(); e++) {
443  if (! IsDir && NI.GetId() > NI.GetOutNId(e)) { continue; }
444  fprintf(F, " %d %s %d;\n", NI.GetId(), IsDir?"->":"--", NI.GetOutNId(e));
445  }
446  }
447  }
448  if (! Desc.Empty()) {
449  fprintf(F, " label = \"\\n%s\\n\";", Desc.CStr());
450  fprintf(F, " fontsize=24;\n");
451  }
452  fprintf(F, "}\n");
453  fclose(F);
454 }
455 
456 } // namespace TSnap
const TStr EDGES_START
Definition: gio.h:6
void SavePajek(const PGraph &Graph, const TStr &OutFNm)
Saves a graph in a Pajek .NET format.
Definition: gio.h:260
void SaveEdgeListNet(const PNEANet &Graph, const TStr &OutFNm, const TStr &Desc)
Saves a network into a text file. Each line encodes either an edge or a node, along with its attribut...
Definition: gio.cpp:269
void SaveGViz(const PGraph &Graph, const TStr &OutFNm, const TStr &Desc=TStr(), const bool &NodeLabels=false, const TIntStrH &NIdColorH=TIntStrH())
Save a graph in GraphVizp .DOT format.
Definition: gio.h:387
const TStr STR_TYPE_PREFIX
Definition: gio.h:14
PGraph LoadConnListStr(const TStr &InFNm, TStrHash< TInt > &StrToNIdH)
Loads a (directed, undirected or multi) graph from a text file InFNm with 1 node and all its edges in...
Definition: gio.h:193
void ToLc()
Transforms the current line to lower case.
Definition: ss.cpp:440
Definition: ss.h:72
const TStr NID_NAME
Definition: gio.h:11
PGraph LoadEdgeList(const TStr &InFNm, const int &SrcColId=0, const int &DstColId=1)
Loads a (directed, undirected or multi) graph from a text file InFNm with 1 edge per line (whitespace...
Definition: gio.h:84
TDat & AddDatId(const char *Key)
Definition: hash.h:858
bool GetInt(const int &FldN, int &Val) const
If the field FldN is an integer its value is returned in Val and the function returns true...
Definition: ss.cpp:447
THash< TInt, TStr > TIntStrH
Definition: hash.h:619
const TDat & GetDat(const TKey &Key) const
Definition: hash.h:262
PGraph LoadPajek(const TStr &InFNm)
Loads a (directed, undirected or multi) graph from Pajek .PAJ format file.
Definition: gio.h:210
PGraph LoadConnList(const TStr &InFNm)
Loads a (directed, undirected or multi) graph from a text file InFNm with 1 node and all its edges in...
Definition: gio.h:169
const TStr DST_ID_NAME
Definition: gio.h:10
TVec< PNGraph > LoadDyNetGraphV(const TStr &FNm)
For more info see ORA Network Analysis Data (http://www.casos.cs.cmu.edu/computational_tools/data2.php)
Definition: gio.cpp:322
have explicit edges (multigraph): TNEGraph, TNodeEdgeNet
Definition: gbase.h:14
const TStr FLT_TYPE_PREFIX
Definition: gio.h:13
bool Eof() const
Checks for end of file.
Definition: ss.h:122
#define HasGraphFlag(TGraph, Flag)
For quick testing of the properties of the graph/network object (see TGraphFlag). ...
Definition: gbase.h:41
PNEANet LoadEdgeListNet(const TStr &InFNm, const char &Separator)
Loads a network from the text file InFNm with 1 node/edge per line ('Separator' separated columns...
Definition: gio.cpp:138
const TStr NODES_START
Definition: gio.h:7
Whitespace (space or tab) separated.
Definition: ss.h:11
const TStr END_SENTINEL
Definition: gio.h:8
#define Mega(n)
Definition: gbase.h:4
PGraph LoadEdgeListStr(const TStr &InFNm, const int &SrcColId=0, const int &DstColId=1)
Loads a (directed, undirected or multi) graph from a text file InFNm with 1 edge per line (whitespace...
Definition: gio.h:126
int AddKey(const TKey &Key)
Definition: shash.h:1254
int Len() const
Returns the number of fields in the current line.
Definition: ss.h:114
void SaveEdgeList(const PGraph &Graph, const TStr &OutFNm, const TStr &Desc=TStr())
Saves a graph into a text file. Each line contains two columns and encodes a single edge:
Definition: gio.h:245
Space separated.
Definition: ss.h:10
int AddKey(const char *Key)
Definition: hash.h:968
Definition: hash.h:781
directed graph (TNGraph, TNEGraph), else graph is undirected TUNGraph
Definition: gbase.h:13
#define EAssert(Cond)
Definition: bd.h:280
#define CAssert(Cond)
Definition: bd.h:302
Definition: dt.h:412
bool Empty() const
Definition: dt.h:488
static TStr Fmt(const char *FmtStr,...)
Definition: dt.cpp:1599
Definition: hash.h:97
bool Next()
Loads next line from the input file.
Definition: ss.cpp:412
Definition: bd.h:196
const TStr NULL_VAL
Definition: gio.h:15
PNGraph LoadDyNet(const TStr &FNm)
For more info see ORA Network Analysis Data (http://www.casos.cs.cmu.edu/computational_tools/data2.php)
Definition: gio.cpp:296
const TStr INT_TYPE_PREFIX
Definition: gio.h:12
char * CStr()
Definition: dt.h:476
bool IsKey(const TKey &Key) const
Definition: hash.h:258
void SaveMatlabSparseMtx(const PGraph &Graph, const TStr &OutFNm)
Saves a graph in a MATLAB sparse matrix format.
Definition: gio.h:369
bool IsInt(const int &FldN) const
Checks whether fields FldN is an integer.
Definition: ss.h:143
const TStr SRC_ID_NAME
Definition: gio.h:9
TDat & AddDat(const TKey &Key)
Definition: hash.h:238
Vector is a sequence TVal objects representing an array that can change in size.
Definition: ds.h:430