source: src/Bond/BondInfo.cpp@ 97dff0

Last change on this file since 97dff0 was 5aaa43, checked in by Frederik Heber <heber@…>, 12 years ago

FIX: Fixed new copyright line since start of 2013 in CodeChecks test.

  • we must look for either Uni Bonn or myself.
  • added second copyright line since from 1st of Jan 2013 I am not employed by University of Bonn anymore, hence changes to the code are my own copyright.
  • Property mode set to 100644
File size: 2.6 KB
Line 
1/*
2 * Project: MoleCuilder
3 * Description: creates and alters molecular systems
4 * Copyright (C) 2012 University of Bonn. All rights reserved.
5 * Copyright (C) 2013 Frederik Heber. All rights reserved.
6 *
7 *
8 * This file is part of MoleCuilder.
9 *
10 * MoleCuilder is free software: you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation, either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * MoleCuilder is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with MoleCuilder. If not, see <http://www.gnu.org/licenses/>.
22 */
23
24/*
25 * BondInfo.cpp
26 *
27 * Created on: Apr 5, 2012
28 * Author: heber
29 */
30
31
32// include config.h
33#ifdef HAVE_CONFIG_H
34#include <config.h>
35#endif
36
37#include "CodePatterns/MemDebug.hpp"
38
39#include "BondInfo.hpp"
40
41#include <algorithm>
42#include <boost/bind.hpp>
43#include <boost/function.hpp>
44
45#include "Atom/atom.hpp"
46#include "Bond/bond.hpp"
47#include "CodePatterns/Log.hpp"
48#include "Descriptors/AtomIdDescriptor.hpp"
49#include "World.hpp"
50#include "WorldTime.hpp"
51
52BondInfo::BondInfo(const bond::ptr _bond) :
53 leftid(_bond->leftatom->getId()),
54 rightid(_bond->rightatom->getId()),
55 degree(_bond->getDegree())
56{}
57
58bool BondInfo::RecreateBond() const
59{
60 atom * const leftatom = World::getInstance().getAtom(AtomById(leftid));
61 atom * const rightatom = World::getInstance().getAtom(AtomById(rightid));
62 if ((leftatom == NULL) || (rightatom == NULL)) {
63 ELOG(1, "Either of the two atoms " << leftid << " or "
64 << rightid << " does not exists in the world.");
65 return false;
66 }
67 const BondList &leftbonds = leftatom->getListOfBonds();
68 boost::function< bool (const bond::ptr )> predicate =
69 boost::bind(static_cast<bool (bond::*)(const int) const>(&bond::Contains), _1, rightid);
70 if (std::find_if(leftbonds.begin(), leftbonds.end(), predicate) != leftbonds.end())
71 return false;
72
73 const BondList &rightbonds = rightatom->getListOfBonds();
74 if (std::find_if(rightbonds.begin(), rightbonds.end(), predicate) != rightbonds.end())
75 return false;
76
77 // create bond
78 LOG(3, "DEBUG: Re-creating bond " << leftid << "<->" << rightid << ".");
79 bond::ptr const _bond = leftatom->addBond(WorldTime::getTime(), rightatom);
80 _bond->setDegree(degree);
81 return true;
82}
Note: See TracBrowser for help on using the repository browser.