250 #ifndef vtkCellArray_h
251 #define vtkCellArray_h
253 #include "vtkCommonDataModelModule.h"
259 #include "vtkFeatures.h"
261 #include "vtkTypeInt32Array.h"
262 #include "vtkTypeInt64Array.h"
266 #include <initializer_list>
267 #include <type_traits>
290 #define VTK_CELL_ARRAY_V2
292 VTK_ABI_NAMESPACE_BEGIN
345 return this->AllocateExact(sz, sz) ? 1 : 0;
359 return this->AllocateExact(numCells, numCells * maxCellSize);
513 void SetData(vtkTypeInt32Array* offsets, vtkTypeInt32Array* connectivity);
514 void SetData(vtkTypeInt64Array* offsets, vtkTypeInt64Array* connectivity);
627 return this->GetOffsetsArray64();
631 return this->GetOffsetsArray32();
648 return this->GetConnectivityArray64();
652 return this->GetConnectivityArray32();
678 void InitTraversal();
740 VTK_EXPECTS(0 <= cellId && cellId < GetNumberOfCells());
773 return this->InsertNextCell(
static_cast<vtkIdType>(cell.size()), cell.begin());
794 void UpdateCellCount(
int npts);
843 return this->ReplaceCellAtId(cellId,
static_cast<vtkIdType>(cell.size()), cell.begin());
918 unsigned long GetActualMemorySize() const;
926 template <
typename ArrayT>
931 using CellRangeType = decltype(vtk::DataArrayValueRange<1>(std::declval<ArrayType>()));
964 this->Offsets->InsertNextValue(0);
967 this->IsInMemkind =
true;
971 void*
operator new(
size_t nSize)
974 #ifdef VTK_USE_MEMKIND
981 void operator delete(
void* p)
983 #ifdef VTK_USE_MEMKIND
1004 bool IsInMemkind =
false;
1008 template <
typename Functor,
typename... Args>
1009 using GetReturnType = decltype(
1012 template <
typename Functor,
typename... Args>
1013 struct ReturnsVoid : std::is_same<GetReturnType<Functor, Args...>, void>
1087 template <
typename Functor,
typename... Args,
1088 typename =
typename std::enable_if<ReturnsVoid<Functor, Args...>
::value>
::type>
1089 void Visit(Functor&& functor, Args&&... args)
1107 template <
typename Functor,
typename... Args,
1108 typename =
typename std::enable_if<ReturnsVoid<Functor, Args...>
::value>
::type>
1109 void Visit(Functor&& functor, Args&&... args)
const
1127 template <
typename Functor,
typename... Args,
1128 typename =
typename std::enable_if<!ReturnsVoid<Functor, Args...>
::value>
::type>
1129 GetReturnType<Functor, Args...>
Visit(Functor&& functor, Args&&... args)
1146 template <
typename Functor,
typename... Args,
1147 typename =
typename std::enable_if<!ReturnsVoid<Functor, Args...>
::value>
::type>
1148 GetReturnType<Functor, Args...>
Visit(Functor&& functor, Args&&... args)
const
1231 VTK_EXPECTS(0 <= loc && loc < GetNumberOfConnectivityEntries());
1326 #ifdef VTK_USE_MEMKIND
1334 #ifdef VTK_USE_64BIT_IDS
1337 this->StorageIs64Bit =
true;
1342 this->StorageIs64Bit =
false;
1345 #ifdef VTK_USE_MEMKIND
1348 this->IsInMemkind =
true;
1351 (void)this->IsInMemkind;
1357 if (this->StorageIs64Bit)
1359 this->Arrays->Int64->~VisitState();
1360 delete this->Arrays->Int64;
1364 this->Arrays->Int32->~VisitState();
1365 delete this->Arrays->Int32;
1367 #ifdef VTK_USE_MEMKIND
1368 if (this->IsInMemkind)
1377 delete this->Arrays;
1385 if (!this->StorageIs64Bit)
1390 this->Arrays->Int64->~VisitState();
1391 delete this->Arrays->Int64;
1393 this->StorageIs64Bit =
false;
1402 if (this->StorageIs64Bit)
1407 this->Arrays->Int32->~VisitState();
1408 delete this->Arrays->Int32;
1410 this->StorageIs64Bit =
true;
1416 bool Is64Bit()
const {
return this->StorageIs64Bit; }
1421 assert(!this->StorageIs64Bit);
1422 return *this->Arrays->Int32;
1427 assert(!this->StorageIs64Bit);
1428 return *this->Arrays->Int32;
1434 assert(this->StorageIs64Bit);
1435 return *this->Arrays->Int64;
1440 assert(this->StorageIs64Bit);
1441 return *this->Arrays->Int64;
1447 ArraySwitch* Arrays;
1448 bool StorageIs64Bit;
1449 bool IsInMemkind =
false;
1463 template <
typename ArrayT>
1466 return this->Offsets->GetNumberOfValues() - 1;
1469 template <
typename ArrayT>
1472 return static_cast<vtkIdType>(this->Offsets->GetValue(cellId));
1475 template <
typename ArrayT>
1478 return static_cast<vtkIdType>(this->Offsets->GetValue(cellId + 1));
1481 template <
typename ArrayT>
1484 return this->GetEndOffset(cellId) - this->GetBeginOffset(cellId);
1487 template <
typename ArrayT>
1491 return vtk::DataArrayValueRange<1>(
1492 this->
GetConnectivity(), this->GetBeginOffset(cellId), this->GetEndOffset(cellId));
1494 VTK_ABI_NAMESPACE_END
1498 VTK_ABI_NAMESPACE_BEGIN
1503 template <
typename CellStateT>
1506 using ValueType =
typename CellStateT::ValueType;
1507 auto* conn = state.GetConnectivity();
1508 auto* offsets = state.GetOffsets();
1510 const vtkIdType cellId = offsets->GetNumberOfValues() - 1;
1512 offsets->InsertNextValue(
static_cast<ValueType
>(conn->GetNumberOfValues() + npts));
1516 conn->InsertNextValue(
static_cast<ValueType
>(pts[i]));
1523 template <
typename CellStateT>
1526 using ValueType =
typename CellStateT::ValueType;
1527 auto* conn = state.GetConnectivity();
1528 auto* offsets = state.GetOffsets();
1530 const vtkIdType cellId = offsets->GetNumberOfValues() - 1;
1532 offsets->InsertNextValue(
static_cast<ValueType
>(conn->GetNumberOfValues() + npts));
1541 template <
typename CellStateT>
1544 using ValueType =
typename CellStateT::ValueType;
1546 auto* offsets = state.GetOffsets();
1547 const ValueType cellBegin = offsets->GetValue(offsets->GetMaxId() - 1);
1548 offsets->SetValue(offsets->GetMaxId(),
static_cast<ValueType
>(cellBegin + npts));
1554 template <
typename CellStateT>
1557 return state.GetCellSize(cellId);
1563 template <
typename CellStateT>
1566 using ValueType =
typename CellStateT::ValueType;
1568 const vtkIdType beginOffset = state.GetBeginOffset(cellId);
1569 const vtkIdType endOffset = state.GetEndOffset(cellId);
1570 const vtkIdType cellSize = endOffset - beginOffset;
1571 const auto cellConnectivity = state.GetConnectivity()->GetPointer(beginOffset);
1576 for (ValueType i = 0; i < cellSize; ++i)
1578 idPtr[i] =
static_cast<vtkIdType>(cellConnectivity[i]);
1584 template <
typename CellStateT>
1588 using ValueType =
typename CellStateT::ValueType;
1589 using ArrayType =
typename CellStateT::ArrayType;
1591 static constexpr
bool ValueTypeCompat = CellStateT::ValueTypeIsSameAsIdType;
1595 static constexpr
bool value = ValueTypeCompat && ArrayTypeCompat;
1598 template <
typename CellStateT>
1603 const vtkIdType beginOffset = state.GetBeginOffset(cellId);
1604 const vtkIdType endOffset = state.GetEndOffset(cellId);
1605 cellSize = endOffset - beginOffset;
1607 cellPoints =
reinterpret_cast<vtkIdType*
>(state.GetConnectivity()->GetPointer(beginOffset));
1610 template <
typename CellStateT>
1615 using ValueType =
typename CellStateT::ValueType;
1617 const vtkIdType beginOffset = state.GetBeginOffset(cellId);
1618 const vtkIdType endOffset = state.GetEndOffset(cellId);
1619 cellSize = endOffset - beginOffset;
1620 const ValueType* cellConnectivity = state.GetConnectivity()->GetPointer(beginOffset);
1625 for (
vtkIdType i = 0; i < cellSize; ++i)
1627 tempPtr[i] =
static_cast<vtkIdType>(cellConnectivity[i]);
1636 template <
typename CellStateT>
1639 state.GetOffsets()->Reset();
1640 state.GetConnectivity()->Reset();
1641 state.GetOffsets()->InsertNextValue(0);
1645 VTK_ABI_NAMESPACE_END
1648 VTK_ABI_NAMESPACE_BEGIN
1658 if (this->TraversalCellId < this->GetNumberOfCells())
1660 this->GetCellAtId(this->TraversalCellId, npts, pts);
1661 ++this->TraversalCellId;
1727 using ValueType =
typename ArrayType64::ValueType;
1732 using ValueType =
typename ArrayType32::ValueType;
1764 VTK_ABI_NAMESPACE_END
Encapsulate traversal logic for vtkCellArray.
object to represent cell connectivity
void SetData(vtkAOSDataArrayTemplate< int > *offsets, vtkAOSDataArrayTemplate< int > *connectivity)
Set the internal data arrays to the supplied offsets and connectivity arrays.
int GetNextCell(vtkIdType &npts, vtkIdType const *&pts)
vtkIdType GetNumberOfConnectivityEntries()
Return the size of the array that would be returned from ExportLegacyFormat().
void SetData(vtkTypeInt32Array *offsets, vtkTypeInt32Array *connectivity)
Set the internal data arrays to the supplied offsets and connectivity arrays.
vtkTypeBool Allocate(vtkIdType sz, vtkIdType vtkNotUsed(ext)=1000)
Allocate memory.
void UseDefaultStorage()
Initialize internal data structures to use 32- or 64-bit storage.
vtkIdType GetOffset(vtkIdType cellId)
Get the offset (into the connectivity) for a specified cell id.
vtkIdType GetCellSize(vtkIdType cellId) const
Return the size of the cell at cellId.
bool AllocateCopy(vtkCellArray *other)
Pre-allocate memory in internal data structures to match the used size of the input vtkCellArray.
void AppendLegacyFormat(vtkIdTypeArray *data, vtkIdType ptOffset=0)
Append an array of data with the legacy vtkCellArray layout, e.g.
bool IsStorageShareable() const
ArrayType32 * GetOffsetsArray32()
Return the array used to store cell offsets.
bool IsValid()
Check that internal storage is consistent and in a valid state.
void AppendLegacyFormat(const vtkIdType *data, vtkIdType len, vtkIdType ptOffset=0)
Append an array of data with the legacy vtkCellArray layout, e.g.
bool SetData(vtkIdType cellSize, vtkDataArray *connectivity)
Sets the internal arrays to the supported connectivity array with an offsets array automatically gene...
vtkIdType GetTraversalCellId()
Get/Set the current cellId for traversal.
void Visit(Functor &&functor, Args &&... args)
vtkTypeInt32Array ArrayType32
ArrayType64 * GetOffsetsArray64()
Return the array used to store cell offsets.
void SetData(vtkAOSDataArrayTemplate< long long > *offsets, vtkAOSDataArrayTemplate< long long > *connectivity)
Set the internal data arrays to the supplied offsets and connectivity arrays.
GetReturnType< Functor, Args... > Visit(Functor &&functor, Args &&... args)
bool AllocateExact(vtkIdType numCells, vtkIdType connectivitySize)
Pre-allocate memory in internal data structures.
bool ResizeExact(vtkIdType numCells, vtkIdType connectivitySize)
ResizeExact() resizes the internal structures to hold numCells total cell offsets and connectivitySiz...
vtkIdType EstimateSize(vtkIdType numCells, int maxPtsPerCell)
Utility routines help manage memory of cell array.
bool AllocateEstimate(vtkIdType numCells, vtkIdType maxCellSize)
Pre-allocate memory in internal data structures.
vtkIdType GetNumberOfOffsets() const
Get the number of elements in the offsets array.
vtkTypeInt64Array ArrayType64
vtkIdType TraversalCellId
void Use64BitStorage()
Initialize internal data structures to use 32- or 64-bit storage.
bool ConvertToDefaultStorage()
Convert internal data structures to use 32- or 64-bit storage.
bool CanConvertToDefaultStorage() const
Check if the existing data can safely be converted to use 32- or 64- bit storage.
void GetCell(vtkIdType loc, vtkIdType &npts, const vtkIdType *&pts)
Internal method used to retrieve a cell given a legacy offset location.
bool CanConvertTo32BitStorage() const
Check if the existing data can safely be converted to use 32- or 64- bit storage.
void InsertCellPoint(vtkIdType id)
Used in conjunction with InsertNextCell(npts) to add another point to the list of cells.
void GetCellAtId(vtkIdType cellId, vtkIdType &cellSize, vtkIdType const *&cellPoints)
Return the point ids for the cell at cellId.
void ReplaceCellAtId(vtkIdType cellId, vtkIdList *list)
Replaces the point ids for the specified cell with the supplied list.
void ReverseCellAtId(vtkIdType cellId)
Reverses the order of the point ids for the specified cell.
bool SetData(vtkDataArray *offsets, vtkDataArray *connectivity)
Sets the internal arrays to the supplied offsets and connectivity arrays.
void Squeeze()
Reclaim any extra memory while preserving data.
void SetData(vtkIdTypeArray *offsets, vtkIdTypeArray *connectivity)
Set the internal data arrays to the supplied offsets and connectivity arrays.
static vtkCellArray * New()
Standard methods for instantiation, type information, and printing.
ArrayType32 * GetConnectivityArray32()
Return the array used to store the point ids that define the cells' connectivity.
ArrayType64 * GetConnectivityArray64()
Return the array used to store the point ids that define the cells' connectivity.
bool ConvertTo32BitStorage()
Convert internal data structures to use 32- or 64-bit storage.
vtkIdType IsHomogeneous()
Check if all cells have the same number of vertices.
void Visit(Functor &&functor, Args &&... args) const
int GetMaxCellSize()
Returns the size of the largest cell.
bool ConvertToSmallestStorage()
Convert internal data structures to use 32- or 64-bit storage.
void ShallowCopy(vtkCellArray *ca)
Shallow copy ca into this cell array.
void ExportLegacyFormat(vtkIdTypeArray *data)
Fill data with the old-style vtkCellArray data layout, e.g.
bool ConvertTo64BitStorage()
Convert internal data structures to use 32- or 64-bit storage.
void SetData(vtkAOSDataArrayTemplate< long > *offsets, vtkAOSDataArrayTemplate< long > *connectivity)
Set the internal data arrays to the supplied offsets and connectivity arrays.
void ImportLegacyFormat(const vtkIdType *data, vtkIdType len)
Import an array of data with the legacy vtkCellArray layout, e.g.
void ImportLegacyFormat(vtkIdTypeArray *data)
Import an array of data with the legacy vtkCellArray layout, e.g.
void Use32BitStorage()
Initialize internal data structures to use 32- or 64-bit storage.
void Initialize()
Free any memory and reset to an empty state.
void DeepCopy(vtkCellArray *ca)
Perform a deep copy (no reference counting) of the given cell array.
typename vtkTypeList::Unique< vtkTypeList::Create< vtkAOSDataArrayTemplate< int >, vtkAOSDataArrayTemplate< long >, vtkAOSDataArrayTemplate< long long > >>::Result InputArrayList
List of possible ArrayTypes that are compatible with internal storage.
vtkDataArray * GetConnectivityArray()
Return the array used to store the point ids that define the cells' connectivity.
void SetTraversalCellId(vtkIdType cellId)
Get/Set the current cellId for traversal.
void SetData(vtkTypeInt64Array *offsets, vtkTypeInt64Array *connectivity)
Set the internal data arrays to the supplied offsets and connectivity arrays.
vtkIdType GetNumberOfCells() const
Get the number of cells in the array.
vtkIdType InsertNextCell(vtkCell *cell)
Insert a cell object.
virtual void SetNumberOfCells(vtkIdType)
Set the number of cells in the array.
vtkIdType GetNumberOfConnectivityIds() const
Get the size of the connectivity array that stores the point ids.
vtkNew< vtkIdTypeArray > LegacyData
void PrintSelf(ostream &os, vtkIndent indent) override
Standard methods for instantiation, type information, and printing.
void PrintDebug(ostream &os)
Standard methods for instantiation, type information, and printing.
vtkCellArrayIterator * NewIterator()
NewIterator returns a new instance of vtkCellArrayIterator that is initialized to point at the first ...
void UpdateCellCount(int npts)
Used in conjunction with InsertNextCell(int npts) and InsertCellPoint() to update the number of point...
GetReturnType< Functor, Args... > Visit(Functor &&functor, Args &&... args) const
vtkNew< vtkIdList > TempCell
vtkIdType GetSize()
Get the size of the allocated connectivity array.
vtkDataArray * GetOffsetsArray()
Return the array used to store cell offsets.
vtkTypeList::Create< ArrayType32, ArrayType64 > StorageArrayList
List of possible array types used for storage.
vtkIdType InsertNextCell(const std::initializer_list< vtkIdType > &cell)
Overload that allows InsertNextCell({0, 1, 2}) syntax.
void Append(vtkCellArray *src, vtkIdType pointOffset=0)
Append cells from src into this.
bool IsStorage64Bit() const
void ReplaceCellAtId(vtkIdType cellId, vtkIdType cellSize, const vtkIdType *cellPoints)
Replaces the point ids for the specified cell with the supplied list.
bool CanConvertTo64BitStorage() const
Check if the existing data can safely be converted to use 32- or 64- bit storage.
abstract class to specify cell behavior
vtkIdList * GetPointIds()
Return the list of point ids defining the cell.
abstract superclass for arrays of numeric data
list of point or cell ids
void SetNumberOfIds(vtkIdType number)
Specify the number of ids for this object to hold.
vtkIdType GetNumberOfIds() const noexcept
Return the number of id's in the list.
void Reset()
Reset to an empty state but retain previously allocated memory.
vtkIdType * GetPointer(vtkIdType i)
Get a pointer to a particular data index.
dynamic, self-adjusting array of vtkIdType
a simple class to control print indentation
static vtkMallocingFunction GetCurrentMallocFunction()
static vtkFreeingFunction GetAlternateFreeFunction()
static bool GetUsingMemkind()
A global state flag that controls whether vtkObjects are constructed in the usual way (the default) o...
abstract base class for most VTK objects
static vtkSmartPointer< T > New()
Create an instance of a VTK object.
vtkSmartPointer< vtkDataArray > GetData(const Ioss::GroupingEntity *entity, const std::string &fieldname, Ioss::Transform *transform=nullptr, Cache *cache=nullptr, const std::string &cachekey=std::string())
Returns a VTK array for a given field (fieldname) on the chosen block (or set) entity.
vtkSmartPointer< vtkCellArray > GetConnectivity(Ioss::GroupingEntity *group_entity, int &vtk_topology_type, Cache *cache=nullptr)
Read connectivity information from the group_entity.
VisitState< ArrayType32 > & GetArrays32()
const VisitState< ArrayType64 > & GetArrays64() const
const VisitState< ArrayType32 > & GetArrays32() const
VisitState< ArrayType64 > & GetArrays64()
vtkIdType GetNumberOfCells() const
vtkIdType GetEndOffset(vtkIdType cellId) const
vtkSmartPointer< ArrayType > Offsets
vtkSmartPointer< ArrayType > Connectivity
ArrayType * GetConnectivity()
decltype(vtk::DataArrayValueRange< 1 >(std::declval< ArrayType >())) CellRangeType
CellRangeType GetCellRange(vtkIdType cellId)
const ArrayType * GetOffsets() const
vtkIdType GetBeginOffset(vtkIdType cellId) const
vtkIdType GetCellSize(vtkIdType cellId) const
const ArrayType * GetConnectivity() const
typename ArrayType::ValueType ValueType
void operator()(CellStateT &state, const vtkIdType cellId, vtkIdList *ids)
std::enable_if<!CanShareConnPtr< CellStateT >::value, void >::type operator()(CellStateT &state, const vtkIdType cellId, vtkIdType &cellSize, vtkIdType const *&cellPoints, vtkIdList *temp)
std::enable_if< CanShareConnPtr< CellStateT >::value, void >::type operator()(CellStateT &state, const vtkIdType cellId, vtkIdType &cellSize, vtkIdType const *&cellPoints, vtkIdList *vtkNotUsed(temp))
vtkIdType operator()(CellStateT &state, vtkIdType cellId)
vtkIdType operator()(CellStateT &state, const vtkIdType npts, const vtkIdType pts[])
vtkIdType operator()(CellStateT &state, const vtkIdType npts)
void operator()(CellStateT &state)
void operator()(CellStateT &state, const vtkIdType npts)
Remove all duplicate types from TypeList TList, storing the new list in Result.
VisitState< ArrayType32 > * Int32
VisitState< ArrayType64 > * Int64
STL-compatible iterable ranges that provide access to vtkDataArray elements.
#define VTK_SIZEHINT(...)