Mercurial > repos > rhope
annotate pattern.rhope @ 173:e769b2e0facc
Syntactic sugar for calling a value
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 17 May 2011 23:17:42 -0700 |
parents | f97a7d499182 |
children |
rev | line source |
---|---|
108
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1 |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
2 Blueprint Empty Pattern |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
3 { |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
4 } |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
5 |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
6 Empty Pattern[:out] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
7 { |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
8 out <- Build[Empty Pattern()] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
9 } |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
10 |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
11 Add String@Empty Pattern[pattern,string,idx:out] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
12 { |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
13 out <- [pattern]_Add String[string,0,idx] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
14 } |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
15 |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
16 _Add String@Empty Pattern[pattern,string,n,idx:out] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
17 { |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
18 If[[n]<[[string]Byte Length]] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
19 { |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
20 out <- [[[[[[Build[Pattern()] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
21 ]Byte <<[[string]Byte[n]] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
22 ]Left <<[pattern] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
23 ]Right <<[pattern] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
24 ]Straight <<[[pattern]_Add String[string, [n]+[1],idx]] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
25 ]Terminal? <<[[n]=[[[string]Byte Length]-[1]]] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
26 ]Index <<[idx] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
27 }{ |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
28 out <- pattern |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
29 } |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
30 } |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
31 |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
32 Blueprint Pattern |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
33 { |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
34 Byte |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
35 Left |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
36 Right |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
37 Straight |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
38 Terminal? |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
39 Index |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
40 } |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
41 |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
42 _Add String@Pattern[pattern,string,n,idx:out] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
43 { |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
44 If[[n]<[[string]Byte Length]] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
45 { |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
46 b <- [string]Byte[n] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
47 myb <- [pattern]Byte >> |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
48 If[[b]<[myb]] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
49 { |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
50 out <- [pattern]Left <<[[[pattern]Left >>]_Add String[string,n,idx]] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
51 }{ |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
52 If[[b]>[myb]] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
53 { |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
54 out <- [pattern]Right <<[[[pattern]Right >>]_Add String[string,n,idx]] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
55 }{ |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
56 newpat <- [pattern]Straight <<[[[pattern]Straight >>]_Add String[string,[n]+[1],idx]] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
57 If[[n]=[[[string]Byte Length]-[1]]] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
58 { |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
59 out <- [newpat]Terminal? <<[Yes] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
60 }{ |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
61 out <- Val[newpat] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
62 } |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
63 } |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
64 } |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
65 }{ |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
66 out <- pattern |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
67 } |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
68 } |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
69 |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
70 Add String@Pattern[pattern,string,idx:out] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
71 { |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
72 out <- [pattern]_Add String[string,0,idx] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
73 } |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
74 |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
75 Pattern@List[list:out] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
76 { |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
77 out <- Fold[Add String[?], Empty Pattern[], list] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
78 } |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
79 |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
80 Pattern@List Leaf[list:out] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
81 { |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
82 out <- Fold[Add String[?], Empty Pattern[], list] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
83 } |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
84 |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
85 Pattern@Pattern[p:out] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
86 { |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
87 out <- p |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
88 } |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
89 |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
90 Match@Empty Pattern[pattern,string:num,no match] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
91 { |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
92 no match <- Yes |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
93 } |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
94 |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
95 Match@Pattern[pattern,string:num,no match,idx] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
96 { |
153
d86df83402f3
Small performance optimization in string lib
Mike Pavone <pavone@retrodev.com>
parents:
108
diff
changeset
|
97 num,no match,idx <- [pattern]_Match[string,0,[string]Byte[0]] |
108
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
98 } |
160
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
99 /* |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
100 _Match@Pattern[pattern,string,n,b:num,no match,idx] |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
101 { |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
102 myb <- [pattern]Byte >> |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
103 If[[b]=[myb]] |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
104 { |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
105 ,check terminal <- [string]Byte[[n]+[1]] |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
106 { num,check terminal,idx <- [[pattern]Straight >>]_Match[string, [n]+[1], ~] } |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
107 Val[check terminal] |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
108 { |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
109 ,no match <- If[[pattern]Terminal? >>] |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
110 { |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
111 num <- [n]+[1] |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
112 idx <- Index >>[pattern] |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
113 } |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
114 } |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
115 |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
116 }{ |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
117 If[[b]<[myb]] |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
118 { |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
119 num, no match, idx <- [[pattern]Left >>]_Match[string, n,b] |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
120 }{ |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
121 num, no match, idx <- [[pattern]Right >>]_Match[string, n,b] |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
122 } |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
123 } |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
124 } |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
125 */ |
108
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
126 |
153
d86df83402f3
Small performance optimization in string lib
Mike Pavone <pavone@retrodev.com>
parents:
108
diff
changeset
|
127 _Match@Pattern[pattern,string,n,b:num,no match,idx] |
108
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
128 { |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
129 myb <- [pattern]Byte >> |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
130 If[[b]=[myb]] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
131 { |
153
d86df83402f3
Small performance optimization in string lib
Mike Pavone <pavone@retrodev.com>
parents:
108
diff
changeset
|
132 ,check terminal <- [string]Byte[[n]+[1]] |
d86df83402f3
Small performance optimization in string lib
Mike Pavone <pavone@retrodev.com>
parents:
108
diff
changeset
|
133 { num,check terminal,idx <- [[pattern]Straight >>]_Match[string, [n]+[1], ~] } |
d86df83402f3
Small performance optimization in string lib
Mike Pavone <pavone@retrodev.com>
parents:
108
diff
changeset
|
134 Val[check terminal] |
108
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
135 { |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
136 ,no match <- If[[pattern]Terminal? >>] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
137 { |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
138 num <- [n]+[1] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
139 idx <- Index >>[pattern] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
140 } |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
141 } |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
142 |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
143 }{ |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
144 If[[b]<[myb]] |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
145 { |
153
d86df83402f3
Small performance optimization in string lib
Mike Pavone <pavone@retrodev.com>
parents:
108
diff
changeset
|
146 num, no match, idx <- [[pattern]Left >>]_Match[string, n,b] |
108
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
147 }{ |
153
d86df83402f3
Small performance optimization in string lib
Mike Pavone <pavone@retrodev.com>
parents:
108
diff
changeset
|
148 num, no match, idx <- [[pattern]Right >>]_Match[string, n,b] |
108
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
149 } |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
150 } |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
151 } |
a7add4db4a25
Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
152 |
160
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
153 _Match Iter@Empty Pattern[pattern,origpat,n,count,b,if end:out,next,no next,seekfunc,seek] |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
154 { |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
155 out <- Call[if end] { |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
156 }{ |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
157 If[count] |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
158 { |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
159 seek <- [count]-[1] |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
160 seekfunc <- Val[[origpat]_Match Iter[origpat,[n]+[1],0,?,_No Pattern Match[?]]] |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
161 }{ |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
162 next <- Val[[origpat]_Match Iter[origpat, [n]+[1], 0, ?, _No Pattern Match[?]]] |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
163 no next <- Val[_No Pattern Match[?]] |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
164 } |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
165 } |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
166 } |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
167 |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
168 _Match Iter@Pattern[pattern,origpat,n,count,b,if end:out,next,no next,seekfunc,seek] |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
169 { |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
170 myb <- [pattern]Byte >> |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
171 If[[b]=[myb]] |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
172 { |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
173 ncount <- [count]+[1] |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
174 If[[pattern]Terminal? >>] |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
175 { next if end <- Val[Val[[[[()]Append[n]]Append[ncount]]Append[[pattern]Index >>],?]] } |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
176 { next if end <- Val[_No Pattern Match[?]] } |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
177 no next <- Val[next if end] |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
178 |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
179 next <- Val[[[pattern]Straight >>]_Match Iter[origpat, n, ncount, ?, next if end]] |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
180 }{ |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
181 If[[b]<[myb]] |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
182 { |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
183 out,next,no next,seekfunc,seek <- [[pattern]Left >>]_Match Iter[origpat,n,count,b,if end] |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
184 }{ |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
185 out,next,no next,seekfunc,seek <- [[pattern]Right >>]_Match Iter[origpat,n,count,b,if end] |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
186 } |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
187 } |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
188 } |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
189 |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
190 |
156
ed70399a07aa
Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents:
153
diff
changeset
|
191 _Partition@Pattern[delims,string:matched,after,not found] |
ed70399a07aa
Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents:
153
diff
changeset
|
192 { |
160
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
193 ,not found <- [string]Iter Bytes[_Match Iter[delims,delims,0,0,?,_No Pattern Match[?]], 0] |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
194 { |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
195 matched, after <- [[string]Substring[[~]Index[0], 0]]Slice[[~]Index[1]] |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
196 } |
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
197 /* |
156
ed70399a07aa
Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents:
153
diff
changeset
|
198 not found <- If[[string]=[""]] {} |
ed70399a07aa
Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents:
153
diff
changeset
|
199 { |
ed70399a07aa
Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents:
153
diff
changeset
|
200 [delims]Match[string] |
ed70399a07aa
Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents:
153
diff
changeset
|
201 { |
ed70399a07aa
Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents:
153
diff
changeset
|
202 matched,after <- [string]Slice[~] |
ed70399a07aa
Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents:
153
diff
changeset
|
203 }{ |
ed70399a07aa
Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents:
153
diff
changeset
|
204 matched,after,not found <- _Partition[delims, [string]Substring[1, 0]] |
ed70399a07aa
Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents:
153
diff
changeset
|
205 } |
ed70399a07aa
Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents:
153
diff
changeset
|
206 } |
160
f97a7d499182
Optimize _Partition@Pattern using a byte iterator
Mike Pavone <pavone@retrodev.com>
parents:
156
diff
changeset
|
207 */ |
156
ed70399a07aa
Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents:
153
diff
changeset
|
208 } |
153
d86df83402f3
Small performance optimization in string lib
Mike Pavone <pavone@retrodev.com>
parents:
108
diff
changeset
|
209 |
156
ed70399a07aa
Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents:
153
diff
changeset
|
210 _Partition@Empty Pattern[delims,string:matched,after,not found] |
ed70399a07aa
Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents:
153
diff
changeset
|
211 { |
ed70399a07aa
Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents:
153
diff
changeset
|
212 not found <- Yes |
ed70399a07aa
Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents:
153
diff
changeset
|
213 } |
ed70399a07aa
Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents:
153
diff
changeset
|
214 |