|
53 | 53 | __all__= ("TreeModifier","Tree")
|
54 | 54 |
|
55 | 55 |
|
56 |
| -defgit_cmp(t1:TreeCacheTup,t2:TreeCacheTup)->int: |
57 |
| -a,b=t1[2],t2[2] |
58 |
| -# assert isinstance(a, str) and isinstance(b, str) |
59 |
| -len_a,len_b=len(a),len(b) |
60 |
| -min_len=min(len_a,len_b) |
61 |
| -min_cmp=cmp(a[:min_len],b[:min_len]) |
62 |
| - |
63 |
| -ifmin_cmp: |
64 |
| -returnmin_cmp |
65 |
| - |
66 |
| -returnlen_a-len_b |
67 |
| - |
68 |
| - |
69 |
| -defmerge_sort(a:List[TreeCacheTup],cmp:Callable[[TreeCacheTup,TreeCacheTup],int])->None: |
70 |
| -iflen(a)<2: |
71 |
| -return |
72 |
| - |
73 |
| -mid=len(a)//2 |
74 |
| -lefthalf=a[:mid] |
75 |
| -righthalf=a[mid:] |
76 |
| - |
77 |
| -merge_sort(lefthalf,cmp) |
78 |
| -merge_sort(righthalf,cmp) |
79 |
| - |
80 |
| -i=0 |
81 |
| -j=0 |
82 |
| -k=0 |
83 |
| - |
84 |
| -whilei<len(lefthalf)andj<len(righthalf): |
85 |
| -ifcmp(lefthalf[i],righthalf[j])<=0: |
86 |
| -a[k]=lefthalf[i] |
87 |
| -i=i+1 |
88 |
| -else: |
89 |
| -a[k]=righthalf[j] |
90 |
| -j=j+1 |
91 |
| -k=k+1 |
92 |
| - |
93 |
| -whilei<len(lefthalf): |
94 |
| -a[k]=lefthalf[i] |
95 |
| -i=i+1 |
96 |
| -k=k+1 |
97 |
| - |
98 |
| -whilej<len(righthalf): |
99 |
| -a[k]=righthalf[j] |
100 |
| -j=j+1 |
101 |
| -k=k+1 |
102 |
| - |
103 |
| - |
104 | 56 | classTreeModifier:
|
105 | 57 | """A utility class providing methods to alter the underlying cache in a list-like fashion.
|
106 | 58 |
|
@@ -131,7 +83,7 @@ def set_done(self) -> "TreeModifier":
|
131 | 83 |
|
132 | 84 | :return self:
|
133 | 85 | """
|
134 |
| -merge_sort(self._cache,git_cmp) |
| 86 | +self._cache.sort(key=lambdax: (x[2]+"/")ifx[1]==Tree.tree_id<<12elsex[2]) |
135 | 87 | returnself
|
136 | 88 |
|
137 | 89 | # } END interface
|
|