8 #ifndef INCLUDE_MOLASSEMBLER_OUTER_GRAPH_H
9 #define INCLUDE_MOLASSEMBLER_OUTER_GRAPH_H
11 #include "boost/optional/optional_fwd.hpp"
23 using ElementTypeCollection = std::vector<ElementType>;
24 class BondOrderCollection;
27 namespace Molassembler {
74 template<
typename T,
bool isVertexInitialized>
78 std::is_same<T, AtomIndex>::value || std::is_same<T, BondIndex>::value,
79 "You may not instantiate this type for other Ts than AtomIndex or BondIndex"
82 using iterator_category = std::forward_iterator_tag;
83 using difference_type = std::ptrdiff_t;
120 template<
bool Dependent = isVertexInitialized, std::enable_if_t<!Dependent,
int>...>
135 template<
bool Dependent = isVertexInitialized, std::enable_if_t<Dependent,
int>...>
139 InnerBasedIterator& operator ++ ();
141 InnerBasedIterator operator ++ (
int);
143 value_type operator * ()
const;
146 bool operator == (
const InnerBasedIterator& other)
const;
148 bool operator != (
const InnerBasedIterator& other)
const;
152 std::unique_ptr<Impl> pImpl_;
192 std::vector<
AtomIndex> atomsOfElement(Utils::ElementType e) const;
202 Utils::BondOrderCollection bondOrders() const;
223 bool canRemove(const
BondIndex& edge) const;
231 const
Cycles& cycles() const;
238 std::
string dumpGraphviz() const;
243 Utils::ElementTypeCollection elementCollection() const;
248 Utils::ElementType elementType(
AtomIndex a) const;
266 boost::optional<std::vector<
AtomIndex>> modularIsomorphism(
281 std::vector<AtomIndex>
282 > splitAlongBridge(
BondIndex bridge) const;
288 bool operator == (const
Graph& other) const;
289 inline
bool operator != (const
Graph& other)
const {
290 return !(*
this == other);
346 std::unique_ptr<PrivateGraph> innerPtr_;
Defines basic types widely shared across the project.
Represents the connectivity of atoms of a molecule.
Definition: Graph.h:57
Templated iterator facade based on PrivateGraph to provide iterative access to atom indices and edge ...
Definition: Graph.h:75
AtomEnvironmentComponents
For bitmasks grouping components of immediate atom environments.
Definition: Types.h:103
Wrapper class to make working with RDL in C++ more pleasant.
Definition: Cycles.h:44
Homogeneous pair of iterators with begin and end member fns.
Definition: IteratorRange.h:26
std::size_t AtomIndex
Unsigned integer atom index type. Used to refer to particular atoms.
Definition: Types.h:51
Library internal graph class wrapping BGL types.
Definition: PrivateGraph.h:24
BondType
Discrete bond type numeration.
Definition: Types.h:26
Type used to refer to particular bonds. Orders first < second.
Definition: Types.h:54