From fe1985c3e3cfbaa73c8986710f97afc1cfbe076b Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sun, 3 Apr 2016 18:27:32 +0200 Subject: [PATCH] add channel count difference operator. --- libs/ardour/ardour/chan_count.h | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/libs/ardour/ardour/chan_count.h b/libs/ardour/ardour/chan_count.h index ba4a2f17bb..b5699b6743 100644 --- a/libs/ardour/ardour/chan_count.h +++ b/libs/ardour/ardour/chan_count.h @@ -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];