source: src/Graph/BreadthFirstSearchAdd.hpp@ 88bb6b

Last change on this file since 88bb6b was 88c8ec, checked in by Frederik Heber <heber@…>, 13 years ago

REFACTOR: Replaced all "bond *" appearances by bond::ptr.

  • this is preparatory for making bond::ptr a boost::shared_ptr of bond.
  • NOTE: We had to remove a const prefix at four or five places and forward declarations had to be replaced by the true inclusion of bond.hpp at tne or so files. Apart from that, the replacement has been very smooth.
  • Property mode set to 100644
File size: 2.3 KB
Line 
1/*
2 * BreadthFirstSearchAdd.hpp
3 *
4 * Created on: Feb 16, 2011
5 * Author: heber
6 */
7
8#ifndef BREADTHFIRSTSEARCHADD_HPP_
9#define BREADTHFIRSTSEARCHADD_HPP_
10
11// include config.h
12#ifdef HAVE_CONFIG_H
13#include <config.h>
14#endif
15
16#include <deque>
17#include <map>
18
19#include "Bond/bond.hpp"
20#include "Bond/GraphEdge.hpp"
21#include "Fragmentation/HydrogenSaturation_enum.hpp"
22#include "Helpers/defs.hpp"
23#include "types.hpp"
24
25class atom;
26class molecule;
27
28class BreadthFirstSearchAdd
29{
30public:
31 BreadthFirstSearchAdd(atom *&_Root, int _BondOrder, bool _IsAngstroem, const enum HydrogenSaturation _saturation);
32 ~BreadthFirstSearchAdd();
33
34 /** Reinitializes the structure for a new BFS run.
35 *
36 * @param _Root Root atom to start BFS from
37 * @param _BondOrder horizon in bond counts when to stop BFS
38 */
39 void Init(atom *&_Root, int _BondOrder);
40
41 /** Adds atoms up to \a BondCount distance from \a *Root and notes them down in \a AddedAtomList.
42 * Gray vertices are always enqueued in an std::deque<atom *> FIFO queue, the rest is usual BFS with adding vertices found was
43 * white and putting into queue.
44 * \param *Mol Molecule class to add atoms to
45 * \param *Root root vertex for BFS
46 * \param *Bond bond not to look beyond
47 * \param BondOrder maximum distance for vertices to add
48 * \param IsAngstroem lengths are in angstroem or bohrradii
49 */
50 void operator()(molecule *Mol, atom *_Root, bond::ptr Bond, int _BondOrder);
51
52private:
53 void UnvisitedNode(molecule *Mol, atom *&Walker, atom *&OtherAtom, bond::ptr &Binder, bond::ptr &Bond);
54 void VisitedNode(molecule *Mol, atom *&Walker, atom *&OtherAtom, bond::ptr &Binder, bond::ptr &Bond);
55
56 /** initialise vertex as white with no predecessor, empty queue, color Root lightgray.
57 *
58 */
59 void InitNode(atomId_t atom_id);
60
61 std::map<atomId_t, atom *> PredecessorList;
62 std::map<atomId_t, int > ShortestPathList;
63 std::map<atomId_t, enum GraphEdge::Shading> ColorList;
64 std::deque<atom *> BFSStack;
65 int BondOrder;
66 atom *Root;
67
68 bool BackStepping;
69 int CurrentGraphNr;
70 int ComponentNr;
71 std::map<atomId_t, atom *> AddedAtomList;
72 std::map<bond::ptr , bond::ptr > AddedBondList; //!< maps from father bond to son
73
74 //!> whether to treat hydrogen special or not
75 const enum HydrogenSaturation saturation;
76
77 //!> is angstroem our unit of length
78 bool IsAngstroem;
79};
80
81
82#endif /* BREADTHFIRSTSEARCHADD_HPP_ */
Note: See TracBrowser for help on using the repository browser.