Support LV2 log trace messages
[ardour.git] / libs / ardour / ardour / chan_count.h
index ba4a2f17bbe2ea0a6be05738e55fd76ba83d6f57..b5699b6743b34743b0e1a84f849baa4f6a482861 100644 (file)
@@ -147,6 +147,19 @@ public:
                return ret;
        }
 
+       /** underflow safe subtraction */
+       ChanCount operator-(const ChanCount& other) const {
+               ChanCount ret;
+               for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) {
+                       if (get(*t) < other.get(*t)) {
+                               ret.set(*t, 0);
+                       } else {
+                               ret.set(*t, get(*t) - other.get(*t));
+                       }
+               }
+               return ret;
+       }
+
        ChanCount operator*(const unsigned int factor) const {
                ChanCount ret;
                for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) {
@@ -155,6 +168,18 @@ public:
                return ret;
        }
 
+       /** underflow safe subtraction */
+       ChanCount& operator-=(const ChanCount& other) {
+               for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) {
+                       if (_counts[*t] < other._counts[*t]) {
+                               _counts[*t] = 0;
+                       } else {
+                               _counts[*t] -= other._counts[*t];
+                       }
+               }
+               return *this;
+       }
+
        ChanCount& operator+=(const ChanCount& other) {
                for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) {
                        _counts[*t] += other._counts[*t];