You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
187 lines
5.2 KiB
187 lines
5.2 KiB
2 years ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: $RCSfile: vtkCollection.h,v $
|
||
|
|
||
|
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.
|
||
|
|
||
|
=========================================================================*/
|
||
|
// .NAME vtkCollection - create and manipulate unsorted lists of objects
|
||
|
// .SECTION Description
|
||
|
// vtkCollection is a general object for creating and manipulating lists
|
||
|
// of objects. The lists are unsorted and allow duplicate entries.
|
||
|
// vtkCollection also serves as a base class for lists of specific types
|
||
|
// of objects.
|
||
|
|
||
|
// .SECTION See Also
|
||
|
// vtkActorCollection vtkAssemblyPaths vtkDataSetCollection
|
||
|
// vtkImplicitFunctionCollection vtkLightCollection vtkPolyDataCollection
|
||
|
// vtkRenderWindowCollection vtkRendererCollection
|
||
|
// vtkStructuredPointsCollection vtkTransformCollection vtkVolumeCollection
|
||
|
|
||
|
#ifndef __vtkCollection_h
|
||
|
#define __vtkCollection_h
|
||
|
|
||
|
#include "vtkObject.h"
|
||
|
|
||
|
//BTX - begin tcl exclude
|
||
|
class vtkCollectionElement //;prevents pick-up by man page generator
|
||
|
{
|
||
|
public:
|
||
|
vtkCollectionElement():Item(NULL),Next(NULL) {};
|
||
|
vtkObject *Item;
|
||
|
vtkCollectionElement *Next;
|
||
|
};
|
||
|
typedef void * vtkCollectionSimpleIterator;
|
||
|
//ETX end tcl exclude
|
||
|
|
||
|
class vtkCollectionIterator;
|
||
|
|
||
|
class VTK_COMMON_EXPORT vtkCollection : public vtkObject
|
||
|
{
|
||
|
public:
|
||
|
vtkTypeRevisionMacro(vtkCollection,vtkObject);
|
||
|
void PrintSelf(ostream& os, vtkIndent indent);
|
||
|
|
||
|
// Description:
|
||
|
// Construct with empty list.
|
||
|
static vtkCollection *New();
|
||
|
|
||
|
// Description:
|
||
|
// Add an object to the list. Does not prevent duplicate entries.
|
||
|
void AddItem(vtkObject *);
|
||
|
|
||
|
// Description:
|
||
|
// Replace the i'th item in the collection with a
|
||
|
void ReplaceItem(int i, vtkObject *);
|
||
|
|
||
|
// Description:
|
||
|
// Remove the i'th item in the list.
|
||
|
// Be careful if using this function during traversal of the list using
|
||
|
// GetNextItemAsObject (or GetNextItem in derived class). The list WILL
|
||
|
// be shortened if a valid index is given! If this->Current is equal to the
|
||
|
// element being removed, have it point to then next element in the list.
|
||
|
void RemoveItem(int i);
|
||
|
|
||
|
// Description:
|
||
|
// Remove an object from the list. Removes the first object found, not
|
||
|
// all occurrences. If no object found, list is unaffected. See warning
|
||
|
// in description of RemoveItem(int).
|
||
|
void RemoveItem(vtkObject *);
|
||
|
|
||
|
// Description:
|
||
|
// Remove all objects from the list.
|
||
|
void RemoveAllItems();
|
||
|
|
||
|
// Description:
|
||
|
// Search for an object and return location in list. If location == 0,
|
||
|
// object was not found.
|
||
|
int IsItemPresent(vtkObject *);
|
||
|
|
||
|
// Description:
|
||
|
// Return the number of objects in the list.
|
||
|
int GetNumberOfItems();
|
||
|
|
||
|
// Description:
|
||
|
// Initialize the traversal of the collection. This means the data pointer
|
||
|
// is set at the beginning of the list.
|
||
|
void InitTraversal() { this->Current = this->Top;};
|
||
|
|
||
|
//BTX
|
||
|
// Description:
|
||
|
// A reentrant safe way to iterate through a collection.
|
||
|
// Just pass the same cookie value around each time
|
||
|
void InitTraversal(vtkCollectionSimpleIterator &cookie) {
|
||
|
cookie = static_cast<vtkCollectionSimpleIterator>(this->Top);};
|
||
|
//ETX
|
||
|
|
||
|
// Description:
|
||
|
// Get the next item in the collection. NULL is returned if the collection
|
||
|
// is exhausted.
|
||
|
vtkObject *GetNextItemAsObject();
|
||
|
|
||
|
// Description:
|
||
|
// Get the i'th item in the collection. NULL is returned if i is out
|
||
|
// of range
|
||
|
vtkObject *GetItemAsObject(int i);
|
||
|
|
||
|
//BTX
|
||
|
// Description:
|
||
|
// A reentrant safe way to get the next object as a collection. Just pass the
|
||
|
// same cookie back and forth.
|
||
|
vtkObject *GetNextItemAsObject(vtkCollectionSimpleIterator &cookie);
|
||
|
//ETX
|
||
|
|
||
|
// Description:
|
||
|
// Get an iterator to traverse the objects in this collection.
|
||
|
vtkCollectionIterator* NewIterator();
|
||
|
|
||
|
// Description:
|
||
|
// Participate in garbage collection.
|
||
|
virtual void Register(vtkObjectBase* o);
|
||
|
virtual void UnRegister(vtkObjectBase* o);
|
||
|
protected:
|
||
|
vtkCollection();
|
||
|
~vtkCollection();
|
||
|
|
||
|
virtual void DeleteElement(vtkCollectionElement *);
|
||
|
int NumberOfItems;
|
||
|
vtkCollectionElement *Top;
|
||
|
vtkCollectionElement *Bottom;
|
||
|
vtkCollectionElement *Current;
|
||
|
|
||
|
//BTX
|
||
|
friend class vtkCollectionIterator;
|
||
|
//ETX
|
||
|
|
||
|
// See vtkGarbageCollector.h:
|
||
|
virtual void ReportReferences(vtkGarbageCollector* collector);
|
||
|
private:
|
||
|
vtkCollection(const vtkCollection&); // Not implemented
|
||
|
void operator=(const vtkCollection&); // Not implemented
|
||
|
};
|
||
|
|
||
|
|
||
|
inline vtkObject *vtkCollection::GetNextItemAsObject()
|
||
|
{
|
||
|
vtkCollectionElement *elem=this->Current;
|
||
|
|
||
|
if ( elem != NULL )
|
||
|
{
|
||
|
this->Current = elem->Next;
|
||
|
return elem->Item;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return NULL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
inline vtkObject *vtkCollection::GetNextItemAsObject(void *&cookie)
|
||
|
{
|
||
|
vtkCollectionElement *elem=static_cast<vtkCollectionElement *>(cookie);
|
||
|
|
||
|
if ( elem != NULL )
|
||
|
{
|
||
|
cookie = static_cast<void *>(elem->Next);
|
||
|
return elem->Item;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return NULL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|