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
|
// SPDX-FileCopyrightText: Copyright (c) Kitware Inc.
// SPDX-License-Identifier: BSD-3-Clause
/**
* @class vtkMultiProcessControllerHelper
* @brief collection of assorted helper
* routines dealing with communication.
*
* vtkMultiProcessControllerHelper is collection of assorted helper
* routines dealing with communication.
*/
#ifndef vtkMultiProcessControllerHelper_h
#define vtkMultiProcessControllerHelper_h
#include "vtkFiltersParallelModule.h" // For export macro
#include "vtkObject.h"
#include "vtkSmartPointer.h" // needed for vtkSmartPointer.
#include <vector> // needed for std::vector
VTK_ABI_NAMESPACE_BEGIN
class vtkDataObject;
class vtkMultiProcessController;
class vtkMultiProcessStream;
class VTKFILTERSPARALLEL_EXPORT vtkMultiProcessControllerHelper : public vtkObject
{
public:
static vtkMultiProcessControllerHelper* New();
vtkTypeMacro(vtkMultiProcessControllerHelper, vtkObject);
void PrintSelf(ostream& os, vtkIndent indent) override;
/**
* Reduce the stream to all processes calling the (*operation) for reduction.
* The operation is assumed to be commutative.
*/
static int ReduceToAll(vtkMultiProcessController* controller, vtkMultiProcessStream& data,
void (*operation)(vtkMultiProcessStream& A, vtkMultiProcessStream& B), int tag);
/**
* Utility method to merge pieces received from several processes. It does not
* handle all data types, and hence not meant for non-paraview specific use.
* Returns a new instance of data object containing the merged result on
* success, else returns nullptr. The caller is expected to release the memory
* from the returned data-object.
*/
static vtkDataObject* MergePieces(vtkDataObject** pieces, unsigned int num_pieces);
/**
* Overload where the merged pieces are combined into result.
*/
static bool MergePieces(
std::vector<vtkSmartPointer<vtkDataObject>>& pieces, vtkDataObject* result);
protected:
vtkMultiProcessControllerHelper();
~vtkMultiProcessControllerHelper() override;
private:
vtkMultiProcessControllerHelper(const vtkMultiProcessControllerHelper&) = delete;
void operator=(const vtkMultiProcessControllerHelper&) = delete;
};
VTK_ABI_NAMESPACE_END
#endif
|