summaryrefslogtreecommitdiffstats
path: root/bindings/utils.py
diff options
context:
space:
mode:
authorFrederic Peters <fpeters@entrouvert.com>2008-04-29 12:06:30 +0000
committerFrederic Peters <fpeters@entrouvert.com>2008-04-29 12:06:30 +0000
commit3b93e1b952d046ca20459194e8ea649e1e0794bc (patch)
treed882a011f53ea0d7b53bcde22696d7d272bafa96 /bindings/utils.py
parent34e4fd0b5aae872344a16267efac847f45108ca7 (diff)
downloadlasso-3b93e1b952d046ca20459194e8ea649e1e0794bc.tar.gz
lasso-3b93e1b952d046ca20459194e8ea649e1e0794bc.tar.xz
lasso-3b93e1b952d046ca20459194e8ea649e1e0794bc.zip
[project @ fpeters@0d.be-20080217115557-8qtcrc1vzb75f75c]
merged Benjamin branch Original author: Frederic Peters <fpeters@0d.be> Date: 2008-02-17 12:55:57.088000+01:00
Diffstat (limited to 'bindings/utils.py')
-rw-r--r--bindings/utils.py52
1 files changed, 52 insertions, 0 deletions
diff --git a/bindings/utils.py b/bindings/utils.py
index c313bce3..2f6408f2 100644
--- a/bindings/utils.py
+++ b/bindings/utils.py
@@ -48,3 +48,55 @@ def format_underscore_as_camelcase(var):
var = re.sub(r'([a-z])(ID)([A-Z]|$)', r'\1Id\3', var) # replace standing ID by Id
return var
+
+
+def last(x):
+ return x[len(x)-1]
+
+def common_prefix(x,y):
+ max = min(len(x),len(y))
+ last = 0
+ for i in range(max):
+ if x[i] != y[i]:
+ return min(i,last+1)
+ if x[i] == '_':
+ last = i
+ return max
+
+def pgroup(group,prev):
+ level, l = group
+ i = 0
+ for x in l:
+ if i == 0:
+ prefix = prev
+ else:
+ prefix = level
+ if isinstance(x,tuple):
+ pgroup(x,prefix)
+ else:
+ print prefix * ' ' + x[prefix:]
+ i = i + 1
+
+def group(list):
+ list.sort()
+ pile = [(0,[])]
+ prev = ""
+ for x in list:
+ l, g = last(pile)
+ u = common_prefix(x,prev)
+ # Find the good level of insertion
+ while u < l:
+ pile.pop()
+ l, g = last(pile)
+ # Insert here
+ if u == l:
+ g.append(x)
+ elif u > l:
+ t = (u, [g.pop(),x])
+ g.append(t)
+ pile.append(t)
+ prev = x
+ return pile[0]
+
+
+