#ifndef KDOM_DOMList_H
#define KDOM_DOMList_H
#if SVG_SUPPORT
#include "DeprecatedPtrList.h"
#include "Shared.h"
namespace WebCore
{
template<class T>
class DOMList : public Shared<DOMList<T> >
{
public:
DOMList() : Shared<DOMList<T> >() { m_impl.setAutoDelete(false); }
DOMList(const DOMList &other) { *this = other; }
virtual ~DOMList() { clear(); }
unsigned int numberOfItems() const { return m_impl.count(); }
virtual void clear()
{
for(unsigned int i = 0; i < numberOfItems(); i++)
getItem(i)->deref();
m_impl.clear();
}
T *initialize(T *newItem)
{
clear();
return appendItem(newItem);
}
T *getFirst() const { return m_impl.getFirst(); }
T *getLast() const { return m_impl.getLast(); }
T *getItem(unsigned int index) { return m_impl.at(index); }
const T *getItem(unsigned int index) const { return const_cast<DOMList<T> *>(this)->m_impl.at(index); }
virtual T *insertItemBefore(T *newItem, unsigned int index)
{
m_impl.insert(index, newItem);
return newItem;
}
virtual T *replaceItem(T *newItem, unsigned int index)
{
m_impl.take(index);
m_impl.insert(index, newItem);
return newItem;
}
virtual T *removeItem(unsigned int index)
{
return m_impl.take(index);
}
virtual void removeItem(const T *item)
{
m_impl.remove(item);
}
virtual T *appendItem(T *newItem)
{
m_impl.append(newItem);
return newItem;
}
virtual bool contains(const T *item)
{
if(m_impl.findRef(item) != -1)
return true;
return false;
}
private:
DeprecatedPtrList<T> m_impl;
};
};
#endif // SVG_SUPPORT
#endif