Mercurial > codeOptimizer
diff DepGraph.py @ 0:28b636105ed6
Working version of codeOptimizer.
-Still needs to implement more finegrained control per file basis.
-CXXFLAGS are hardcoded.
| author | Tom Fredrik Blenning Klaussen <bfg@blenning.no> |
|---|---|
| date | Sat, 15 Sep 2012 20:34:39 +0200 |
| parents | |
| children | a1224150b8f6 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DepGraph.py Sat Sep 15 20:34:39 2012 +0200 @@ -0,0 +1,101 @@ +import numpy + +from types import * + +class DepGraph: + def __init__(self): + self.deps = [] + self.values = [] + + def add(self, value): + if value in self.values: + raise ValueError + self.values.append(value) + + + def addDependency(self, src, dst): + if not type(dst) is ListType: + dst = [ dst ] + + vl = len(self.values) + dl = len(self.deps) + si = self.values.index(src) + + + if dl != vl: + full = [] + for i in range(0, vl): + full.append(False) + + exp = [] + for i in range(dl, vl): + exp.append(False) + self.deps.append(full[:]) + + for i in range(0, dl): + self.deps[i].append(exp[:]) + + for d in dst: + if d in self.values: + di = self.values.index(d) + self.deps[si][di] = True + + + @staticmethod + def directedGraphInternal(deps): + dl = len(deps) + myVals = [] + for i in range(dl): + if not max(deps[i]): + myVals.append(i) + + for i in myVals: + for j in range(dl): + deps[j][i] = False + + retVal = myVals + + if len(deps) != len(myVals): + subVals = self.directedGraphInternal(deps) + for val in myVals: + if val in subVals: + ind = subVals.index(val) + del subVals[ind] + + if subVals: + retVal.extend(subVals) + + return retVal + + @staticmethod + def printableDepgraph(deps): + res='' + for i in range(len(deps)): + if res: + res += '\n' + s = '' + for j in range(len(deps[i])): + if deps[i][j]: + s += '1' + else: + s += '0' + res += s + return res + + def directedGraph(self): + deps = self.deps[:][:] + vals = self.directedGraphInternal(deps) + retVal = [] + for i in vals: + retVal.append(self.values[i]) + return retVal + + + def toplevelDependencies(self): + dl = len(self.deps) + retVal = [] + for i in range(dl): + if not max(self.deps[i]): + print max(self.deps[i]) + retVal.append(self.values[i]) + return retVal
