You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/3rd/VTK7.1/include/vtkIdList.h

203 lines
5.1 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkIdList.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/**
* @class vtkIdList
* @brief list of point or cell ids
*
* vtkIdList is used to represent and pass data id's between
* objects. vtkIdList may represent any type of integer id, but
* usually represents point and cell ids.
*/
#ifndef vtkIdList_h
#define vtkIdList_h
#include "vtkCommonCoreModule.h" // For export macro
#include "vtkObject.h"
class VTKCOMMONCORE_EXPORT vtkIdList : public vtkObject
{
public:
static vtkIdList *New();
void Initialize();
/**
* Allocate a capacity for sz ids in the list and
* set the number of stored ids in the list to 0.
* strategy is not used.
*/
int Allocate(const vtkIdType sz, const int strategy=0);
vtkTypeMacro(vtkIdList,vtkObject);
void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;
/**
* Return the number of id's in the list.
*/
vtkIdType GetNumberOfIds() {return this->NumberOfIds;};
/**
* Return the id at location i.
*/
vtkIdType GetId(const vtkIdType i) {return this->Ids[i];};
/**
* Specify the number of ids for this object to hold. Does an
* allocation as well as setting the number of ids.
*/
void SetNumberOfIds(const vtkIdType number);
/**
* Set the id at location i. Doesn't do range checking so it's a bit
* faster than InsertId. Make sure you use SetNumberOfIds() to allocate
* memory prior to using SetId().
*/
void SetId(const vtkIdType i, const vtkIdType vtkid) {this->Ids[i] = vtkid;};
/**
* Set the id at location i. Does range checking and allocates memory
* as necessary.
*/
void InsertId(const vtkIdType i, const vtkIdType vtkid);
/**
* Add the id specified to the end of the list. Range checking is performed.
*/
vtkIdType InsertNextId(const vtkIdType vtkid);
/**
* If id is not already in list, insert it and return location in
* list. Otherwise return just location in list.
*/
vtkIdType InsertUniqueId(const vtkIdType vtkid);
/**
* Get a pointer to a particular data index.
*/
vtkIdType *GetPointer(const vtkIdType i) {return this->Ids + i;};
/**
* Get a pointer to a particular data index. Make sure data is allocated
* for the number of items requested. Set MaxId according to the number of
* data values requested.
*/
vtkIdType *WritePointer(const vtkIdType i, const vtkIdType number);
/**
* Specify an array of vtkIdType to use as the id list. This replaces the
* underlying array. This instance of vtkIdList takes ownership of the
* array, meaning that it deletes it on destruction (using delete[]).
*/
void SetArray(vtkIdType *array, vtkIdType size);
/**
* Reset to an empty state.
*/
void Reset() {this->NumberOfIds = 0;};
/**
* Free any unused memory.
*/
void Squeeze() {this->Resize(this->NumberOfIds);};
/**
* Copy an id list by explicitly copying the internal array.
*/
void DeepCopy(vtkIdList *ids);
/**
* Delete specified id from list. Will remove all occurrences of id in list.
*/
void DeleteId(vtkIdType vtkid);
/**
* Return -1 if id specified is not contained in the list; otherwise return
* the position in the list.
*/
vtkIdType IsId(vtkIdType vtkid);
/**
* Intersect this list with another vtkIdList. Updates current list according
* to result of intersection operation.
*/
void IntersectWith(vtkIdList* otherIds);
/**
* Adjust the size of the id list while maintaining its content (except
* when being truncated).
*/
vtkIdType *Resize(const vtkIdType sz);
// This method should become legacy
void IntersectWith(vtkIdList& otherIds) {
this->IntersectWith(&otherIds); };
protected:
vtkIdList();
~vtkIdList() VTK_OVERRIDE;
vtkIdType NumberOfIds;
vtkIdType Size;
vtkIdType *Ids;
private:
vtkIdList(const vtkIdList&) VTK_DELETE_FUNCTION;
void operator=(const vtkIdList&) VTK_DELETE_FUNCTION;
};
// In-lined for performance
inline void vtkIdList::InsertId(const vtkIdType i, const vtkIdType vtkid)
{
if (i >= this->Size)
{
this->Resize(i + 1);
}
this->Ids[i] = vtkid;
if (i >= this->NumberOfIds)
{
this->NumberOfIds = i + 1;
}
}
// In-lined for performance
inline vtkIdType vtkIdList::InsertNextId(const vtkIdType vtkid)
{
if ( this->NumberOfIds >= this->Size )
{
if (!this->Resize(2*this->NumberOfIds+1)) //grow by factor of 2
{
return this->NumberOfIds-1;
}
}
this->Ids[this->NumberOfIds++] = vtkid;
return this->NumberOfIds-1;
}
inline vtkIdType vtkIdList::IsId(vtkIdType vtkid)
{
vtkIdType *ptr, i;
for (ptr=this->Ids, i=0; i<this->NumberOfIds; i++, ptr++)
{
if ( vtkid == *ptr )
{
return i;
}
}
return (-1);
}
#endif