00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: $RCSfile: vtkCollection.h,v $ 00005 Language: C++ 00006 00007 Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen 00008 All rights reserved. 00009 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00010 00011 This software is distributed WITHOUT ANY WARRANTY; without even 00012 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00013 PURPOSE. See the above copyright notice for more information. 00014 00015 =========================================================================*/ 00047 #ifndef __vtkCollection_h 00048 #define __vtkCollection_h 00049 00050 #include "vtkObject.h" 00051 00052 //BTX - begin tcl exclude 00053 class vtkCollectionElement //;prevents pick-up by man page generator 00054 { 00055 public: 00056 vtkCollectionElement():Item(NULL),Next(NULL) {}; 00057 vtkObject *Item; 00058 vtkCollectionElement *Next; 00059 }; 00060 //ETX end tcl exclude 00061 00062 class vtkCollectionIterator; 00063 00064 class VTK_COMMON_EXPORT vtkCollection : public vtkObject 00065 { 00066 public: 00067 vtkTypeRevisionMacro(vtkCollection,vtkObject); 00068 void PrintSelf(ostream& os, vtkIndent indent); 00069 00071 static vtkCollection *New(); 00072 00074 void AddItem(vtkObject *); 00075 00077 void ReplaceItem(int i, vtkObject *); 00078 00084 void RemoveItem(int i); 00085 00089 void RemoveItem(vtkObject *); 00090 00092 void RemoveAllItems(); 00093 00096 int IsItemPresent(vtkObject *); 00097 00099 int GetNumberOfItems(); 00100 00103 void InitTraversal() { this->Current = this->Top;}; 00104 00105 //BTX 00107 /*! Less bloated way to iterate through a collection. Just pass the same 00108 cookie value around each time */ 00109 void InitTraversal(void *&cookie) {cookie = static_cast<void *>(this->Top);}; 00110 //ETX 00112 00115 vtkObject *GetNextItemAsObject(); 00116 00119 vtkObject *GetItemAsObject(int i); 00120 00121 //BTX 00124 vtkObject *GetNextItemAsObject(void *&cookie); 00125 00127 vtkCollectionIterator* NewIterator(); 00128 00129 protected: 00130 vtkCollection(); 00131 ~vtkCollection(); 00132 00133 virtual void DeleteElement(vtkCollectionElement *); 00134 int NumberOfItems; 00135 vtkCollectionElement *Top; 00136 vtkCollectionElement *Bottom; 00137 vtkCollectionElement *Current; 00138 00139 //BTX 00140 friend class vtkCollectionIterator; 00141 //ETX 00142 00143 private: 00144 vtkCollection(const vtkCollection&); // Not implemented 00145 void operator=(const vtkCollection&); // Not implemented 00146 }; 00147 00148 00149 inline vtkObject *vtkCollection::GetNextItemAsObject() 00150 { 00151 vtkCollectionElement *elem=this->Current; 00152 00153 if ( elem != NULL ) 00154 { 00155 this->Current = elem->Next; 00156 return elem->Item; 00157 } 00158 else 00159 { 00160 return NULL; 00161 } 00162 } 00163 00164 inline vtkObject *vtkCollection::GetNextItemAsObject(void *&cookie) 00165 { 00166 vtkCollectionElement *elem=static_cast<vtkCollectionElement *>(cookie); 00167 00168 if ( elem != NULL ) 00169 { 00170 cookie = static_cast<void *>(elem->Next); 00171 return elem->Item; 00172 } 00173 else 00174 { 00175 return NULL; 00176 } 00177 } 00178 00179 #endif 00180 00181 00182 00183 00184