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
|
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause
#include "vtkCellMetadata.h"
#include "vtkCellGrid.h"
#include "vtkDebugLeaks.h"
VTK_ABI_NAMESPACE_BEGIN
using namespace vtk::literals;
vtkCellMetadata::~vtkCellMetadata()
{
this->CellGrid = nullptr; // We don't own a reference to the cell grid... it owns us.
}
vtkSmartPointer<vtkCellMetadata> vtkCellMetadata::NewInstance(
vtkStringToken className, vtkCellGrid* grid)
{
vtkSmartPointer<vtkCellMetadata> result;
auto& ctors = vtkCellMetadata::Constructors();
auto it = ctors.find(className);
if (it != ctors.end())
{
result = it->second(grid);
if (result && grid)
{
result = grid->AddCellMetadata(result);
}
}
return result;
}
std::unordered_set<vtkStringToken> vtkCellMetadata::CellTypes()
{
std::unordered_set<vtkStringToken> cellTypes;
for (const auto& ctor : vtkCellMetadata::Constructors())
{
cellTypes.insert(ctor.first);
}
return cellTypes;
}
void vtkCellMetadata::PrintSelf(ostream& os, vtkIndent indent)
{
this->Superclass::PrintSelf(os, indent);
os << indent << "CellGrid: " << this->CellGrid << "\n";
}
bool vtkCellMetadata::SetCellGrid(vtkCellGrid* parent)
{
if (this->CellGrid != parent)
{
this->CellGrid = parent;
return true;
}
return false;
}
bool vtkCellMetadata::Query(vtkCellGridQuery* query)
{
bool ok = vtkCellMetadata::GetResponders()->Query(this, query);
return ok;
}
vtkCellGridResponders* vtkCellMetadata::GetResponders()
{
auto& responders = token_NAMESPACE::singletons().get<vtkSmartPointer<vtkCellGridResponders>>();
if (!responders)
{
responders = vtkSmartPointer<vtkCellGridResponders>::New();
vtkDebugLeaks::AddFinalizer([]() { vtkCellMetadata::ClearResponders(); });
}
return responders;
}
void vtkCellMetadata::ClearResponders()
{
// No matter whether we have assigned a value or not, just replace it
// with a null pointer. This will cause any assigned object to be destroyed.
token_NAMESPACE::singletons().erase<vtkSmartPointer<vtkCellGridResponders>>();
}
vtkCellGridResponders* vtkCellMetadata::GetCaches()
{
(void)this; // Keep clang-tidy from complaining that this method should be static.
return vtkCellMetadata::GetResponders();
}
vtkCellMetadata::ConstructorMap& vtkCellMetadata::Constructors()
{
return token_NAMESPACE::singletons().get<ConstructorMap>();
}
VTK_ABI_NAMESPACE_END
|