|
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 |
|