VTK  9.2.6
vtkExecutive.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkExecutive.h
5
6 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7 All rights reserved.
8 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9
10 This software is distributed WITHOUT ANY WARRANTY; without even
11 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 PURPOSE. See the above copyright notice for more information.
13
14=========================================================================*/
26
27#ifndef vtkExecutive_h
28#define vtkExecutive_h
29
30#include "vtkCommonExecutionModelModule.h" // For export macro
31#include "vtkObject.h"
32
33class vtkAlgorithm;
35class vtkAlgorithmToExecutiveFriendship;
36class vtkDataObject;
37class vtkExecutiveInternals;
38class vtkInformation;
45
46class VTKCOMMONEXECUTIONMODEL_EXPORT vtkExecutive : public vtkObject
47{
48public:
49 vtkTypeMacro(vtkExecutive, vtkObject);
50 void PrintSelf(ostream& os, vtkIndent indent) override;
51
56
62 vtkInformation* request, vtkInformationVector** inInfo, vtkInformationVector* outInfo);
63
76 virtual int ComputePipelineMTime(vtkInformation* request, vtkInformationVector** inInfoVec,
77 vtkInformationVector* outInfoVec, int requestFromOutputPort, vtkMTimeType* mtime);
78
82 virtual int UpdateInformation() { return 1; }
83
85
90 virtual vtkTypeBool Update(int port);
92
94
101
106
111
116
120 vtkInformation* GetInputInformation(int port, int connection);
121
126
131
135 vtkExecutive* GetInputExecutive(int port, int connection);
136
138
141 virtual vtkDataObject* GetOutputData(int port);
142 virtual void SetOutputData(int port, vtkDataObject*, vtkInformation* info);
143 virtual void SetOutputData(int port, vtkDataObject*);
145
147
150 virtual vtkDataObject* GetInputData(int port, int connection);
151 virtual vtkDataObject* GetInputData(int port, int connection, vtkInformationVector** inInfoVec);
153
160
162
173
175
178 bool UsesGarbageCollector() const override { return true; }
180
186
192
198
200
210
211 enum
212 {
215 };
216 enum
217 {
220 };
221
226 virtual int CallAlgorithm(vtkInformation* request, int direction, vtkInformationVector** inInfo,
227 vtkInformationVector* outInfo);
228
229protected:
231 ~vtkExecutive() override;
232
233 // Helper methods for subclasses.
234 int InputPortIndexInRange(int port, const char* action);
235 int OutputPortIndexInRange(int port, const char* action);
236
237 // Called by methods to check for a recursive pipeline update. A
238 // request should be fulfilled without making another request. This
239 // is used to help enforce that behavior. Returns 1 if no recursive
240 // request is occurring, and 0 otherwise. An error message is
241 // produced automatically if 0 is returned. The first argument is
242 // the name of the calling method (the one that should not be
243 // invoked recursively during an update). The second argument is
244 // the recursive request information object, if any. It is used to
245 // construct the error message.
246 int CheckAlgorithm(const char* method, vtkInformation* request);
247
248 virtual int ForwardDownstream(vtkInformation* request);
249 virtual int ForwardUpstream(vtkInformation* request);
250 virtual void CopyDefaultInformation(vtkInformation* request, int direction,
251 vtkInformationVector** inInfo, vtkInformationVector* outInfo);
252
253 // Reset the pipeline update values in the given output information object.
254 virtual void ResetPipelineInformation(int port, vtkInformation*) = 0;
255
256 // Bring the existence of output data objects up to date.
257 virtual int UpdateDataObject() = 0;
258
259 // Garbage collection support.
261
262 virtual void SetAlgorithm(vtkAlgorithm* algorithm);
263
264 // The algorithm managed by this executive.
266
267 // Flag set when the algorithm is processing a request.
269
270 // Pointers to an outside instance of input or output information.
271 // No references are held. These are used to implement internal
272 // pipelines.
275
276private:
277 // Store an information object for each output port of the algorithm.
278 vtkInformationVector* OutputInformation;
279
280 // Internal implementation details.
281 vtkExecutiveInternals* ExecutiveInternal;
282
284
285private:
286 vtkExecutive(const vtkExecutive&) = delete;
287 void operator=(const vtkExecutive&) = delete;
288};
289
290#endif
Proxy object to connect input/output ports.
Superclass for all sources, filters, and sinks in VTK.
general representation of visualization data
int CheckAlgorithm(const char *method, vtkInformation *request)
virtual int ForwardDownstream(vtkInformation *request)
virtual vtkTypeBool Update()
Bring the algorithm's outputs up-to-date.
virtual vtkTypeBool Update(int port)
Bring the algorithm's outputs up-to-date.
virtual int ForwardUpstream(vtkInformation *request)
vtkInformationVector * GetOutputInformation()
Get the pipeline information object for all output ports.
void ReportReferences(vtkGarbageCollector *) override
static vtkInformationKeyVectorKey * KEYS_TO_COPY()
Keys to program vtkExecutive::ProcessRequest with the default behavior for unknown requests.
~vtkExecutive() override
virtual int UpdateDataObject()=0
vtkInformationVector ** SharedInputInformation
vtkExecutive * GetInputExecutive(int port, int connection)
Get the executive managing the given input connection.
vtkAlgorithm * Algorithm
virtual vtkTypeBool ProcessRequest(vtkInformation *request, vtkInformationVector **inInfo, vtkInformationVector *outInfo)
Generalized interface for asking the executive to fulfill pipeline requests.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
static vtkInformationIntegerKey * ALGORITHM_BEFORE_FORWARD()
Keys to program vtkExecutive::ProcessRequest with the default behavior for unknown requests.
virtual vtkDataObject * GetInputData(int port, int connection, vtkInformationVector **inInfoVec)
Get the data object for an input port of the algorithm.
static vtkInformationIntegerKey * FROM_OUTPUT_PORT()
Information key to store the output port number from which a request is made.
void SetSharedOutputInformation(vtkInformationVector *outInfoVec)
Get the output port that produces the given data object.
virtual void SetAlgorithm(vtkAlgorithm *algorithm)
bool UsesGarbageCollector() const override
Participate in garbage collection.
vtkInformation * GetInputInformation(int port, int connection)
Get the pipeline information for the given input connection.
static vtkInformationIntegerKey * ALGORITHM_AFTER_FORWARD()
Keys to program vtkExecutive::ProcessRequest with the default behavior for unknown requests.
virtual int ComputePipelineMTime(vtkInformation *request, vtkInformationVector **inInfoVec, vtkInformationVector *outInfoVec, int requestFromOutputPort, vtkMTimeType *mtime)
A special version of ProcessRequest meant specifically for the pipeline modified time request.
static vtkInformationIntegerKey * FORWARD_DIRECTION()
Keys to program vtkExecutive::ProcessRequest with the default behavior for unknown requests.
virtual void ResetPipelineInformation(int port, vtkInformation *)=0
vtkInformationVector * GetInputInformation(int port)
Get the pipeline information vectors for the given input port.
virtual vtkInformation * GetOutputInformation(int port)
Get the pipeline information object for the given output port.
friend class vtkAlgorithmToExecutiveFriendship
virtual vtkDataObject * GetInputData(int port, int connection)
Get the data object for an input port of the algorithm.
virtual void SetOutputData(int port, vtkDataObject *, vtkInformation *info)
Get/Set the data object for an output port of the algorithm.
int GetNumberOfInputPorts()
Get the number of input/output ports for the algorithm associated with this executive.
static vtkInformationExecutivePortKey * PRODUCER()
Information key to store the executive/port number producing an information object.
virtual vtkDataObject * GetOutputData(int port)
Get/Set the data object for an output port of the algorithm.
vtkAlgorithm * GetAlgorithm()
Get the algorithm to which this executive has been assigned.
void SetSharedInputInformation(vtkInformationVector **inInfoVec)
Get the output port that produces the given data object.
int OutputPortIndexInRange(int port, const char *action)
virtual void SetOutputData(int port, vtkDataObject *)
Get/Set the data object for an output port of the algorithm.
static vtkInformationExecutivePortVectorKey * CONSUMERS()
Information key to store the executive/port number pairs consuming an information object.
virtual int UpdateInformation()
Bring the output information up to date.
vtkInformationVector * SharedOutputInformation
virtual int CallAlgorithm(vtkInformation *request, int direction, vtkInformationVector **inInfo, vtkInformationVector *outInfo)
An API to CallAlgorithm that allows you to pass in the info objects to be used.
vtkInformationVector ** GetInputInformation()
Get the pipeline information vectors for all inputs.
virtual void CopyDefaultInformation(vtkInformation *request, int direction, vtkInformationVector **inInfo, vtkInformationVector *outInfo)
int GetNumberOfOutputPorts()
Get the number of input/output ports for the algorithm associated with this executive.
int InputPortIndexInRange(int port, const char *action)
static vtkInformationIntegerKey * ALGORITHM_DIRECTION()
Keys to program vtkExecutive::ProcessRequest with the default behavior for unknown requests.
int GetNumberOfInputConnections(int port)
Get the number of input connections on the given port.
a simple class to control print indentation
Definition vtkIndent.h:34
Key for vtkExecutive/Port value pairs.
Key for vtkExecutive/Port value pair vectors.
Key for integer values in vtkInformation.
Key for vector-of-keys values.
Key for pointer to pointer.
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
friend class vtkGarbageCollector
Some classes need to clear the reference counts manually due to the way they work.
int vtkTypeBool
Definition vtkABI.h:69
vtkTypeUInt32 vtkMTimeType
Definition vtkType.h:287