indigoX
fwd_declares.hpp
Go to the documentation of this file.
1 // This file contains forward declarations of all classes used in indigox as
2 // well as their shared_ptr and weak_ptr counterparts, as needed.
3 #ifndef INDIGOX_UTILS_FWD_DECLARES_HPP
4 #define INDIGOX_UTILS_FWD_DECLARES_HPP
5 #include <cstdint>
6 #include <memory>
7 
8 // Serialisation related stuff, using the cereal library
9 namespace cereal {
10  class access;
11  class PortableBinaryInputArchive;
12  class PortableBinaryOutputArchive;
13  class JSONInputArchive;
14  class JSONOutputArchive;
15  template <class T> class construct;
16 } // namespace cereal
17 
18 #define INDIGOX_GENERIC_PIMPL_CLASS_DEFAULTS(class_name) \
19  class_name() = default; \
20  class_name(const class_name &) = default; \
21  class_name(class_name &&) = default; \
22  class_name &operator=(const class_name &) = default; \
23  class_name &operator=(class_name &&) = default; \
24  ~class_name() = default
25 
26 #define INDIGOX_GENERIC_PIMPL_CLASS_OPERATORS(class_name, short_name) \
27  bool operator==(const class_name &short_name) const; \
28  bool operator<(const class_name &short_name) const; \
29  bool operator>(const class_name &short_name) const; \
30  inline bool operator!=(const class_name &short_name) const { \
31  return !(operator==(short_name)); \
32  } \
33  inline bool operator<=(const class_name &short_name) const { \
34  return !(operator>(short_name)); \
35  } \
36  inline bool operator>=(const class_name &short_name) const { \
37  return !(operator<(short_name)); \
38  } \
39  inline operator bool() const { return bool(m_data); } \
40  friend std::ostream &operator<<(std::ostream &os, \
41  const class_name &short_name)
42 
43 namespace indigox {
44 
45  using State = uint32_t;
46 
47  // Molecule related
48  class Molecule;
49  class Atom;
50  class Bond;
51  class Angle;
52  class Dihedral;
53  class Element;
54  class PeriodicTable;
55  class Residue;
56 
57  // CherryPicker Related
58  class ParamMolecule;
59  class ParamAtom;
60  class ParamBond;
61  class ParamAngle;
62  class ParamDihedral;
63 
64  // Forcefield related
65  class Forcefield;
66  class FFAtom;
67  class FFBond;
68  class FFAngle;
69  class FFDihedral;
70 
71  // Athenaeum related
72  class Fragment;
73  using sFragment = std::shared_ptr<Fragment>;
74  using wFragment = std::weak_ptr<Fragment>;
75 
76  class Athenaeum;
77  using sAthenaeum = std::shared_ptr<Athenaeum>;
78  using wAthenaeum = std::weak_ptr<Athenaeum>;
79 
80  namespace algorithm {
81  struct access;
82 
83  class CherryPicker;
84 
85  class IXElectronAssigner;
86  using ElectronAssigner = std::shared_ptr<IXElectronAssigner>;
87  using _ElectronAssigner = std::weak_ptr<IXElectronAssigner>;
88  } // namespace algorithm
89 
90  namespace graph {
91  // Base Graph
92  template <class V, class E, class S, class D, class VP, class EP>
93  class BaseGraph;
94  struct Directed;
95  struct Undirected;
96  struct GraphLabel;
97 
98  // AssignmentGraph
99  class IXAssignmentGraph;
100  using AssignmentGraph = std::shared_ptr<IXAssignmentGraph>;
101  using _AssignmentGraph = std::weak_ptr<IXAssignmentGraph>;
102 
103  class IXAGVertex;
104  using AGVertex = std::shared_ptr<IXAGVertex>;
105  using _AGVertex = std::weak_ptr<IXAGVertex>;
106 
107  // MolecularGraph
108  class MolecularGraph;
109  class MGVertex;
110  class MGEdge;
111 
112  // CondensedMolecularGraph
114  class CMGVertex;
115  class CMGEdge;
116  } // namespace graph
117 
118  namespace test {
119  struct TestForcefield;
120  struct TestFFAtom;
121  struct TestFFBond;
122  struct TestFFAngle;
123  struct TestFFDihedral;
124 
125  struct TestMolecule;
126  struct TestAtom;
127  struct TestBond;
128  struct TestAngle;
129  struct TestDihedral;
130  struct TestElement;
131  struct TestPeriodicTable;
132 
133  struct TestAssignmentGraph;
134  struct TestCondensedMolecularGraph;
135  struct TestCondensedVertex;
136  struct TestCondensedEdge;
137  struct TestMolecularGraph;
138  struct TestMolecularVertex;
139  struct TestMolecularEdge;
140  } // namespace test
141 } // namespace indigox
142 
143 #endif
std::shared_ptr< Fragment > sFragment
Definition: fwd_declares.hpp:73
Definition: forcefield.hpp:18
Definition: forcefield.hpp:58
Definition: bond.hpp:11
Definition: atom.hpp:13
std::weak_ptr< Fragment > wFragment
Definition: fwd_declares.hpp:74
Athenaeum class for fragment storage in CherryPicker algorithm.
Definition: athenaeum.hpp:76
Definition: condensed.hpp:131
Definition: residue.hpp:11
Class for the vertices of an IXCondensedMolecularGraph.
Definition: condensed.hpp:21
Class for the edges of a IXMolecularGraph.
Definition: molecular.hpp:55
Definition: forcefield.hpp:234
std::weak_ptr< Athenaeum > wAthenaeum
Definition: fwd_declares.hpp:78
std::shared_ptr< Athenaeum > sAthenaeum
Definition: fwd_declares.hpp:77
Class containing a graph representation of a molecule.
Definition: molecular.hpp:95
Namespace for all graph related functionality.
Definition: access.hpp:7
Class for the vertices of a IXMolecularGraph.
Definition: molecular.hpp:20
std::shared_ptr< IXElectronAssigner > ElectronAssigner
Definition: fwd_declares.hpp:86
Definition: angle.hpp:12
std::shared_ptr< IXAGVertex > AGVertex
Definition: fwd_declares.hpp:104
Definition: common.hpp:14
std::weak_ptr< IXAGVertex > _AGVertex
Definition: fwd_declares.hpp:105
uint32_t State
Definition: fwd_declares.hpp:45
Definition: dihedral.hpp:14
std::shared_ptr< IXAssignmentGraph > AssignmentGraph
Definition: fwd_declares.hpp:100
Definition: molecule.hpp:15
Read only class for storing elemental information.
Definition: periodictable.hpp:28
Definition: parameterised.hpp:196
Definition: forcefield.hpp:333
Class for the vertices of an IXAssignmentGraph.
Definition: assignment.hpp:19
Definition: parameterised.hpp:139
Fragment class for CherryPicker parameterisation algorithm.
Definition: athenaeum.hpp:17
Definition: parameterised.hpp:15
std::weak_ptr< IXElectronAssigner > _ElectronAssigner
Definition: fwd_declares.hpp:87
Definition: parameterised.hpp:255
Definition: parameterised.hpp:82
Definition: forcefield.hpp:151
Singleton class for storing and access elemental information.
Definition: periodictable.hpp:145
Class for the edges of an IXCondensedMolecularGraph.
Definition: condensed.hpp:92
std::weak_ptr< IXAssignmentGraph > _AssignmentGraph
Definition: fwd_declares.hpp:101