File: vtkCompositeArray.txx

package info (click to toggle)
vtk9 9.5.2%2Bdfsg3-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 205,984 kB
  • sloc: cpp: 2,336,570; ansic: 327,116; python: 111,200; yacc: 4,104; java: 3,977; sh: 3,032; xml: 2,771; perl: 2,189; lex: 1,787; makefile: 181; javascript: 165; objc: 153; tcl: 59
file content (44 lines) | stat: -rw-r--r-- 1,133 bytes parent folder | download | duplicates (2)
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
#include "vtkCompositeArray.h"

#include "vtkDataArray.h"

//-----------------------------------------------------------------------
namespace vtk
{
VTK_ABI_NAMESPACE_BEGIN
template <typename T>
vtkSmartPointer<vtkCompositeArray<T>> ConcatenateDataArrays(
  const std::vector<vtkDataArray*>& arrays)
{
  if (arrays.empty())
  {
    return nullptr;
  }
  vtkIdType nComps = -1;
  for (auto arr : arrays)
  {
    if (arr == nullptr)
    {
      continue;
    }
    if (nComps == -1)
    {
      nComps = arr->GetNumberOfComponents();
    }
    else if (arr->GetNumberOfComponents() != nComps)
    {
      vtkErrorWithObjectMacro(nullptr, "Number of components of all the arrays are not equal");
      return nullptr;
    }
  }
  vtkNew<vtkCompositeArray<T>> composite;
  composite->SetBackend(std::make_shared<vtkCompositeImplicitBackend<T>>(arrays));
  composite->SetNumberOfComponents(nComps);
  int nTuples = 0;
  std::for_each(arrays.begin(), arrays.end(),
    [&nTuples](vtkDataArray* arr) { nTuples += arr ? arr->GetNumberOfTuples() : 0; });
  composite->SetNumberOfTuples(nTuples);
  return composite;
}
VTK_ABI_NAMESPACE_END
}