5 #ifndef BALL_STRUCTURE_SIMPLEMOLECULARGRAPH_H 6 #define BALL_STRUCTURE_SIMPLEMOLECULARGRAPH_H 8 #ifndef BALL_KERNEL_ATOM_H 12 #ifndef BALL_KERNEL_BOND_H 16 #ifndef BALL_STRUCTURE_MOLECULE_H 20 #ifndef BALL_STRUCTURE_FRAGMENT_H 31 template <
typename Node,
typename Edge>
34 template <
typename Node,
typename Edge>
40 template <
typename Node,
typename Edge>
54 typedef typename std::list<EdgeItem<Node, Edge>*>::iterator
Iterator;
56 typedef typename std::list<EdgeItem<Node, Edge>*>::const_iterator
ConstIterator;
66 void setData(
const Node& data) ;
72 ConstIterator
begin()
const ;
74 ConstIterator
end()
const ;
92 template <
typename Node,
typename Edge>
98 typedef typename std::list<NodeItem<Node, Edge>*>::iterator
Iterator;
99 typedef typename std::list<NodeItem<Node, Edge>*>::const_iterator
ConstIterator;
102 : bond_(0), source_(0), target_(0)
106 EdgeItem(
const Bond& bond, NodeItemType* source, NodeItemType* target);
110 const NodeItemType&
getSource()
const {
return *source_;}
111 const NodeItemType&
getTarget()
const {
return *target_;}
130 template <
typename Node,
typename Edge>
132 : bond_(const_cast<
Bond*>(&bond))
136 template <
typename Node,
typename Edge>
138 : bond_(const_cast<
Bond*>(&bond)),
144 template <
typename Node,
typename Edge>
158 bool newNode(
const Atom& atom) ;
159 bool newEdge(
const Bond& bond) ;
161 bool deleteNode(NodeItemType& node);
162 bool deleteEdge(EdgeItemType& edge);
164 bool deleteNode(
const Atom& atom);
165 bool deleteEdge(
const Bond& bond);
168 NodeConstIterator
beginNode()
const {
return nodes_.begin(); }
170 EdgeConstIterator
beginEdge()
const {
return edges_.begin(); }
171 NodeIterator
endNode() {
return nodes_.end(); }
172 NodeConstIterator
endNode()
const {
return nodes_.end(); }
173 EdgeIterator
endEdge() {
return edges_.end(); }
174 EdgeConstIterator
endEdge()
const {
return edges_.end(); }
176 bool has(
const Atom& atom)
const {
return atom_to_node_.has(const_cast<Atom*>(&atom)); }
177 bool has(
const Bond& bond)
const {
return bond_to_edge_.has(const_cast<Bond*>(&bond)); }
186 Size getNumberOfNodes()
const ;
190 Size getNumberOfEdges()
const ;
204 template <
typename Node,
typename Edge>
214 template <
typename Node,
typename Edge>
228 for (ai = molecule.beginAtom(); +ai; ++ai)
230 for (bi = ai->beginBond(); +bi; ++bi)
232 if (bi->getFirstAtom() == &*ai)
240 template <
typename Node,
typename Edge>
244 Atom* atom_ptr =
const_cast<Atom*
>(&atom);
257 template <
typename Node,
typename Edge>
282 bond_to_edge_.insert(std::pair<Bond*, EdgeItemType*>(const_cast<Bond*>(&bond), &
edges_.back()));
289 template <
typename Node,
typename Edge>
290 std::ostream& operator << (std::ostream& os, const TSimpleMolecularGraph<Node, Edge>& G)
292 os <<
"Nodes:" << std::endl;
296 for (; node != G.
endNode(); ++node)
298 os << count++ <<
": " << node->getAtom()->getFullName() <<
" [" << node->getDegree() <<
"] '" << node->getAtom() <<
"'" << std::endl;
301 os <<
"Edges:" << std::endl;
305 for (; edge != G.
endEdge(); ++edge)
307 os << count++ <<
": " << edge->getSource().getAtom() <<
"-" << edge->getTarget().getAtom() <<
" '" << edge->getBond() <<
"'" << std::endl;
313 template <
typename Node,
typename Edge>
324 template <
typename Node,
typename Edge>
335 template <
typename Node,
typename Edge>
339 if (node_it ==
nodes_.end())
349 for (; edge != node.
end(); ++edge)
362 template <
typename Node,
typename Edge>
365 typename std::list<EdgeItemType>::iterator edge_it = std::find(
edges_.begin(),
edges_.end(), edge);
366 if (edge_it ==
edges_.end())
379 template <
typename Node,
typename Edge>
386 template <
typename Node,
typename Edge>
393 template <
typename Node,
typename Edge>
400 template <
typename Node,
typename Edge>
408 template <
typename Node,
typename Edge>
416 template <
typename Node,
typename Edge>
423 template <
typename Node,
typename Edge>
430 template <
typename Node,
typename Edge>
437 template <
typename Node,
typename Edge>
444 template <
typename Node,
typename Edge>
451 template <
typename Node,
typename Edge>
458 template <
typename Node,
typename Edge>
465 template <
typename Node,
typename Edge>
472 template <
typename Node,
typename Edge>
479 template <
typename Node,
typename Edge>
490 template <
typename Node,
typename Edge>
495 return nodes_.size();
498 template <
typename Node,
typename Edge>
503 return edges_.size();
509 #endif // BALL_STRUCTURE_MOLECULARGRAPH_H
NodeConstIterator endNode() const
bool has(const Atom &atom) const
const NodeItemType & getTarget() const
const Node & getData() const
NodeItem< Node, Edge > NodeItemType
NodeItemType & getSource()
const EdgeItemType & getEdge(Position index) const
bool deleteNode(NodeItemType &node)
EdgeItemType & getEdge(Position index)
bool operator!=(const NodeItem &item) const
void setData(const Edge &data)
void setData(const Node &data)
std::list< EdgeItemType * > adjacent_edges_
EdgeItem< Node, Edge > EdgeItemType
void deleteEdge_(EdgeItemType *item)
NodeItem< Node, Edge > NodeItemType
std::list< NodeItem< Node, Edge > * >::const_iterator ConstIterator
HashMap< Bond *, EdgeItemType * > bond_to_edge_
std::list< EdgeItemType > edges_
EdgeConstIterator endEdge() const
const Atom * getSecondAtom() const
Return a pointer to the second atom.
const NodeItemType & getNode(Position index) const
std::list< NodeItem< Node, Edge > * >::iterator Iterator
EdgeItem< Node, Edge > EdgeItemType
NodeItemType & getNode(Position index)
const Atom * getFirstAtom() const
Return a pointer to the first atom.
bool has(const Bond &bond) const
const Bond * getBond() const
HashMap< Atom *, NodeItemType * > atom_to_node_
std::list< EdgeItem< Node, Edge > * >::const_iterator ConstIterator
NodeItemType & getTarget()
NodeConstIterator beginNode() const
bool deleteEdge(EdgeItemType &edge)
const Atom * getAtom() const
std::list< NodeItemType > nodes_
EdgeItem< Node, Edge > EdgeItemType
Size getNumberOfNodes() const
bool operator==(const NodeItem &item) const
std::list< NodeItemType >::iterator NodeIterator
-*- Mode: C++; tab-width: 2; -*-
std::list< NodeItemType >::const_iterator NodeConstIterator
std::list< EdgeItemType >::iterator EdgeIterator
NodeItem< Node, Edge > NodeItemType
EdgeConstIterator beginEdge() const
bool newEdge(const Bond &bond)
TSimpleMolecularGraph< Index, Index > SimpleMolecularGraph
Size getNumberOfEdges() const
std::list< EdgeItem< Node, Edge > * >::iterator Iterator
std::list< EdgeItemType >::const_iterator EdgeConstIterator
HashMap class based on the STL map (containing serveral convenience functions)
bool newNode(const Atom &atom)
const NodeItemType & getSource() const