VTK  9.0.20210805
vtkIdList.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkIdList.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 =========================================================================*/
24 #ifndef vtkIdList_h
25 #define vtkIdList_h
26 
27 #include "vtkCommonCoreModule.h" // For export macro
28 #include "vtkObject.h"
29 
30 class VTKCOMMONCORE_EXPORT vtkIdList : public vtkObject
31 {
32 public:
34 
37  static vtkIdList* New();
38  vtkTypeMacro(vtkIdList, vtkObject);
39  void PrintSelf(ostream& os, vtkIndent indent) override;
41 
45  void Initialize();
46 
52  int Allocate(const vtkIdType sz, const int strategy = 0);
53 
57  vtkIdType GetNumberOfIds() const noexcept { return this->NumberOfIds; }
58 
62  vtkIdType GetId(const vtkIdType i) VTK_EXPECTS(0 <= i && i < GetNumberOfIds())
63  {
64  return this->Ids[i];
65  }
66 
71  {
72  for (int i = 0; i < this->NumberOfIds; i++)
73  if (this->Ids[i] == id)
74  return i;
75  return -1;
76  }
77 
82  void SetNumberOfIds(const vtkIdType number);
83 
89  void SetId(const vtkIdType i, const vtkIdType vtkid) VTK_EXPECTS(0 <= i && i < GetNumberOfIds())
90  {
91  this->Ids[i] = vtkid;
92  }
93 
98  void InsertId(const vtkIdType i, const vtkIdType vtkid) VTK_EXPECTS(0 <= i);
99 
103  vtkIdType InsertNextId(const vtkIdType vtkid);
104 
110 
115  void Sort();
116 
122 
126  vtkIdType* GetPointer(const vtkIdType i) { return this->Ids + i; }
127 
133  vtkIdType* WritePointer(const vtkIdType i, const vtkIdType number);
134 
141 
145  void Reset() { this->NumberOfIds = 0; }
146 
150  void Squeeze() { this->Resize(this->NumberOfIds); }
151 
155  void DeepCopy(vtkIdList* ids);
156 
160  void DeleteId(vtkIdType vtkid);
161 
166  vtkIdType IsId(vtkIdType vtkid);
167 
172  void IntersectWith(vtkIdList* otherIds);
173 
179 
183  void IntersectWith(vtkIdList& otherIds) { this->IntersectWith(&otherIds); }
184 
185 #ifndef __VTK_WRAP__
186 
193 #endif
194 
196 
199  vtkIdType* begin() { return this->Ids; }
200  vtkIdType* end() { return this->Ids + this->NumberOfIds; }
201  const vtkIdType* begin() const { return this->Ids; }
202  const vtkIdType* end() const { return this->Ids + this->NumberOfIds; }
204 protected:
206  ~vtkIdList() override;
207 
211 
212 private:
213  vtkIdList(const vtkIdList&) = delete;
214  void operator=(const vtkIdList&) = delete;
215 };
216 
217 // In-lined for performance
218 inline void vtkIdList::InsertId(const vtkIdType i, const vtkIdType vtkid)
219 {
220  if (i >= this->Size)
221  {
222  this->Resize(i + 1);
223  }
224  this->Ids[i] = vtkid;
225  if (i >= this->NumberOfIds)
226  {
227  this->NumberOfIds = i + 1;
228  }
229 }
230 
231 // In-lined for performance
233 {
234  if (this->NumberOfIds >= this->Size)
235  {
236  if (!this->Resize(2 * this->NumberOfIds + 1)) // grow by factor of 2
237  {
238  return this->NumberOfIds - 1;
239  }
240  }
241  this->Ids[this->NumberOfIds++] = vtkid;
242  return this->NumberOfIds - 1;
243 }
244 
246 {
247  vtkIdType *ptr, i;
248  for (ptr = this->Ids, i = 0; i < this->NumberOfIds; i++, ptr++)
249  {
250  if (vtkid == *ptr)
251  {
252  return i;
253  }
254  }
255  return (-1);
256 }
257 
258 #endif
vtkIdList::Allocate
int Allocate(const vtkIdType sz, const int strategy=0)
Allocate a capacity for sz ids in the list and set the number of stored ids in the list to 0.
vtkIdList::IntersectWith
void IntersectWith(vtkIdList *otherIds)
Intersect this list with another vtkIdList.
vtkIdList::Fill
void Fill(vtkIdType value)
Fill the ids with the input value.
vtkIdList::DeepCopy
void DeepCopy(vtkIdList *ids)
Copy an id list by explicitly copying the internal array.
vtkIdList::InsertUniqueId
vtkIdType InsertUniqueId(const vtkIdType vtkid)
If id is not already in list, insert it and return location in list.
VTK_EXPECTS
#define VTK_EXPECTS(x)
Definition: vtkWrappingHints.h:47
vtkX3D::value
@ value
Definition: vtkX3D.h:226
vtkIdList::New
static vtkIdList * New()
Standard methods for instantiation, type information, and printing.
vtkIdType
int vtkIdType
Definition: vtkType.h:332
vtkIdList::InsertId
void InsertId(const vtkIdType i, const vtkIdType vtkid)
Set the id at location i.
Definition: vtkIdList.h:218
vtkIdList::begin
const vtkIdType * begin() const
To support range-based for loops.
Definition: vtkIdList.h:201
vtkIdList::end
vtkIdType * end()
To support range-based for loops.
Definition: vtkIdList.h:200
vtkObject
abstract base class for most VTK objects
Definition: vtkObject.h:63
vtkIdList::Squeeze
void Squeeze()
Free any unused memory.
Definition: vtkIdList.h:150
vtkIdList::Sort
void Sort()
Sort the ids in the list in ascending id order.
vtkIdList::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Standard methods for instantiation, type information, and printing.
vtkIdList::FindIdLocation
vtkIdType FindIdLocation(const vtkIdType id)
Find the location i of the provided id.
Definition: vtkIdList.h:70
vtkIdList::Resize
vtkIdType * Resize(const vtkIdType sz)
Adjust the size of the id list while maintaining its content (except when being truncated).
vtkIdList::~vtkIdList
~vtkIdList() override
vtkIdList::SetId
void SetId(const vtkIdType i, const vtkIdType vtkid)
Set the id at location i.
Definition: vtkIdList.h:89
vtkIdList::WritePointer
vtkIdType * WritePointer(const vtkIdType i, const vtkIdType number)
Get a pointer to a particular data index.
vtkIdList::InsertNextId
vtkIdType InsertNextId(const vtkIdType vtkid)
Add the id specified to the end of the list.
Definition: vtkIdList.h:232
vtkIdList::Initialize
void Initialize()
Release memory and restore to unallocated state.
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:34
vtkIdList::end
const vtkIdType * end() const
To support range-based for loops.
Definition: vtkIdList.h:202
vtkIdList::GetId
vtkIdType GetId(const vtkIdType i)
Return the id at location i.
Definition: vtkIdList.h:62
vtkIdList
list of point or cell ids
Definition: vtkIdList.h:31
vtkIdList::DeleteId
void DeleteId(vtkIdType vtkid)
Delete specified id from list.
vtkX3D::size
@ size
Definition: vtkX3D.h:259
vtkIdList::Ids
vtkIdType * Ids
Definition: vtkIdList.h:210
vtkIdList::GetNumberOfIds
vtkIdType GetNumberOfIds() const noexcept
Return the number of id's in the list.
Definition: vtkIdList.h:57
vtkObject.h
vtkIdList::vtkIdList
vtkIdList()
vtkIdList::Release
vtkIdType * Release()
This releases the ownership of the internal vtkIdType array and returns the pointer to it.
vtkIdList::begin
vtkIdType * begin()
To support range-based for loops.
Definition: vtkIdList.h:199
vtkIdList::SetArray
void SetArray(vtkIdType *array, vtkIdType size)
Specify an array of vtkIdType to use as the id list.
vtkIdList::GetPointer
vtkIdType * GetPointer(const vtkIdType i)
Get a pointer to a particular data index.
Definition: vtkIdList.h:126
vtkIdList::SetNumberOfIds
void SetNumberOfIds(const vtkIdType number)
Specify the number of ids for this object to hold.
vtkIdList::IntersectWith
void IntersectWith(vtkIdList &otherIds)
Intersect one id list with another.
Definition: vtkIdList.h:183
vtkIdList::IsId
vtkIdType IsId(vtkIdType vtkid)
Return -1 if id specified is not contained in the list; otherwise return the position in the list.
Definition: vtkIdList.h:245
vtkIdList::NumberOfIds
vtkIdType NumberOfIds
Definition: vtkIdList.h:208
vtkIdList::Size
vtkIdType Size
Definition: vtkIdList.h:209
vtkIdList::Reset
void Reset()
Reset to an empty state but retain previously allocated memory.
Definition: vtkIdList.h:145