File: vtkDIMACSGraphReader.h

package info (click to toggle)
vtk6 6.3.0%2Bdfsg1-5
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 118,532 kB
  • ctags: 138,251
  • sloc: cpp: 1,443,749; ansic: 113,395; python: 72,383; tcl: 46,998; xml: 8,127; yacc: 4,525; java: 4,239; perl: 3,108; lex: 1,694; sh: 1,093; asm: 471; makefile: 95; objc: 17
file content (124 lines) | stat: -rw-r--r-- 4,087 bytes parent folder | download | duplicates (7)
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/*=========================================================================

  Program:   Visualization Toolkit
  Module:    $RCSfile: vtkDIMACSGraphReader.h,v $

  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
  All rights reserved.
  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.

     This software is distributed WITHOUT ANY WARRANTY; without even
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
     PURPOSE.  See the above copyright notice for more information.

=========================================================================*/
/*----------------------------------------------------------------------------
 Copyright (c) Sandia Corporation
 See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
----------------------------------------------------------------------------*/

// .NAME vtkDIMACSGraphReader - reads vtkGraph data from a DIMACS
// formatted file

// .SECTION Description
// vtkDIMACSGraphReader is a source object that reads vtkGraph data files
// from a DIMACS format.
//
// The reader has special handlers for max-flow and graph coloring problems,
// which are specified in the problem line as 'max' and 'edge' respectively.
// Other graphs are treated as generic DIMACS files.
//
// DIMACS formatted files consist of lines in which the first character in
// in column 0 specifies the type of the line.
//
// Generic DIMACS files have the following line types:
// - problem statement line : p graph num_verts num_edges
// - node line (optional)   : n node_id node_weight
// - edge line              : a src_id trg_id edge_weight
// - alternate edge format  : e src_id trg_id edge_weight
// - comment lines          : c I am a comment line
// ** note, there should be one and only one problem statement line per file.
//
//
// DIMACS graphs are undirected and nodes are numbered 1..n
//
// See webpage for additional formatting details.
// -  http://dimacs.rutgers.edu/Challenges/
// -  http://www.dis.uniroma1.it/~challenge9/format.shtml

// .SECTION See Also
// vtkDIMACSGraphWriter
//

#ifndef _vtkDIMACSGraphReader_h
#define _vtkDIMACSGraphReader_h

#include "vtkIOInfovisModule.h" // For export macro
#include "vtkGraphAlgorithm.h"
#include "vtkStdString.h" // For string API

class VTKIOINFOVIS_EXPORT vtkDIMACSGraphReader : public vtkGraphAlgorithm
{

public:

  static vtkDIMACSGraphReader *New();
  vtkTypeMacro(vtkDIMACSGraphReader, vtkGraphAlgorithm);
  void PrintSelf(ostream& os, vtkIndent indent);

  // Description:
  // The DIMACS file name.
  vtkGetStringMacro(FileName);
  vtkSetStringMacro(FileName);

  // Description:
  // Vertex attribute array name
  vtkGetStringMacro(VertexAttributeArrayName);
  vtkSetStringMacro(VertexAttributeArrayName);

  // Description:
  // Edge attribute array name
  vtkGetStringMacro(EdgeAttributeArrayName);
  vtkSetStringMacro(EdgeAttributeArrayName);

protected:

  vtkDIMACSGraphReader();
  ~vtkDIMACSGraphReader();

  virtual int RequestData(vtkInformation *,
                          vtkInformationVector **,
                          vtkInformationVector *);

  int buildGenericGraph(vtkGraph     * output,
                        vtkStdString & defaultVertexAttrArrayName,
                        vtkStdString & defaultEdgeAttrArrayName);

  int buildColoringGraph(vtkGraph * output);
  int buildMaxflowGraph(vtkGraph * output);

  // Description:
  // Creates directed or undirected output based on Directed flag.
  virtual int RequestDataObject(vtkInformation*,
                                vtkInformationVector** inputVector,
                                vtkInformationVector* outputVector);

  int ReadGraphMetaData();

private:

  bool   fileOk;
  bool   Directed;
  char * FileName;
  char * VertexAttributeArrayName;
  char * EdgeAttributeArrayName;

  int numVerts;
  int numEdges;
  vtkStdString dimacsProblemStr;

  vtkDIMACSGraphReader(const vtkDIMACSGraphReader&);  // Not implemented.
  void operator=(const vtkDIMACSGraphReader&);  // Not implemented.
};

#endif // _vtkDIMACSGraphReader_h