ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-4/src/openbabel/obiter.hpp
Revision: 2440
Committed: Wed Nov 16 19:42:11 2005 UTC (18 years, 8 months ago) by tim
File size: 5213 byte(s)
Log Message:
adding openbabel

File Contents

# User Rev Content
1 tim 2440 /**********************************************************************
2     obiter.h - STL-style iterators for Open Babel.
3    
4     Copyright (C) 1998-2001 by OpenEye Scientific Software, Inc.
5     Some portions Copyright (C) 2001-2005 by Geoffrey R. Hutchison
6    
7     This file is part of the Open Babel project.
8     For more information, see <http://openbabel.sourceforge.net/>
9    
10     This program 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 version 2 of the License.
13    
14     This program is distributed in the hope that it will be useful,
15     but WITHOUT ANY WARRANTY; without even the implied warranty of
16     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17     GNU General Public License for more details.
18     ***********************************************************************/
19    
20     #ifndef OB_OBITER_H
21     #define OB_OBITER_H
22    
23     #include <vector>
24    
25     namespace OpenBabel
26     {
27    
28     class OBMol;
29     class OBAtom;
30     class OBBond;
31     class OBResidue;
32    
33     //! \brief Iterate over all atoms in an OBMol
34     class OBAPI OBMolAtomIter {
35     std::vector<OBNodeBase*>::iterator _i;
36     OBMol *_parent;
37     OBAtom *_ptr;
38     public:
39    
40     OBMolAtomIter() { _parent = NULL; _ptr = NULL; }
41     OBMolAtomIter(OBMol *mol);
42     OBMolAtomIter(OBMol &mol);
43     OBMolAtomIter(const OBMolAtomIter &ai);
44    
45     OBMolAtomIter& operator=(const OBMolAtomIter &ai);
46     operator bool() const { return _ptr != NULL; }
47     OBMolAtomIter operator++(int);
48     OBAtom* operator->() const { return _ptr; }
49     OBAtom& operator*() const { return *_ptr; }
50     };
51    
52     //! \brief Iterate over all bonds in an OBMol
53     class OBAPI OBMolBondIter {
54     std::vector<OBEdgeBase*>::iterator _i;
55     OBMol *_parent;
56     OBBond *_ptr;
57     public:
58    
59     OBMolBondIter() { _parent = NULL; _ptr = NULL; }
60     OBMolBondIter(OBMol *mol);
61     OBMolBondIter(OBMol &mol);
62     OBMolBondIter(const OBMolBondIter &bi);
63    
64     OBMolBondIter& operator=(const OBMolBondIter &bi);
65     operator bool() const { return _ptr != NULL; }
66     OBMolBondIter operator++(int);
67     OBBond* operator->() const { return _ptr; }
68     OBBond& operator*() const { return *_ptr; }
69     };
70    
71     //! \brief Iterate over all neighboring atoms to an OBAtom
72     class OBAPI OBAtomAtomIter {
73     std::vector<OBEdgeBase*>::iterator _i;
74     OBAtom *_parent;
75     OBAtom *_ptr;
76     public:
77    
78     OBAtomAtomIter() { _parent = NULL; _ptr = NULL; }
79     OBAtomAtomIter(OBAtom *atm);
80     OBAtomAtomIter(OBAtom &atm);
81     OBAtomAtomIter(const OBAtomAtomIter &ai);
82    
83     OBAtomAtomIter& operator=(const OBAtomAtomIter &ai);
84     operator bool() const { return _ptr != NULL; }
85     OBAtomAtomIter operator++(int);
86     OBAtom* operator->() const { return _ptr; }
87     OBAtom& operator*() const { return *_ptr;}
88     };
89    
90     //! \brief Iterate over all bonds on an OBAtom
91     class OBAPI OBAtomBondIter {
92     std::vector<OBEdgeBase*>::iterator _i;
93     OBAtom *_parent;
94     OBBond *_ptr;
95     public:
96    
97     OBAtomBondIter() { _parent = NULL; _ptr = NULL; }
98     OBAtomBondIter(OBAtom *atm);
99     OBAtomBondIter(OBAtom &atm);
100     OBAtomBondIter(const OBAtomBondIter &bi);
101    
102     OBAtomBondIter& operator=(const OBAtomBondIter &bi);
103     operator bool() const { return _ptr != NULL; }
104     OBAtomBondIter operator++(int);
105     OBBond* operator->() const { return _ptr; }
106     OBBond& operator*() const { return *_ptr;}
107     };
108    
109     //! \brief Iterate over all residues in an OBMol
110     class OBAPI OBResidueIter {
111     std::vector<OBResidue*>::iterator _i;
112     OBResidue *_ptr;
113     OBMol *_parent;
114     public:
115    
116     OBResidueIter() { _parent = NULL; _ptr = NULL; }
117     OBResidueIter(OBMol *mol);
118     OBResidueIter(OBMol &mol);
119     OBResidueIter(const OBResidueIter &ri);
120    
121     OBResidueIter& operator=(const OBResidueIter &ri);
122     operator bool() const { return _ptr != NULL; }
123     OBResidueIter operator++(int);
124     OBResidue* operator->() const{ return _ptr; }
125     OBResidue& operator*() const { return *_ptr;}
126     };
127    
128     //! \brief Iterate over all atoms in an OBResidue
129     class OBAPI OBResidueAtomIter {
130     std::vector<OBAtom*>::iterator _i;
131     OBResidue *_parent;
132     OBAtom *_ptr;
133     public:
134    
135     OBResidueAtomIter() { _parent = NULL; _ptr = NULL; }
136     OBResidueAtomIter(OBResidue *res);
137     OBResidueAtomIter(OBResidue &res);
138     OBResidueAtomIter(const OBResidueAtomIter &ri);
139    
140     OBResidueAtomIter &operator = (const OBResidueAtomIter &ri);
141     operator bool() const { return _ptr != NULL; }
142     OBResidueAtomIter operator++ (int);
143     OBAtom *operator->() const { return _ptr; }
144     OBAtom &operator*() const { return *_ptr;}
145     };
146    
147     #define FOR_ATOMS_OF_MOL(a,m) for( OBMolAtomIter a(m); a; a++ )
148     #define FOR_BONDS_OF_MOL(b,m) for( OBMolBondIter b(m); b; b++ )
149     #define FOR_NBORS_OF_ATOM(a,p) for( OBAtomAtomIter a(p); a; a++ )
150     #define FOR_BONDS_OF_ATOM(b,p) for( OBAtomBondIter b(p); b; b++ )
151     #define FOR_RESIDUES_OF_MOL(r,m) for( OBResidueIter r(m); r; r++ )
152     #define FOR_ATOMS_OF_RESIDUE(a,r) for( OBResidueAtomIter a(r); a; a++ )
153    
154     } // namespace OpenBabel
155     #endif // OB_OBITER_H
156    
157     //! \file obiter.h
158     //! \brief STL-style iterators for Open Babel.