File: vtkClientServerMoveData.h

package info (click to toggle)
paraview 5.4.1%2Bdfsg4-3.1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 218,616 kB
  • sloc: cpp: 2,331,508; ansic: 322,365; python: 111,051; xml: 79,203; tcl: 47,013; yacc: 4,877; java: 4,438; perl: 3,238; sh: 2,920; lex: 1,908; f90: 748; makefile: 273; pascal: 228; objc: 83; fortran: 31
file content (136 lines) | stat: -rw-r--r-- 4,743 bytes parent folder | download
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
125
126
127
128
129
130
131
132
133
134
135
136
/*=========================================================================

  Program:   Visualization Toolkit
  Module:    vtkClientServerMoveData.h

  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.

=========================================================================*/
/**
 * @class   vtkClientServerMoveData
 * @brief   Moves data from the server root node
 * to the client.
 *
 * This class moves all the input data available at the input on the root
 * server node to the client node. If not in server-client mode,
 * this filter behaves as a simple pass-through filter.
 * This can work with any data type, the application does not need to set
 * the output type before hand.
 * @warning
 * This filter may change the output in RequestData().
*/

#ifndef vtkClientServerMoveData_h
#define vtkClientServerMoveData_h

#include "vtkDataObjectAlgorithm.h"
#include "vtkPVClientServerCoreRenderingModule.h" //needed for exports

class vtkMultiProcessController;
class vtkMultiProcessController;

class VTKPVCLIENTSERVERCORERENDERING_EXPORT vtkClientServerMoveData : public vtkDataObjectAlgorithm
{
public:
  static vtkClientServerMoveData* New();
  vtkTypeMacro(vtkClientServerMoveData, vtkDataObjectAlgorithm);
  void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;

  //@{
  /**
   * Controls the output type. This is required because processes receiving
   * data cannot know their output type in RequestDataObject without
   * communicating with other processes. Since communicating with other
   * processes in RequestDataObject is dangerous (can cause deadlock because
   * it may happen out-of-sync), the application has to set the output
   * type. The default is VTK_POLY_DATA. Make sure to call this before any
   * pipeline updates occur.
   */
  vtkSetMacro(OutputDataType, int);
  vtkGetMacro(OutputDataType, int);
  //@}

  //@{
  /**
   * Controls the output WHOLE_EXTENT.  This is required because processes
   * receiving data cannot know their WHOLE_EXTENT in RequestInformation
   * without communicating with other processes. Since communicating with
   * other processes in RequestInformation is dangerous (can cause deadlock
   * because it may happen out-of-sync), the application has to set the
   * output type. Make sure to call this before any pipeline updates occur.
   */
  vtkSetVector6Macro(WholeExtent, int);
  vtkGetVector6Macro(WholeExtent, int);
  //@}

  //@{
  /**
   * Optionally, set the process type. If set to AUTO, then the process type is
   * tried to be determined using the active connection.
   */
  vtkSetMacro(ProcessType, int);
  vtkGetMacro(ProcessType, int);
  //@}

  //@{
  /**
   * Get/Set the controller to use. This is optional and needed only when
   * ProcessType is set to something other than AUTO. If AUTO, then the
   * controller is obtained from the active session.
   */
  void SetController(vtkMultiProcessController*);
  vtkGetObjectMacro(Controller, vtkMultiProcessController);
  //@}

  enum ProcessTypes
  {
    AUTO = 0,
    SERVER = 1,
    CLIENT = 2
  };

protected:
  vtkClientServerMoveData();
  ~vtkClientServerMoveData();

  // Overridden to mark input as optional, since input data may
  // not be available on all processes that this filter is instantiated.
  virtual int FillInputPortInformation(int port, vtkInformation* info) VTK_OVERRIDE;

  virtual int RequestData(vtkInformation* request, vtkInformationVector** inputVector,
    vtkInformationVector* outputVector) VTK_OVERRIDE;

  // Create an output of the type defined by OutputDataType
  virtual int RequestDataObject(vtkInformation* request, vtkInformationVector** inputVector,
    vtkInformationVector* outputVector) VTK_OVERRIDE;

  // If there is an input call superclass' RequestInformation
  // otherwise set the output WHOLE_EXTENT() to be WholeExtent
  virtual int RequestInformation(vtkInformation* request, vtkInformationVector** inputVector,
    vtkInformationVector* outputVector) VTK_OVERRIDE;

  virtual int SendData(vtkDataObject*, vtkMultiProcessController*);
  virtual vtkDataObject* ReceiveData(vtkMultiProcessController*);

  enum Tags
  {
    TRANSMIT_DATA_OBJECT = 23483
  };

  int OutputDataType;
  int WholeExtent[6];
  int ProcessType;
  vtkMultiProcessController* Controller;

private:
  vtkClientServerMoveData(const vtkClientServerMoveData&) VTK_DELETE_FUNCTION;
  void operator=(const vtkClientServerMoveData&) VTK_DELETE_FUNCTION;
};

#endif