// Version: $Id: 50b03aac8985c04920b0c92c7eba5500acd88477 $ // // // Commentary: // // // Change Log: // // // Code: #pragma once // /////////////////////////////////////////////////////////////////// // dtkMetaContainerSequentialHandlerTemplate::iterator // /////////////////////////////////////////////////////////////////// template < typename T > inline dtkMetaContainerSequentialHandlerTemplate::iterator::iterator(const Iterator& iterator) : it(iterator) { } template < typename T > inline dtkMetaContainerSequentialHandler::iterator *dtkMetaContainerSequentialHandlerTemplate::iterator::clone(void) const { return new iterator(it); } template < typename T > inline void dtkMetaContainerSequentialHandlerTemplate::iterator::copy(const dtkMetaContainerSequentialHandler::iterator& o) { it = static_cast(o).it; } template < typename T > inline bool dtkMetaContainerSequentialHandlerTemplate::iterator::equal(const dtkMetaContainerSequentialHandler::iterator& o) const { return it == static_cast(o).it; } template < typename T > inline void dtkMetaContainerSequentialHandlerTemplate::iterator::advance(void) { ++it; } template < typename T > inline void dtkMetaContainerSequentialHandlerTemplate::iterator::moveForward(qlonglong step) { std::advance(it, step); } template < typename T > inline void dtkMetaContainerSequentialHandlerTemplate::iterator::moveBackward(qlonglong step) { std::advance(it, -step); } template < typename T > inline void *dtkMetaContainerSequentialHandlerTemplate::iterator::value(void) const { return &(*it); } template < typename T > inline QVariant dtkMetaContainerSequentialHandlerTemplate::iterator::variant(void) const { return QVariant(qMetaTypeId(), &(*it), QTypeInfo::isPointer); } template inline void dtkMetaContainerSequentialHandlerTemplate::iterator::assign(const void *t) { dtkMetaContainerSequentialIteratorHelper::assign(*it, *static_cast(t)); } template inline void dtkMetaContainerSequentialHandlerTemplate::iterator::addAssign(const void *t) { dtkMetaContainerSequentialIteratorHelper::addAssign(*it, *static_cast(t)); } template inline void dtkMetaContainerSequentialHandlerTemplate::iterator::subAssign(const void *t) { dtkMetaContainerSequentialIteratorHelper::subAssign(*it, *static_cast(t)); } template inline void dtkMetaContainerSequentialHandlerTemplate::iterator::mulAssign(const void *t) { dtkMetaContainerSequentialIteratorHelper::mulAssign(*it, *static_cast(t)); } template inline void dtkMetaContainerSequentialHandlerTemplate::iterator::divAssign(const void *t) { dtkMetaContainerSequentialIteratorHelper::divAssign(*it, *static_cast(t)); } template inline bool dtkMetaContainerSequentialHandlerTemplate::iterator::equalToValue(const void *t) const { return (*it == *static_cast(t)); } // /////////////////////////////////////////////////////////////////// // dtkMetaContainerSequentialHandlerTemplate::const_iterator // /////////////////////////////////////////////////////////////////// template inline dtkMetaContainerSequentialHandlerTemplate::const_iterator::const_iterator(const ConstIterator& iterator) : it(iterator) { } template inline dtkMetaContainerSequentialHandler::const_iterator *dtkMetaContainerSequentialHandlerTemplate::const_iterator::clone(void) const { return new const_iterator(it); } template inline void dtkMetaContainerSequentialHandlerTemplate::const_iterator::copy(const dtkMetaContainerSequentialHandler::const_iterator& o) { it = static_cast(o).it; } template inline bool dtkMetaContainerSequentialHandlerTemplate::const_iterator::equal(const dtkMetaContainerSequentialHandler::const_iterator& o) const { return it == static_cast(o).it; } template inline void dtkMetaContainerSequentialHandlerTemplate::const_iterator::advance(void) { ++it; } template inline void dtkMetaContainerSequentialHandlerTemplate::const_iterator::moveForward(qlonglong step) { std::advance(it, step); } template inline void dtkMetaContainerSequentialHandlerTemplate::const_iterator::moveBackward(qlonglong step) { std::advance(it, -step); } template < typename T > inline const void *dtkMetaContainerSequentialHandlerTemplate::const_iterator::value(void) const { return &(*it); } template inline QVariant dtkMetaContainerSequentialHandlerTemplate::const_iterator::variant(void) const { return QVariant(qMetaTypeId(), &(*it), QTypeInfo::isPointer); } // /////////////////////////////////////////////////////////////////// // dtkMetaContainerSequentialHandlerTemplate // /////////////////////////////////////////////////////////////////// template inline dtkMetaContainerSequentialHandler::iterator *dtkMetaContainerSequentialHandlerTemplate::begin(void) { return new iterator(m_container->begin()); } template inline dtkMetaContainerSequentialHandler::const_iterator *dtkMetaContainerSequentialHandlerTemplate::cbegin(void) const { return new const_iterator(m_container->cbegin()); } template inline dtkMetaContainerSequentialHandler::iterator *dtkMetaContainerSequentialHandlerTemplate::end(void) { return new iterator(m_container->end()); } template inline dtkMetaContainerSequentialHandler::const_iterator *dtkMetaContainerSequentialHandlerTemplate::cend(void) const { return new const_iterator(m_container->cend()); } template inline dtkMetaContainerSequentialHandlerTemplate::dtkMetaContainerSequentialHandlerTemplate(T *c) : m_container(c) { } template inline dtkMetaContainerSequentialHandlerTemplate::~dtkMetaContainerSequentialHandlerTemplate(void) { m_container = NULL; } template inline QString dtkMetaContainerSequentialHandlerTemplate::description(void) const { QString desc; QDebug dbg(&desc); dbg.nospace() << QMetaType::typeName(qMetaTypeId()); dbg.nospace() << ", size = "; dbg.nospace() << this->size(); dbg.nospace() << ", ("; for (qlonglong i = 0; i < this->size(); ++i) { if (i) dbg << ", "; dbg << *static_cast(this->at(i)); } dbg << ')'; return desc; } template inline bool dtkMetaContainerSequentialHandlerTemplate::hasBiDirectionalIterator(void) const { return dtkMetaContainerSequentialHandlerHelper::hasBidirectionalIterator(); } template inline bool dtkMetaContainerSequentialHandlerTemplate::hasRandomAccessIterator(void) const { return dtkMetaContainerSequentialHandlerHelper::hasRandomAccesIterator(); } template inline bool dtkMetaContainerSequentialHandlerTemplate::empty(void) const { return dtkMetaContainerSequentialHandlerHelper::empty(m_container); } template inline qlonglong dtkMetaContainerSequentialHandlerTemplate::size(void) const { return dtkMetaContainerSequentialHandlerHelper::size(m_container); } template inline void dtkMetaContainerSequentialHandlerTemplate::clear(void) { dtkMetaContainerSequentialHandlerHelper::clear(m_container); } template inline void dtkMetaContainerSequentialHandlerTemplate::reserve(qlonglong size) { dtkMetaContainerSequentialHandlerHelper::reserve(m_container, size); } template inline void dtkMetaContainerSequentialHandlerTemplate::resize(qlonglong size) { dtkMetaContainerSequentialHandlerHelper::resize(m_container, size); } template inline void dtkMetaContainerSequentialHandlerTemplate::append(const void *t) { dtkMetaContainerSequentialHandlerHelper::insert(m_container, this->size(), *(static_cast(t))); } template inline void dtkMetaContainerSequentialHandlerTemplate::prepend(const void *t) { dtkMetaContainerSequentialHandlerHelper::insert(m_container, 0, *(static_cast(t))); } template inline void dtkMetaContainerSequentialHandlerTemplate::insert(qlonglong idx, const void *t) { dtkMetaContainerSequentialHandlerHelper::insert(m_container, idx, *(static_cast(t))); } template inline void dtkMetaContainerSequentialHandlerTemplate::setAt(qlonglong idx, const void *t) { dtkMetaContainerSequentialHandlerHelper::setAt(m_container, idx, *(static_cast(t))); } template inline void dtkMetaContainerSequentialHandlerTemplate::removeAt(qlonglong idx) { dtkMetaContainerSequentialHandlerHelper::removeAt(m_container, idx); } template inline const void *dtkMetaContainerSequentialHandlerTemplate::at(qlonglong idx) const { return dtkMetaContainerSequentialHandlerHelper::at(m_container, idx); } template inline void *dtkMetaContainerSequentialHandlerTemplate::at(qlonglong idx) { return dtkMetaContainerSequentialHandlerHelper::at(m_container, idx); } template inline dtkMetaContainerSequentialHandler::iterator *dtkMetaContainerSequentialHandlerTemplate::iteratorAt(qlonglong idx, dtkMetaContainerSequentialHandler::iterator *it) { dtkMetaContainerSequentialHandlerHelper::iteratorAt(m_container, idx, static_cast::iterator *>(it)->it); return it; } template inline QVariant& dtkMetaContainerSequentialHandlerTemplate::variantAt(qlonglong idx, QVariant& var) { return dtkMetaContainerSequentialHandlerHelper::variantAt(m_container, idx, var); } // /////////////////////////////////////////////////////////////////// // dtkMetaContainerSequentialHandlerHelper // /////////////////////////////////////////////////////////////////// template inline bool dtkMetaContainerSequentialHandlerHelper::empty(const T *c) { return c->empty(); } template inline qlonglong dtkMetaContainerSequentialHandlerHelper::size(const T *c) { return c->size(); } template inline void dtkMetaContainerSequentialHandlerHelper::clear(T *c) { c->clear(); } template template inline typename std::enable_if::value>::type dtkMetaContainerSequentialHandlerHelper::reserve(T *c, qlonglong size) { c->reserve(size); } template template inline typename std::enable_if < !dtkMetaContainerIsReservable::value >::type dtkMetaContainerSequentialHandlerHelper::reserve(T *, qlonglong) { } template template inline typename std::enable_if::value>::type dtkMetaContainerSequentialHandlerHelper::resize(T *c, qlonglong size) { c->resize(size); } template template inline typename std::enable_if < !dtkMetaContainerIsResizable::value >::type dtkMetaContainerSequentialHandlerHelper::resize(T *, qlonglong) { } template inline void dtkMetaContainerSequentialHandlerHelper::insert(T *c, qlonglong idx, const ValueType& t) { typename T::iterator it(c->begin()); std::advance(it, idx); c->insert(it, t); } template inline void dtkMetaContainerSequentialHandlerHelper::setAt(T *c, qlonglong idx, const ValueType& t) { typename T::iterator it(c->begin()); std::advance(it, idx); *it = t; } template inline void dtkMetaContainerSequentialHandlerHelper::removeAt(T *c, qlonglong idx) { typename T::iterator it(c->begin()); std::advance(it, idx); c->erase(it); } template inline const typename dtkMetaContainerSequentialHandlerHelper::ValueType *dtkMetaContainerSequentialHandlerHelper::at(const T *c, qlonglong idx) { typename T::const_iterator it(c->begin()); std::advance(it, idx); return &(*it); } template inline typename dtkMetaContainerSequentialHandlerHelper::ValueType *dtkMetaContainerSequentialHandlerHelper::at(T *c, qlonglong idx) { typename T::iterator it(c->begin()); std::advance(it, idx); return &(*it); } template inline void dtkMetaContainerSequentialHandlerHelper::iteratorAt(T *c, qlonglong idx, Iterator& it) { it = c->begin(); std::advance(it, idx); } template inline QVariant& dtkMetaContainerSequentialHandlerHelper::variantAt(const T *c, qlonglong idx, QVariant& var) { typename T::const_iterator it(c->cbegin()); std::advance(it, idx); var.setValue(*it); return var; } // /////////////////////////////////////////////////////////////////// // dtkMetaContainerSequentialIteratorHelper // /////////////////////////////////////////////////////////////////// template template inline typename std::enable_if::value>::type dtkMetaContainerSequentialIteratorHelper::assign(T& lhs, const T& rhs) { lhs = rhs; } template template inline typename std::enable_if < !dtkMetaTypeIsAssignable::value >::type dtkMetaContainerSequentialIteratorHelper::assign(T&, const T&) { } template template inline typename std::enable_if::value>::type dtkMetaContainerSequentialIteratorHelper::addAssign(T& lhs, const T& rhs) { lhs += rhs; } template template inline typename std::enable_if < !dtkMetaTypeIsAddAssignable::value >::type dtkMetaContainerSequentialIteratorHelper::addAssign(T&, const T&) { } template template inline typename std::enable_if::value>::type dtkMetaContainerSequentialIteratorHelper::subAssign(T& lhs, const T& rhs) { lhs -= rhs; } template template inline typename std::enable_if < !dtkMetaTypeIsSubAssignable::value >::type dtkMetaContainerSequentialIteratorHelper::subAssign(T&, const T&) { } template template inline typename std::enable_if::value>::type dtkMetaContainerSequentialIteratorHelper::mulAssign(T& lhs, const T& rhs) { lhs *= rhs; } template template inline typename std::enable_if < !dtkMetaTypeIsMulAssignable::value >::type dtkMetaContainerSequentialIteratorHelper::mulAssign(T&, const T&) { } template template inline typename std::enable_if::value>::type dtkMetaContainerSequentialIteratorHelper::divAssign(T& lhs, const T& rhs) { lhs /= rhs; } template template inline typename std::enable_if < !dtkMetaTypeIsDivAssignable::value >::type dtkMetaContainerSequentialIteratorHelper::divAssign(T&, const T&) { } // ///////////////////////////////////////////////////////////////// // dtkMetaContainerSequentialConvertFunctor // ///////////////////////////////////////////////////////////////// template inline dtkMetaContainerSequentialHandler *dtkMetaContainerSequentialConvertFunctor::operator () (From *f) const { return new dtkMetaContainerSequentialHandlerTemplate(f); } // /////////////////////////////////////////////////////////////////// // // /////////////////////////////////////////////////////////////////// template inline bool dtkMetaType::registerContainerPointerConverter(int id) { return dtkMetaContainerSequentialRegisterConverter::record(id); } // /////////////////////////////////////////////////////////////////// // // /////////////////////////////////////////////////////////////////// template inline bool dtkContainerSequentialValueTypeIsMetaType::record(int id) { const int toId = qMetaTypeId(); if (!QMetaType::hasRegisteredConverterFunction(id, toId)) { dtkMetaContainerSequentialConvertFunctor o; return QMetaType::registerConverter >(o); } return true; } // // dtkMetaContainerSequentialHandler.tpp ends here