/* * Project: MoleCuilder * Description: creates and alters molecular systems * Copyright (C) 2012 University of Bonn. All rights reserved. * * * This file is part of MoleCuilder. * * MoleCuilder 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. * * MoleCuilder 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 MoleCuilder. If not, see . */ /* * AtomIdSet.cpp * * Created on: Feb 21, 2012 * Author: heber */ // include config.h #ifdef HAVE_CONFIG_H #include #endif #include "CodePatterns/MemDebug.hpp" #include "AtomIdSet.hpp" #include #include "Atom/atom.hpp" #include "Descriptors/AtomIdDescriptor.hpp" #include "World.hpp" atom * FromIdToAtom::operator()(atomId_t id) const { return World::getInstance().getAtom(AtomById(id)); } /** Constructor for class AtomIdSet. * * @param _atoms atoms to put into this set */ AtomIdSet::AtomIdSet(const atomIdSet &_atoms) : atoms(_atoms) {} /** Constructor for class AtomIdSet. * * @param _atoms atoms to put into this set */ AtomIdSet::AtomIdSet(const std::vector &_atoms) { BOOST_FOREACH(const atom * _atom, _atoms) { insert(_atom->getId()); } } /** Constructor for class AtomIdSet. * */ AtomIdSet::AtomIdSet() {} /** Destructor for class AtomIdSet. * */ AtomIdSet::~AtomIdSet() {} /** Returns iterator to first atim via a transform_iterator. * * @return iterator to first atom in this set */ AtomIdSet::iterator AtomIdSet::begin(){ return iterator(atoms.begin(), FromIdToAtom()); } /** Returns constant iterator to first atim via a transform_iterator. * * @return const iterator to first atom in this set */ AtomIdSet::const_iterator AtomIdSet::begin() const{ return const_iterator(atoms.begin(), FromIdToAtom()); } /** Returns iterator to one beyond last atom via a transform_iterator. * * @return iterator to one beyond last atom in this set */ AtomIdSet::iterator AtomIdSet::end(){ return iterator(atoms.end(), FromIdToAtom()); } /** Returns constant iterator to one beyond last atom via a transform_iterator. * * @return const iterator to one beyond last atom in this set */ AtomIdSet::const_iterator AtomIdSet::end() const{ return const_iterator(atoms.end(), FromIdToAtom()); } /** Returns true if this set is empty. * * @return true - set is empty, false - there is at least one atom */ bool AtomIdSet::empty() const { return (atoms.empty()); } /** Returns the number of members of this set. * * @return number of members in set */ size_t AtomIdSet::size() const { // set has unique members, hence just return its size return atoms.size(); } /** Predicate whether given atomic id is contained. * * @param id id to check * @return true - is contained, false - is not */ bool AtomIdSet::contains(const atomId_t &id) const { return (atoms.find(id) != atoms.end()); } /** Predicate whether given atom is contained. * * @param key atom to check * @return true - is contained, false - is not */ bool AtomIdSet::contains(const atom * const key) const { return contains(key->getId()); } /** Returns the iterator to the atom \a *key. * * @param key atom to find * @return iterator to atom if found, to end() - else */ AtomIdSet::const_iterator AtomIdSet::find(const atom * const key) const { return find(key->getId()); } /** Returns the iterator to the atom \a *key. * * @param id atomic id to find * @return iterator to atom if found, to end() - else */ AtomIdSet::const_iterator AtomIdSet::find(const atomId_t &id) const { return const_iterator(atoms.find(id), FromIdToAtom()); } /** Inserts a given atom into the set. * * @param key atom to insert * @return pair of iterator and bool that states whether element is already present (true) or not (false) */ std::pair AtomIdSet::insert(const atom * const key) { std::pair iter = atoms.insert(key->getId()); std::pair retiter (std::make_pair(iterator(iter.first), iter.second)); return retiter; } /** Inserts a given atom into the set. * * @param id atomic id to insert * @return pair of iterator and bool that states whether element is already present (true) or not (false) */ std::pair AtomIdSet::insert(const atomId_t &id) { std::pair iter = atoms.insert(id); std::pair retiter (std::make_pair(iterator(iter.first), iter.second)); return retiter; } AtomIdSet::const_iterator AtomIdSet::erase(AtomIdSet::const_iterator &loc) { const_iterator iter = loc; ++iter; atom * const _atom = const_cast(*loc); atoms.erase( _atom->getId() ); return iter; } /** Erase an atom from the list. * * @param *key key to atom in list * @return iterator to just after removed item (compliant with standard) */ AtomIdSet::const_iterator AtomIdSet::erase(const atom * const key) { const_iterator iter = find(key); if (iter != end()){ ++iter; atoms.erase( key->getId() ); } return iter; } /** Erase an atom from the list. * * @param id atomic id atom in list to erase * @return iterator to just after removed item (compliant with standard) */ AtomIdSet::const_iterator AtomIdSet::erase(const atomId_t &id) { atomIdSet::const_iterator iter = atoms.find(id); if (iter != atoms.end()){ ++iter; atoms.erase( id ); } return iterator(iter, FromIdToAtom()); }