FAUST compiler  0.9.9.6b8
parSchema.cpp
Go to the documentation of this file.
1 /************************************************************************
2  ************************************************************************
3  FAUST compiler
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.
10 
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.
15 
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  ************************************************************************/
21 
22 #include "parSchema.h"
23 #include <assert.h>
24 #include <iostream>
25 
26 using namespace std;
27 
29 {
30  // make sure s1 and s2 have same width
31  return new parSchema( makeEnlargedSchema(s1, s2->width()),
32  makeEnlargedSchema(s2, s1->width()) );
33 }
34 
35 
37  : schema( s1->inputs()+s2->inputs(),
38  s1->outputs()+s2->outputs(),
39  s1->width(),
40  s1->height() + s2->height() ),
41  fSchema1(s1),
42  fSchema2(s2),
43  fInputFrontier(s1->inputs()),
44  fOutputFrontier(s1->outputs())
45 {
46  assert (s1->width() == s2->width());
47 }
48 
49 
50 void parSchema::place(double ox, double oy, int orientation)
51 {
52  beginPlace(ox, oy, orientation);
53 
54  if (orientation == kLeftRight) {
55  fSchema1->place(ox, oy, orientation);
57  } else {
58  fSchema2->place(ox, oy, orientation);
60  }
61 
62  endPlace();
63 }
64 
65 point parSchema::inputPoint(unsigned int i) const
66 {
67  return (i < fInputFrontier)
68  ? fSchema1->inputPoint(i)
70 }
71 
72 point parSchema::outputPoint(unsigned int i) const
73 {
74  return (i < fOutputFrontier)
75  ? fSchema1->outputPoint(i)
77 }
78 
80 {
81  fSchema1->draw(dev);
82  fSchema2->draw(dev);
83 }
84 
86 {
89 }
void endPlace()
Definition: schema.h:134
virtual void place(double ox, double oy, int orientation)
Definition: parSchema.cpp:50
virtual point inputPoint(unsigned int i) const =0
void beginPlace(double x, double y, int orientation)
Definition: schema.h:132
virtual point outputPoint(unsigned int i) const
Definition: parSchema.cpp:72
virtual void draw(device &dev)=0
place two schemi in parallel
Definition: parSchema.h:33
schema * fSchema2
Definition: parSchema.h:36
schema * makeParSchema(schema *s1, schema *s2)
Definition: parSchema.cpp:28
unsigned int fOutputFrontier
Definition: parSchema.h:38
unsigned int fInputFrontier
Definition: parSchema.h:37
virtual void collectTraits(collector &c)=0
schema * fSchema1
Definition: parSchema.h:35
virtual void draw(device &dev)
Definition: parSchema.cpp:79
parSchema(schema *s1, schema *s2)
Definition: parSchema.cpp:36
double width() const
Definition: schema.h:126
Definition: device.h:32
int orientation() const
Definition: schema.h:140
virtual void collectTraits(collector &c)
Definition: parSchema.cpp:85
virtual void place(double x, double y, int orientation)=0
Definition: schema.h:40
virtual point outputPoint(unsigned int i) const =0
An abstract block diagram schema.
Definition: schema.h:97
double height() const
Definition: schema.h:127
virtual point inputPoint(unsigned int i) const
Definition: parSchema.cpp:65
schema * makeEnlargedSchema(schema *s, double width)
Returns an enlarged schema, but only if really needed that is if the requiered width is greater that ...