1 /************************************************************************
2  ************************************************************************
3     FAUST compiler
4     Copyright (C) 2003-2018 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 #ifndef _SIGTYPERULES_
23 #define _SIGTYPERULES_
24 
25 #include "signals.hh"
26 #include "sigtype.hh"
27 
28 extern bool gVectorSwitch;
29 
30 /** \file sigtyperules.hh
31  * API to the typing system of signals
32  *
33  * Two functions are provided :
34  *
35  * \li void typeAnnotation(Tree term)       : annotates a signal term and its subterms with type information
36  * \li Type getCertifiedSigType(Tree term)  : return the type of a previously annotated signal term
37  *
38  * TypeAnnotation must be called first to annotate a signal or a list of signals, before being able to
39  * call getCertifiedType on any subterms. GetCertifiedType will produce an error if a term was not
40  * previously annotated.
41  *
42  **/
43 
44 /**
45  * Fully annotate every subtree of term with type information.
46  * @param sig the signal term tree to annotate
47  * @param causality when true check causality issues
48  */
49 void typeAnnotation(Tree sig, bool causality);
50 
51 /**
52  *	Return the type of a previously annotated signal term
53  */
54 ::Type getCertifiedSigType(Tree term);
55 
56 /**
57  *	print annotation statistics
58  */
59 void annotationStatistics();
60 
61 /**
62  * convert a constant signal into a double using its bounds (not very safe)
63  * @param sig the signal to be converted
64  * @return the mean of its biggest and smallest value
65  */
66 double constSig2double(Tree sig);
67 
68 #endif
69