248d00c3268d123c793e904a5cd4920e3c8f9506
1 /************************************************************************
2 ************************************************************************
4 Copyright (C) 2003-2004 GRAME, Centre National de Creation Musicale
5 ---------------------------------------------------------------------
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 ************************************************************************
20 ************************************************************************/
29 void collector::computeVisibleTraits()
35 for (set
<trait
>::iterator p
= fTraits
.begin(); p
!= fTraits
.end(); p
++) {
36 if (fWithInput
.count(*p
) == 0) { // not connected to a real output
37 if (fOutputs
.count(p
->start
) > 0) {
38 fWithInput
.insert(*p
); // the cable is connected to a real output
39 fOutputs
.insert(p
->end
); // end become a real output too
43 if (fWithOutput
.count(*p
) == 0) { // not connected to a real input
44 if (fInputs
.count(p
->end
) > 0) {
45 fWithOutput
.insert(*p
); // the cable is connected to a real input
46 fInputs
.insert(p
->start
); // start become a real input too
54 bool collector::isVisible(const trait
& t
)
56 return fWithInput
.count(t
) && fWithOutput
.count(t
);
59 void collector::draw(device
& dev
)
61 computeVisibleTraits();
62 for (set
<trait
>::iterator p
= fTraits
.begin(); p
!= fTraits
.end(); p
++) {
63 if (isVisible(*p
)) p
->draw(dev
);