8 #ifndef CT_RXNPATH_GROUP
9 #define CT_RXNPATH_GROUP
23 Group() : m_sign(-999) { }
24 Group(
size_t n) : m_sign(0) {
28 m_comp(elnumbers), m_sign(0) {
31 Group(
const std::vector<size_t>& elnumbers) :
32 m_comp(elnumbers.size()), m_sign(0) {
33 for (
size_t i = 0; i < elnumbers.size(); i++) {
34 m_comp[i] = int(elnumbers[i]);
39 m_comp(g.m_comp), m_sign(g.m_sign) { }
53 for (
size_t m = 0; m < m_comp.size(); m++) {
54 m_comp[m] -= other.m_comp[m];
58 void operator+=(
const Group& other) {
59 for (
size_t m = 0; m < m_comp.size(); m++) {
60 m_comp[m] += other.m_comp[m];
64 void operator*=(
int a) {
65 for (
size_t m = 0; m < m_comp.size(); m++) {
70 bool operator==(
const Group& other)
const {
71 for (
size_t m = 0; m < m_comp.size(); m++) {
72 if (m_comp[m] != other.m_comp[m]) {
78 friend Group operator-(
const Group& g1,
const Group& g2) {
83 friend Group operator+(
const Group& g1,
const Group& g2) {
100 return (m_sign != -999);
102 bool operator!()
const {
103 return (m_sign == -999);
108 size_t size()
const {
109 return m_comp.size();
115 for (
size_t m = 0; m < m_comp.size(); m++) {
116 sum += std::abs(m_comp[m]);
122 if (m_comp.empty()) {
128 std::ostream&
fmt(std::ostream& s,
const std::vector<std::string>& esymbols)
const;
130 friend std::ostream& operator<<(std::ostream& s,
Class Group is an internal class used by class ReactionPath.
bool valid() const
True if all non-zero atom numbers have the same sign.
int nAtoms() const
Number of atoms in the group (>= 0)
void operator-=(const Group &other)
Decrement the atom numbers by those in group 'other'.
int nAtoms(size_t m) const
Number of atoms of element m (positive or negative)
This file contains definitions of terms that are used in internal routines and are unlikely to need m...
std::vector< int > vector_int
Vector of ints.
Namespace for the Cantera kernel.
Versions 6.2.0 and 6.2.1 of fmtlib do not include this define before they include windows....