sigorderrules.cpp File Reference

#include <stdio.h>
#include "sigtype.hh"
#include "sigprint.hh"
#include "signals.hh"
#include "prim2.hh"
#include "tlib.hh"
#include "xtended.hh"
Include dependency graph for sigorderrules.cpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Defines

#define O   getSigOrder

Functions

static int infereSigOrder (Tree sig)
 Infere the order of a term according to its components.
int getSigOrder (Tree sig)
 retrieve the order annotation (between 0 and 3) of a signal.

Variables

Tree ORDERPROP = tree(symbol("OrderProp"))

Define Documentation

#define O   getSigOrder

Definition at line 75 of file sigorderrules.cpp.

Referenced by infereSigOrder().


Function Documentation

int getSigOrder ( Tree  sig  ) 

retrieve the order annotation (between 0 and 3) of a signal.

(compute the order the first time). Orders have the following meanings 0 : numbers 1 : constants 2 : user interface values 3 : audio values

Parameters:
sig the signal we want to know the order
Returns:
the order number

Definition at line 62 of file sigorderrules.cpp.

References getProperty(), infereSigOrder(), setProperty(), tree(), and tree2int().

Referenced by mterm::complexity(), mterm::normalizedTree(), aterm::normalizedTree(), and normalizeFixedDelayTerm().

00063 {
00064     Tree tt;
00065     if (getProperty(sig, ORDERPROP, tt)) { 
00066         return tree2int(tt); 
00067     } else {
00068         int order = infereSigOrder(sig);
00069         setProperty(sig, ORDERPROP, tree(order));
00070         return order;
00071     }
00072 }   

Here is the call graph for this function:

Here is the caller graph for this function:

static int infereSigOrder ( Tree  sig  )  [static]

Infere the order of a term according to its components.

Parameters:
sig the signal to analyze
Returns:
the order of sig

Definition at line 84 of file sigorderrules.cpp.

References CTree::arity(), CTree::branch(), getUserData(), hd(), xtended::infereSigOrder(), isList(), isNil(), isProj(), isRec(), isRef(), isSigAttach(), isSigBinOp(), isSigButton(), isSigCheckbox(), isSigDelay1(), isSigDocAccessTbl(), isSigDocConstantTbl(), isSigDocWriteTbl(), isSigFConst(), isSigFFun(), isSigFixDelay(), isSigFloatCast(), isSigFVar(), isSigGen(), isSigHBargraph(), isSigHSlider(), isSigInput(), isSigInt(), isSigIntCast(), isSigNumEntry(), isSigOutput(), isSigPrefix(), isSigRDTbl(), isSigReal(), isSigSelect2(), isSigSelect3(), isSigTable(), isSigVBargraph(), isSigVSlider(), isSigWRTbl(), max(), name(), O, print(), and tl().

Referenced by getSigOrder().

00085 {
00086     int         i;
00087     double      r;
00088     Tree        sel, s1, s2, s3, s4, ff, id, ls, l, x, y, var, body, type, name, file;
00089 
00090     xtended* xt = (xtended*) getUserData(sig);
00091     // primitive elements
00092     if (xt)                                 
00093     {
00094         //return 3;
00095         vector<int> args;
00096         for (int i=0; i<sig->arity(); i++) { args.push_back( O(sig->branch(i)) ); }
00097         return xt->infereSigOrder(args);
00098     }
00099 
00100     
00101     else if (isSigInt(sig, &i))                 return 0;
00102         
00103     else if (isSigReal(sig, &r))                return 0;
00104         
00105     else if (isSigInput(sig, &i))               return 3;
00106         
00107     else if (isSigOutput(sig, &i, s1))          return 3;
00108         
00109     else if (isSigDelay1(sig, s1))              return 3;
00110     
00111     else if (isSigPrefix(sig, s1, s2))          return 3;
00112     
00113     else if (isSigFixDelay(sig, s1, s2))        return 3;
00114     
00115     else if (isSigBinOp(sig, &i, s1, s2))       return max(O(s1),O(s2));
00116     
00117     else if (isSigIntCast(sig, s1))             return O(s1);
00118         
00119     else if (isSigFloatCast(sig, s1))           return O(s1);
00120 
00121     else if (isSigFFun(sig,ff,ls) && isNil(ls)) return 1;
00122 
00123     else if (isSigFFun(sig, ff, ls))            return max(1,O(ls));
00124 
00125     else if (isSigFConst(sig,type,name,file))   return 1;
00126 
00127     else if (isSigFVar(sig,type,name,file))     return 2;
00128         
00129     else if (isSigButton(sig))                  return 2;
00130     
00131     else if (isSigCheckbox(sig))                return 2;
00132     
00133     else if (isSigVSlider(sig))                 return 2;
00134      
00135     else if (isSigHSlider(sig))                 return 2;
00136     
00137     else if (isSigNumEntry(sig))                return 2;
00138         
00139     else if (isSigHBargraph(sig, l, x, y, s1))  return O(s1);
00140         
00141     else if (isSigVBargraph(sig, l, x, y, s1))  return O(s1);
00142         
00143     else if (isSigAttach(sig, s1, s2))          return O(s1);
00144                 
00145     else if (isRec(sig, var, body))             exit(1); //return 3;    // not supposed to appen.
00146                 
00147     else if (isRef(sig, var))                   exit(1); //return 3;  // not supposed to appen. 
00148 
00149     else if (isProj(sig, &i, s1))               return 3;
00150                                                         
00151     else if (isSigTable(sig, id, s1, s2))       return 3;
00152         
00153     else if (isSigWRTbl(sig, id, s1, s2, s3))   return 3; 
00154             
00155     else if (isSigRDTbl(sig, s1, s2))           return 3;
00156 
00157     else if (isSigDocConstantTbl(sig, s1, s2))  return 3;
00158 
00159     else if (isSigDocWriteTbl(sig,s1,s2,s3,s4)) return 3;
00160 
00161     else if (isSigDocAccessTbl(sig,s1,s2))         return 3;
00162 
00163     else if (isSigGen(sig, s1))                 return 3;
00164         
00165     else if (isSigSelect2(sig,sel,s1,s2))       return 3;
00166         
00167     else if (isSigSelect3(sig,sel,s1,s2,s3))    return 3;   
00168     
00169     else if (isList(sig)) 
00170     {
00171         int r = 0;
00172         while (isList(sig)) { int x = O(hd(sig)); if (x > r) r = x; sig = tl(sig); }
00173         return r;
00174     }
00175     
00176     // unrecognized signal here
00177     fprintf(stderr, "ERROR infering signal order : unrecognized signal  : "); print(sig, stderr); fprintf(stderr, "\n");
00178     exit(1);
00179     return 0;
00180 }

Here is the call graph for this function:

Here is the caller graph for this function:


Variable Documentation

Tree ORDERPROP = tree(symbol("OrderProp"))

Definition at line 48 of file sigorderrules.cpp.

Generated on Wed Apr 28 23:45:59 2010 for FAUST compiler by  doxygen 1.6.3