File: vtkDIMACSGraphReader.h

package info (click to toggle)
paraview 5.13.2%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 544,220 kB
  • sloc: cpp: 3,374,605; ansic: 1,332,409; python: 150,381; xml: 122,166; sql: 65,887; sh: 7,317; javascript: 5,262; yacc: 4,417; java: 3,977; perl: 2,363; lex: 1,929; f90: 1,397; makefile: 170; objc: 153; tcl: 59; pascal: 50; fortran: 29
file content (117 lines) | stat: -rw-r--r-- 3,279 bytes parent folder | download | duplicates (3)
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
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-FileCopyrightText: Copyright (c) Sandia Corporation
// SPDX-License-Identifier: BSD-3-Clause

/**
 * @class   vtkDIMACSGraphReader
 * @brief   reads vtkGraph data from a DIMACS
 * formatted file
 *
 *
 * 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
 *
 * @sa
 * vtkDIMACSGraphWriter
 *
 */

#ifndef vtkDIMACSGraphReader_h
#define vtkDIMACSGraphReader_h

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

VTK_ABI_NAMESPACE_BEGIN
class VTKIOINFOVIS_EXPORT vtkDIMACSGraphReader : public vtkGraphAlgorithm
{

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

  ///@{
  /**
   * The DIMACS file name.
   */
  vtkGetFilePathMacro(FileName);
  vtkSetFilePathMacro(FileName);
  ///@}

  ///@{
  /**
   * Vertex attribute array name
   */
  vtkGetStringMacro(VertexAttributeArrayName);
  vtkSetStringMacro(VertexAttributeArrayName);
  ///@}

  ///@{
  /**
   * Edge attribute array name
   */
  vtkGetStringMacro(EdgeAttributeArrayName);
  vtkSetStringMacro(EdgeAttributeArrayName);
  ///@}

protected:
  vtkDIMACSGraphReader();
  ~vtkDIMACSGraphReader() override;

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

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

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

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

  int ReadGraphMetaData();

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

  int numVerts;
  int numEdges;
  std::string dimacsProblemStr;

  vtkDIMACSGraphReader(const vtkDIMACSGraphReader&) = delete;
  void operator=(const vtkDIMACSGraphReader&) = delete;
};

VTK_ABI_NAMESPACE_END
#endif // vtkDIMACSGraphReader_h