/********************************************************************** IDList - Organized List of Primitives. Copyright (C) 2007 Donald Ephraim Curtis This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include #include #include namespace Avogadro { class IDListPrivate { public: IDListPrivate() : size(0) {}; int size; QVector< QList > vector; }; IDList::IDList() : d(new IDListPrivate) { d->vector.resize(Primitive::LastType); } IDList::IDList(const IDList &other) : d(new IDListPrivate) { IDListPrivate *e = other.d; d->size = e->size; d->vector = e->vector; } IDList::IDList(const QList &other) : d(new IDListPrivate) { d->vector.resize(Primitive::LastType); foreach(Primitive *primitive, other) { append(primitive); } } IDList::IDList(const PrimitiveList &other) : d(new IDListPrivate) { d->vector.resize(Primitive::LastType); foreach(Primitive *primitive, other) { append(primitive); } } IDList &IDList::operator=(const IDList &other) { IDListPrivate *e = other.d; d->size = e->size; d->vector = e->vector; return *this; } IDList &IDList::operator=(const QList &other) { clear(); foreach(Primitive *primitive, other) { append(primitive); } return *this; } IDList &IDList::operator=(const PrimitiveList &other) { clear(); foreach(Primitive *primitive, other) { append(primitive); } return *this; } IDList::~IDList() { delete d; } QList IDList::subList(Primitive::Type type) const { if(type > Primitive::LastType) { return QList(); } return(d->vector[type]); } bool IDList::contains(const Primitive *p) const { return d->vector[p->type()].contains(p->id()); } void IDList::append(Primitive *p) { d->vector[p->type()].append(p->id()); d->size++; } void IDList::removeAll(Primitive *p) { d->vector[p->type()].removeAll(p->id()); d->size--; } int IDList::size() const { return d->size; } bool IDList::isEmpty() const { return !size(); } int IDList::count() const { return size(); } int IDList::count(Primitive::Type type) const { if(type > Primitive::LastType) { return 0; } return d->vector[type].size(); } void IDList::clear() { for( int i=0; ivector.size(); i++ ) { d->vector[i].clear(); } d->size = 0; } }