Public Types | Public Member Functions | Protected Attributes

mitk::Set< T > Class Template Reference

#include <mitkSet.h>

List of all members.

Public Types

typedef mitk::SetObserver< T > Observer
typedef Set< T > Self
typedef itk::Object Superclass
typedef itk::SmartPointer< SelfPointer
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.

Detailed Description

template<class T>
class mitk::Set< T >

A class that acts like a weak pointer but for a list of itk objects

Definition at line 20 of file mitkSet.h.


Member Typedef Documentation

template<class T>
typedef itk::SmartPointer<const Self> mitk::Set< T >::ConstPointer

Definition at line 24 of file mitkSet.h.

template<class T>
typedef mitk::SetObserver<T> mitk::Set< T >::Observer

Definition at line 23 of file mitkSet.h.

template<class T>
typedef itk::SmartPointer<Self> mitk::Set< T >::Pointer

Definition at line 24 of file mitkSet.h.

template<class T>
typedef Set<T> mitk::Set< T >::Self

Definition at line 24 of file mitkSet.h.

template<class T>
typedef itk::Object mitk::Set< T >::Superclass

Definition at line 24 of file mitkSet.h.


Constructor & Destructor Documentation

template<class T>
mitk::Set< T >::Set (  ) [inline]

Definition at line 27 of file mitkSet.h.

  {
  }
template<class T>
mitk::Set< T >::Set ( const Set< T > &  other ) [inline]

Definition at line 200 of file mitkSet.h.

  {
    *this = other;
  }
template<class T>
virtual mitk::Set< T >::~Set (  ) [inline, virtual]

Definition at line 214 of file mitkSet.h.

References mitk::Set< T >::Clear().

  {
    this->Clear();
  }

Member Function Documentation

template<class T>
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;
  }
template<class T>
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 );
  }
template<class T>
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();
  }
template<class T>
T& mitk::Set< T >::Back (  ) [inline]

Definition at line 148 of file mitkSet.h.

References mitk::Set< T >::m_Objects.

  {
    return m_Objects.back();
  }
template<class T>
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().

  {
    while(m_Objects.size() > 0)
      this->Remove(m_Objects.size()-1);
  }
template<class T>
void mitk::Set< T >::Copy ( mitk::Set< T > *  otherSet ) [inline]

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().

  {
    this->Clear();
    for(unsigned int i=0; i< otherSet->GetSize(); ++i)
    {
      this->Add( otherSet->Get(i) );
    }
  }
template<class T>
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();
  }
template<class T>
T& mitk::Set< T >::Front (  ) [inline]

Definition at line 144 of file mitkSet.h.

References mitk::Set< T >::m_Objects.

  {
    return m_Objects.front();
  }
template<class T>
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);
  }
template<class T>
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);
  }
template<class T>
virtual const char* mitk::Set< T >::GetClassName (  ) const [virtual]
template<class T>
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();
  }
template<class T>
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;
  }
template<class T>
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().

  {
    int index = -1;
    typename std::vector<T>::const_iterator it = m_Objects.begin();
    for(unsigned int i=0; i<m_Objects.size(); ++i)
    {
      if(m_Objects.at(i) == obj)
      {
        index = i;
        break;
      }
    }
    return index;
  }
template<class T>
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();
  }
template<class T>
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().

  {
    if(index >= 0)
    {
      return m_Objects.size() > 0
          && static_cast< unsigned int > (index) < m_Objects.size();
    }
    return false;
  }
template<class T>
mitk::Set< T >::itkFactorylessNewMacro ( Set< T >   )
template<class T>
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);
    }
  }
template<class T>
Set<T>& mitk::Set< T >::operator= ( const Set< T > &  other ) [inline]

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;
  }
template<class T>
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;
  }
template<class T>
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().

  {
    return this->Remove(this->IndexOf(obj));
  }
template<class T>
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 );
  }

Member Data Documentation

template<class T>
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().

template<class T>
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().

template<class T>
std::vector<T> mitk::Set< T >::m_Objects [protected]
template<class T>
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().


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines