New directory tree, with preprocessor/ inside interpretor/.
[Faustine.git] / interpretor / faust-0.9.47mr3 / compiler / parallelize / colorize.cpp
diff --git a/interpretor/faust-0.9.47mr3/compiler/parallelize/colorize.cpp b/interpretor/faust-0.9.47mr3/compiler/parallelize/colorize.cpp
deleted file mode 100644 (file)
index 3935644..0000000
+++ /dev/null
@@ -1,211 +0,0 @@
-/**
- * @file colorize.cpp
- * Uses colors to analyze dependencies among sub expressions
- */
-
-
-#include "colorize.h"
-#include "signals.hh"
-
-using namespace std; 
-
-// static funvtions needed to implement splitDependance
-
-static int allocateColor(Tree exp);                                                    ///< allocate a new unique color for exp
-static void colorize(Tree exp, int color);                                     ///< add color information to exp and all its subtrees
-static void uncolorize(Tree exp);                                                      ///< remove color information
-static void listMultiColoredExp(Tree exp, set<Tree>& lst);     ///< list multicolored subexpressions of exp
-
-
-
-/**
- * Analyze a set of expressions to discover its dependencies that is subexpressions
- * common to at least two of these expressions
- * @param exps set of expressions to analyze
- * @param post resulting set of post expressions
- * @param pre resulting set of pre expressions
- */
-void splitDependance(const set<Tree>& exps, set<Tree>& post, set<Tree>& pre)
-{
-       set<Tree>::const_iterator e;
-       for (e= exps.begin(); e != exps.end(); e++) {
-               colorize(*e, allocateColor(*e));
-       }
-       
-       pre.clear();
-       for (e = exps.begin(); e != exps.end(); e++) {
-               listMultiColoredExp(*e, pre);
-       }
-       
-       post.clear();
-       set_difference(exps.begin(), exps.end(), pre.begin(), pre.end(), inserter(post, post.begin()));
-       
-       for (e = exps.begin(); e != exps.end(); e++) {
-               uncolorize(*e);
-       }
-}
-
-//------------------------------------------- IMPLEMENTATION  (level 1)-----------------------------------------------------
-
-static void addColor(Tree exp, int color);                                     ///< a color to the colors of exp
-static bool hasColor(Tree exp, int color);                                     ///< true if exp is already colored with color
-static int colorsCount(Tree exp);                                                      ///< returns the number of colors of exp
-static void clearColors(Tree exp);                                                     ///< remove the color property of exp
-
-/**
- * Allocate a unique color (an integer) for an expression.
- * by converting its address into an integer
- */
-int allocateColor(Tree exp)
-{
-//     return int(exp); 
-       static map<Tree,int> colorMap;
-       static int nextFreeColor = 1;
-       int& color = colorMap[exp];
-       if (!color)
-               color = nextFreeColor++;
-       return color;
-}
-
-/**
- * Add a color to all the expression tree
- */
-void colorize(Tree exp, int color)
-{
-       if (! hasColor(exp, color)) {
-               addColor(exp, color);
-               vector<Tree> v;
-               int n = getSubSignals(exp, v, false);
-               for (int i=0; i<n; i++) colorize(v[i], color);
-       }       
-}
-
-/**
- * Remove the colors of an expression tree
- */
-void uncolorize(Tree exp)
-{
-       if (colorsCount(exp) > 0) {
-               clearColors(exp);
-               vector<Tree> v;
-               int n = getSubSignals(exp, v, false);
-               for (int i=0; i<n; i++) uncolorize(v[i]);
-       }       
-}
-
-/**
- * Make a set of the multicolored sub-expressions
- */
-void listMultiColoredExp(Tree exp, set<Tree>& lst)
-{
-       assert(colorsCount(exp) > 0);
-       if (colorsCount(exp) > 1) {
-               // we have found a multicolored expression
-               lst.insert(exp);
-       } else {
-               // it is a monocolored expression
-               // we search its subexpressions
-               vector<Tree> v;
-               int n = getSubSignals(exp, v, false);
-               for (int i=0; i<n; i++) {
-                       listMultiColoredExp(v[i], lst);
-               }
-       }       
-}
-
-//------------------------------------------- IMPLEMENTATION  (level 2)-----------------------------------------------------
-
-Tree COLORPROPERTY = tree(symbol("ColorProperty"));
-
-/**
- * set the color-set property of sig
- * @param sig the signal we want to type
- * @param t the type of the signal
- */
-void setColorProperty(Tree sig, set<int>* colorset)
-{
-       setProperty(sig, COLORPROPERTY, tree((void*)colorset));
-}
-
-
-/**
- * retrieve the color-set property of sig
- * @param sig the signal we want to know the color-set property
- */
-set<int>* getColorProperty(Tree sig)
-{
-       Tree tt;
-       if (!getProperty(sig, COLORPROPERTY, tt)) {
-               return 0;
-       } else {
-               return (set<int>*)tree2ptr(tt);
-       }
-}
-
-
-
-
-/**
- * Add a color to the colorset of exp. Create an empty
- * coloset if needed.
- * @param sig the signal we want to color
- * @param color the color used
- */
-void addColor(Tree exp, int color)
-{
-       set<int>* cset = getColorProperty(exp);
-       if (cset == 0) {
-               cset = new set<int>();
-               setColorProperty(exp, cset);
-       }
-       cset->insert(color);
-}
-
-
-/**
- * Test if exp as color in its colorset
- * @param sig the signal we want to test
- * @param color the color to test
- * @return true if color is member of the colorset of sig
- */
-bool hasColor(Tree exp, int color)
-{
-       set<int>* cset = getColorProperty(exp);
-       if (cset==0) {
-               return false;
-       } else {
-               return cset->find(color) != cset->end();
-       }
-}
-
-
-/**
- * Count the number of colors of exp
- * @param exp the expression we want to count the colors
- * @return the number of elements in the color set or 0
- */
-static int colorsCount(Tree exp)
-{
-       set<int>* cset = getColorProperty(exp);
-       if (cset==0) {
-               return 0;
-       } else {
-               return cset->size();
-       }
-}
-
-
-/**
- * Count the number of colors of exp
- * @param exp the expression we want to count the colors
- * @return the number of elements in the color set or 0
- */
-static void clearColors(Tree exp)
-{
-       set<int>* cset = getColorProperty(exp);
-       if (cset != 0) {
-               cset->clear();
-       }
-}
-
-