+++ /dev/null
-/************************************************************************
- ************************************************************************
- FAUST compiler
- Copyright (C) 2003-2004 GRAME, Centre National de Creation Musicale
- ---------------------------------------------------------------------
- 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 __SCHEMA__
-#define __SCHEMA__
-
-
-#include "device.h"
-#include <vector>
-#include <string>
-#include <set>
-
-using namespace std;
-
-const double dWire = 8; ///< distance between two wires
-//const double dLetter = 6; ///< width of a letter
-const double dLetter = 4.3; ///< width of a letter
-const double dHorz = 4; ///< marge horizontale
-const double dVert = 4; ///< marge verticale
-
-
-struct point
-{
- double x;
- double y;
-
- point(double u, double v) : x(u), y(v) {}
- point(const point& p) : x(p.x), y(p.y) {}
-
- bool operator<(const point& p) const {
- if (x < p.x) return true;
- else if (x > p.x) return false;
- else if (y < p.y) return true;
- else return false;
- }
-};
-
-struct trait
-{
- point start;
- point end;
- bool hasRealInput;
- bool hasRealOutput;
-
- trait(const point& p1, const point& p2) : start(p1), end(p2) {}
- void draw(device& dev) const { dev.trait(start.x, start.y, end.x, end.y); }
-
- bool operator<(const trait& t) const {
- if (start < t.start) return true;
- else if (t.start < start) return false;
- else if (end < t.end) return true;
- else return false;
- }
-};
-
-struct collector
-{
- set<point> fOutputs; // collect real outputs
- set<point> fInputs; // collect real inputs
- set<trait> fTraits; // collect traits to draw
- set<trait> fWithInput; // collect traits with a real input
- set<trait> fWithOutput; // collect traits with a real output
-
- void addOutput(const point& p) { fOutputs.insert(p); }
- void addInput(const point& p) { fInputs.insert(p); }
- void addTrait(const trait& t) { fTraits.insert(t); }
- void computeVisibleTraits();
- bool isVisible(const trait& t);
- void draw(device& dev);
-};
-
-enum { kLeftRight=1, kRightLeft=-1 };
-
-
-
-/**
- * An abstract block diagram schema
- */
-class schema
-{
- private:
- const unsigned int fInputs;
- const unsigned int fOutputs;
- const double fWidth;
- const double fHeight;
-
- // fields only defined after place() is called
- bool fPlaced; ///< false until place() is called
- double fX;
- double fY;
- int fOrientation;
-
- public:
-
- schema(unsigned int inputs, unsigned int outputs, double width, double height)
- : fInputs(inputs),
- fOutputs(outputs),
- fWidth(width),
- fHeight(height),
- fPlaced(false),
- fX(0),
- fY(0),
- fOrientation(0)
- {}
- virtual ~schema() {}
-
- // constant fields
- double width() const { return fWidth; }
- double height() const { return fHeight; }
- unsigned int inputs() const { return fInputs; }
- unsigned int outputs() const { return fOutputs; }
-
- // starts and end placement
- void beginPlace (double x, double y, int orientation)
- { fX = x; fY = y; fOrientation = orientation; }
- void endPlace () { fPlaced = true; }
-
- // fields available after placement
- bool placed() const { return fPlaced; }
- double x() const { return fX; }
- double y() const { return fY; }
- int orientation() const { return fOrientation; }
-
-
- // abstract interface for subclasses
- virtual void place(double x, double y, int orientation) = 0;
- virtual void draw(device& dev) = 0;
- virtual void collectTraits(collector& c) = 0;
- virtual point inputPoint(unsigned int i) const = 0;
- virtual point outputPoint(unsigned int i)const = 0;
-};
-
-// various functions to create schemas
-
-schema* makeBlockSchema (unsigned int inputs,
- unsigned int outputs,
- const string& name,
- const string& color,
- const string& link);
-
-schema* makeCableSchema (unsigned int n=1);
-schema* makeInverterSchema (const string& color);
-schema* makeCutSchema ();
-schema* makeEnlargedSchema (schema* s, double width);
-schema* makeParSchema (schema* s1, schema* s2);
-schema* makeSeqSchema (schema* s1, schema* s2);
-schema* makeMergeSchema (schema* s1, schema* s2);
-schema* makeSplitSchema (schema* s1, schema* s2);
-schema* makeRecSchema (schema* s1, schema* s2);
-schema* makeTopSchema (schema* s1, double margin, const string& text, const string& link);
-schema* makeDecorateSchema (schema* s1, double margin, const string& text);
-
-
-
-
-
-
-
-
-
-#endif
-
-