+ ChanCount operator+(const ChanCount& other) const {
+ ChanCount ret;
+ for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) {
+ ret.set(*t, get(*t) + other.get(*t));
+ }
+ return ret;
+ }
+
+ ChanCount& operator+=(const ChanCount& other) {
+ for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) {
+ _counts[*t] += other._counts[*t];
+ }
+ return *this;
+ }
+
+ static ChanCount min(const ChanCount& a, const ChanCount& b) {
+ ChanCount ret;
+ for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) {
+ ret.set(*t, std::min(a.get(*t), b.get(*t)));
+ }
+ return ret;
+ }
+
+ static ChanCount max(const ChanCount& a, const ChanCount& b) {
+ ChanCount ret;
+ for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) {
+ ret.set(*t, std::max(a.get(*t), b.get(*t)));
+ }
+ return ret;
+ }
+
+ XMLNode* state(const std::string& name) const;
+