/* Copyright (C) 2009 Paul Davis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef __ardour_gtk_port_matrix_types_h__ #define __ardour_gtk_port_matrix_types_h__ #include "ardour/bundle.h" struct PortMatrixBundleChannel { PortMatrixBundleChannel () : channel (0) {} PortMatrixBundleChannel (boost::shared_ptr b, uint32_t c) : bundle (b), channel (c) {} bool operator== (PortMatrixBundleChannel const& other) const { return bundle == other.bundle && channel == other.channel; } bool operator!= (PortMatrixBundleChannel const& other) const { return bundle != other.bundle || channel != other.channel; } uint32_t nchannels (ARDOUR::BundleList const& bl) const { uint32_t n = 0; ARDOUR::BundleList::const_iterator i = bl.begin(); while (i != bl.end() && *i != bundle) { n += (*i)->nchannels (); ++i; } n += channel; return n; } boost::shared_ptr bundle; uint32_t channel; }; struct PortMatrixNode { PortMatrixNode () {} PortMatrixNode (PortMatrixBundleChannel r, PortMatrixBundleChannel c) : row (r), column (c) {} bool operator== (PortMatrixNode const& other) const { return row == other.row && column == other.column; } bool operator!= (PortMatrixNode const& other) const { return row != other.row || column != other.column; } PortMatrixBundleChannel row; PortMatrixBundleChannel column; }; #endif