annotate pattern.rhope @ 156:ed70399a07aa

Add Substring method to string and improve performance of Partition
author Mike Pavone <pavone@retrodev.com>
date Thu, 23 Dec 2010 02:00:27 +0000
parents d86df83402f3
children f97a7d499182
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,n: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@Empty Pattern[pattern,string:num,no match]
a7add4db4a25 Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
96 {
a7add4db4a25 Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
97 no match <- Yes
a7add4db4a25 Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
98 }
a7add4db4a25 Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
99
a7add4db4a25 Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
100 Match@Pattern[pattern,string:num,no match,idx]
a7add4db4a25 Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
101 {
153
d86df83402f3 Small performance optimization in string lib
Mike Pavone <pavone@retrodev.com>
parents: 108
diff changeset
102 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
103 }
a7add4db4a25 Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
104
153
d86df83402f3 Small performance optimization in string lib
Mike Pavone <pavone@retrodev.com>
parents: 108
diff changeset
105 _Match@Pattern[pattern,string,n,b:num,no match,idx]
108
a7add4db4a25 Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
106 {
a7add4db4a25 Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
107 myb <- [pattern]Byte >>
a7add4db4a25 Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
108 If[[b]=[myb]]
a7add4db4a25 Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
109 {
153
d86df83402f3 Small performance optimization in string lib
Mike Pavone <pavone@retrodev.com>
parents: 108
diff changeset
110 ,check terminal <- [string]Byte[[n]+[1]]
d86df83402f3 Small performance optimization in string lib
Mike Pavone <pavone@retrodev.com>
parents: 108
diff changeset
111 { 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
112 Val[check terminal]
108
a7add4db4a25 Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
113 {
a7add4db4a25 Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
114 ,no match <- If[[pattern]Terminal? >>]
a7add4db4a25 Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
115 {
a7add4db4a25 Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
116 num <- [n]+[1]
a7add4db4a25 Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
117 idx <- Index >>[pattern]
a7add4db4a25 Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
118 }
a7add4db4a25 Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
119 }
a7add4db4a25 Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
120
a7add4db4a25 Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
121 }{
a7add4db4a25 Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
122 If[[b]<[myb]]
a7add4db4a25 Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
123 {
153
d86df83402f3 Small performance optimization in string lib
Mike Pavone <pavone@retrodev.com>
parents: 108
diff changeset
124 num, no match, idx <- [[pattern]Left >>]_Match[string, n,b]
108
a7add4db4a25 Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
125 }{
153
d86df83402f3 Small performance optimization in string lib
Mike Pavone <pavone@retrodev.com>
parents: 108
diff changeset
126 num, no match, idx <- [[pattern]Right >>]_Match[string, n,b]
108
a7add4db4a25 Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
127 }
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 }
a7add4db4a25 Improved implementation of Pattern
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
130
156
ed70399a07aa Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents: 153
diff changeset
131 _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
132 {
ed70399a07aa Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents: 153
diff changeset
133 not found <- If[[string]=[""]] {}
ed70399a07aa Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents: 153
diff changeset
134 {
ed70399a07aa Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents: 153
diff changeset
135 [delims]Match[string]
ed70399a07aa Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents: 153
diff changeset
136 {
ed70399a07aa Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents: 153
diff changeset
137 matched,after <- [string]Slice[~]
ed70399a07aa Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents: 153
diff changeset
138 }{
ed70399a07aa Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents: 153
diff changeset
139 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
140 }
ed70399a07aa Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents: 153
diff changeset
141 }
ed70399a07aa Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents: 153
diff changeset
142 }
153
d86df83402f3 Small performance optimization in string lib
Mike Pavone <pavone@retrodev.com>
parents: 108
diff changeset
143
156
ed70399a07aa Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents: 153
diff changeset
144 _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
145 {
ed70399a07aa Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents: 153
diff changeset
146 not found <- Yes
ed70399a07aa Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents: 153
diff changeset
147 }
ed70399a07aa Add Substring method to string and improve performance of Partition
Mike Pavone <pavone@retrodev.com>
parents: 153
diff changeset
148