#include <mitkSet.h>
Public Types | |
typedef mitk::SetObserver< T > | Observer |
typedef Set< T > | Self |
typedef itk::Object | Superclass |
typedef itk::SmartPointer< Self > | Pointer |
typedef itk::SmartPointer < const Self > | ConstPointer |
Public Member Functions | |
virtual const char * | GetClassName () const |
itkFactorylessNewMacro (Set< T >) | |
Set () | |
void | Copy (mitk::Set< T > *otherSet) |
bool | Add (const T &obj) |
bool | Remove (const T &obj) |
bool | Remove (int index) |
void | Clear () |
unsigned int | GetSize () const |
int | IndexOf (const T &obj) const |
bool | Has (const T &obj) const |
bool | IsEmpty () const |
bool | IsValid (int index) const |
T & | Front () |
T & | Back () |
T & | Get (unsigned int index) |
const T & | Front () const |
const T & | Back () const |
const T & | Get (unsigned int index) const |
void | AddObserver (SetObserver< T > *observer) const |
void | RemoveObserver (SetObserver< T > *observer) const |
void | OnObjectModified (const itk::Object *caller, const itk::EventObject &event) |
Set (const Set< T > &other) | |
Set< T > & | operator= (const Set< T > &other) |
virtual | ~Set () |
Protected Attributes | |
std::vector< T > | m_Objects |
std::set< SetObserver< T > * > | m_SetObserver |
std::map< const T, unsigned long > | m_ObjectModifiedTags |
Holds all tags of Modified Event Listeners. | |
std::map< const T, unsigned long > | m_ObjectDeleteTags |
Holds all tags of Modified Event Listeners. |
A class that acts like a weak pointer but for a list of itk objects
Definition at line 20 of file mitkSet.h.
typedef itk::SmartPointer<const Self> mitk::Set< T >::ConstPointer |
typedef mitk::SetObserver<T> mitk::Set< T >::Observer |
typedef itk::Object mitk::Set< T >::Superclass |
bool mitk::Set< T >::Add | ( | const T & | obj ) | [inline] |
Definition at line 43 of file mitkSet.h.
References mitk::Set< T >::Has(), mitk::Set< T >::m_ObjectDeleteTags, mitk::Set< T >::m_ObjectModifiedTags, mitk::Set< T >::m_Objects, and mitk::Set< T >::m_SetObserver.
Referenced by mitk::Set< T >::Copy(), and mitk::Set< T >::operator=().
{ if(this->Has(obj)) // this is a set! do not add twice return false; // add it now m_Objects.push_back(obj); // if index is not valid any more, just add // the element // subscribe for modified event typename itk::MemberCommand<mitk::Set<T> >::Pointer _modifiedCommand = itk::MemberCommand<mitk::Set<T> >::New(); _modifiedCommand->SetCallbackFunction(this , &Set<T>::OnObjectModified); m_ObjectModifiedTags[obj] = obj->AddObserver(itk::ModifiedEvent(), _modifiedCommand); // subscribe for delete event typename itk::MemberCommand<mitk::Set<T> >::Pointer _DeleteCommand = itk::MemberCommand<mitk::Set<T> >::New(); _DeleteCommand->SetCallbackFunction(this , &Set<T>::OnObjectModified); m_ObjectDeleteTags[obj] = obj->AddObserver(itk::DeleteEvent(), _DeleteCommand); for(typename std::set<SetObserver<T>*>::iterator it = m_SetObserver.begin(); it != m_SetObserver.end(); ++it) (*it)->OnAdded(obj); this->Modified(); return true; }
void mitk::Set< T >::AddObserver | ( | SetObserver< T > * | observer ) | const [inline] |
Definition at line 168 of file mitkSet.h.
References mitk::Set< T >::m_SetObserver.
{ m_SetObserver.insert( observer ); }
const T& mitk::Set< T >::Back | ( | ) | const [inline] |
Definition at line 160 of file mitkSet.h.
References mitk::Set< T >::m_Objects.
{ return m_Objects.back(); }
T& mitk::Set< T >::Back | ( | ) | [inline] |
Definition at line 148 of file mitkSet.h.
References mitk::Set< T >::m_Objects.
{ return m_Objects.back(); }
void mitk::Set< T >::Clear | ( | ) | [inline] |
Definition at line 103 of file mitkSet.h.
References mitk::Set< T >::m_Objects, and mitk::Set< T >::Remove().
Referenced by mitk::Set< T >::Copy(), and mitk::Set< T >::~Set().
clears this set, copies over all elements from otherSet
Definition at line 34 of file mitkSet.h.
References mitk::Set< T >::Add(), mitk::Set< T >::Clear(), mitk::Set< T >::Get(), and mitk::Set< T >::GetSize().
const T& mitk::Set< T >::Front | ( | ) | const [inline] |
Definition at line 156 of file mitkSet.h.
References mitk::Set< T >::m_Objects.
{ return m_Objects.front(); }
T& mitk::Set< T >::Front | ( | ) | [inline] |
Definition at line 144 of file mitkSet.h.
References mitk::Set< T >::m_Objects.
{ return m_Objects.front(); }
const T& mitk::Set< T >::Get | ( | unsigned int | index ) | const [inline] |
Definition at line 164 of file mitkSet.h.
References mitk::Set< T >::m_Objects.
{ return m_Objects.at(index); }
T& mitk::Set< T >::Get | ( | unsigned int | index ) | [inline] |
Definition at line 152 of file mitkSet.h.
References mitk::Set< T >::m_Objects.
Referenced by mitk::Set< T >::Copy().
{ return m_Objects.at(index); }
virtual const char* mitk::Set< T >::GetClassName | ( | ) | const [virtual] |
unsigned int mitk::Set< T >::GetSize | ( | ) | const [inline] |
Definition at line 109 of file mitkSet.h.
References mitk::Set< T >::m_Objects.
Referenced by mitk::Set< T >::Copy().
{ return m_Objects.size(); }
bool mitk::Set< T >::Has | ( | const T & | obj ) | const [inline] |
Definition at line 127 of file mitkSet.h.
References mitk::Set< T >::IndexOf().
Referenced by mitk::Set< T >::Add().
{ return this->IndexOf(obj) != -1; }
int mitk::Set< T >::IndexOf | ( | const T & | obj ) | const [inline] |
Definition at line 113 of file mitkSet.h.
References mitk::Set< T >::m_Objects.
Referenced by mitk::Set< T >::Has(), and mitk::Set< T >::Remove().
bool mitk::Set< T >::IsEmpty | ( | ) | const [inline] |
Definition at line 131 of file mitkSet.h.
References mitk::Set< T >::m_Objects.
{ return m_Objects.empty(); }
bool mitk::Set< T >::IsValid | ( | int | index ) | const [inline] |
Definition at line 135 of file mitkSet.h.
References mitk::Set< T >::m_Objects.
Referenced by mitk::Set< T >::Remove().
void mitk::Set< T >::OnObjectModified | ( | const itk::Object * | caller, |
const itk::EventObject & | event | ||
) | [inline] |
Definition at line 176 of file mitkSet.h.
References mitk::Set< T >::m_Objects, mitk::Set< T >::m_SetObserver, and mitk::Set< T >::Remove().
{ unsigned int i=0; for(; i<m_Objects.size(); ++i) if(m_Objects.at(i) == caller) break; const itk::DeleteEvent* delEvent = dynamic_cast<const itk::DeleteEvent*>(&event); // inform listeners for(typename std::set<SetObserver<T>*>::iterator it = m_SetObserver.begin(); it != m_SetObserver.end(); ++it) delEvent ? (*it)->OnDelete( this->Get(i) ) : (*it)->OnModified( this->Get(i) ); // remove from list if object was deleted (no dangling pointers) if(delEvent) { this->Remove(i); } }
Definition at line 205 of file mitkSet.h.
References mitk::Set< T >::Add().
{ // do not simply copy -> because of observer objects // instead: use add method for each element of the other List for(int i=0; i<other.GetSize(); ++i) this->Add( other.Get(i) ); return *this; }
bool mitk::Set< T >::Remove | ( | int | index ) | [inline] |
Definition at line 80 of file mitkSet.h.
References mitk::Set< T >::IsValid(), mitk::Set< T >::m_ObjectDeleteTags, mitk::Set< T >::m_ObjectModifiedTags, mitk::Set< T >::m_Objects, and mitk::Set< T >::m_SetObserver.
{ if( !this->IsValid(index) ) // element must exist to be removed return false; typename std::vector<T>::iterator it = m_Objects.begin(); std::advance(it, index); T& obj = *it; for(typename std::set<SetObserver<T>*>::iterator it2 = m_SetObserver.begin(); it2 != m_SetObserver.end(); ++it2) (*it2)->OnRemove(*it); // remove it now obj->RemoveObserver(m_ObjectModifiedTags[obj]); obj->RemoveObserver(m_ObjectDeleteTags[obj]); m_ObjectModifiedTags.erase(obj); m_ObjectDeleteTags.erase(obj); m_Objects.erase(it); this->Modified(); return true; }
bool mitk::Set< T >::Remove | ( | const T & | obj ) | [inline] |
Definition at line 75 of file mitkSet.h.
References mitk::Set< T >::IndexOf().
Referenced by mitk::Set< T >::Clear(), and mitk::Set< T >::OnObjectModified().
void mitk::Set< T >::RemoveObserver | ( | SetObserver< T > * | observer ) | const [inline] |
Definition at line 172 of file mitkSet.h.
References mitk::Set< T >::m_SetObserver.
{ m_SetObserver.erase( observer ); }
std::map<const T, unsigned long> mitk::Set< T >::m_ObjectDeleteTags [protected] |
Holds all tags of Modified Event Listeners.
Definition at line 237 of file mitkSet.h.
Referenced by mitk::Set< T >::Add(), and mitk::Set< T >::Remove().
std::map<const T, unsigned long> mitk::Set< T >::m_ObjectModifiedTags [protected] |
Holds all tags of Modified Event Listeners.
Definition at line 232 of file mitkSet.h.
Referenced by mitk::Set< T >::Add(), and mitk::Set< T >::Remove().
Holds all objects
Definition at line 222 of file mitkSet.h.
Referenced by mitk::Set< T >::Add(), mitk::Set< T >::Back(), mitk::Set< T >::Clear(), mitk::Set< T >::Front(), mitk::Set< T >::Get(), mitk::Set< T >::GetSize(), mitk::Set< T >::IndexOf(), mitk::Set< T >::IsEmpty(), mitk::Set< T >::IsValid(), mitk::Set< T >::OnObjectModified(), and mitk::Set< T >::Remove().
std::set<SetObserver<T>*> mitk::Set< T >::m_SetObserver [mutable, protected] |
holds the list of observed itk objects (will be updated in setat())
Definition at line 227 of file mitkSet.h.
Referenced by mitk::Set< T >::Add(), mitk::Set< T >::AddObserver(), mitk::Set< T >::OnObjectModified(), mitk::Set< T >::Remove(), and mitk::Set< T >::RemoveObserver().