annotate pattern.rhope @ 179:64be565a40c6

Implement If method on List, fix Get Char to handle end of file, fix nested list pretty printing
author Mike Pavone <pavone@retrodev.com>
date Sat, 18 Jun 2011 11:11:58 -0700
parents f97a7d499182
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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