comparison src/c/urweb.c @ 1388:3913cbfd72e9

String processing optimizations
author Adam Chlipala <adam@chlipala.net>
date Tue, 11 Jan 2011 14:03:54 -0500
parents 64724ef86149
children 9a721f0722d3
comparison
equal deleted inserted replaced
1387:dd99e1702432 1388:3913cbfd72e9
2131 2131
2132 return uw_unit_v; 2132 return uw_unit_v;
2133 } 2133 }
2134 2134
2135 uw_Basis_char uw_Basis_strsub(uw_context ctx, uw_Basis_string s, uw_Basis_int n) { 2135 uw_Basis_char uw_Basis_strsub(uw_context ctx, uw_Basis_string s, uw_Basis_int n) {
2136 if (n >= 0 && n < strlen(s)) 2136 while (n >= 0) {
2137 return s[n]; 2137 if (*s == 0)
2138 else 2138 uw_error(ctx, FATAL, "Out-of-bounds strsub");
2139 uw_error(ctx, FATAL, "Out-of-bounds strsub"); 2139
2140 if (n == 0)
2141 return *s;
2142
2143 --n;
2144 ++s;
2145 }
2146
2147 uw_error(ctx, FATAL, "Negative strsub bound");
2140 } 2148 }
2141 2149
2142 uw_Basis_string uw_Basis_strsuffix(uw_context ctx, uw_Basis_string s, uw_Basis_int n) { 2150 uw_Basis_string uw_Basis_strsuffix(uw_context ctx, uw_Basis_string s, uw_Basis_int n) {
2143 if (n >= 0 && n < strlen(s)) 2151 while (n >= 0) {
2144 return &s[n]; 2152 if (*s == 0 || n == 0)
2145 else 2153 return s;
2146 uw_error(ctx, FATAL, "Out-of-bounds strsuffix"); 2154
2155 --n;
2156 ++s;
2157 }
2158
2159 uw_error(ctx, FATAL, "Negative strsuffix bound");
2147 } 2160 }
2148 2161
2149 uw_Basis_int uw_Basis_strlen(uw_context ctx, uw_Basis_string s) { 2162 uw_Basis_int uw_Basis_strlen(uw_context ctx, uw_Basis_string s) {
2150 return strlen(s); 2163 return strlen(s);
2164 }
2165
2166 uw_Basis_bool uw_Basis_strlenGe(uw_context ctx, uw_Basis_string s, uw_Basis_int n) {
2167 while (n > 0) {
2168 if (*s == 0)
2169 return uw_Basis_False;
2170
2171 --n;
2172 ++s;
2173 }
2174
2175 return uw_Basis_True;
2151 } 2176 }
2152 2177
2153 uw_Basis_string uw_Basis_strchr(uw_context ctx, uw_Basis_string s, uw_Basis_char ch) { 2178 uw_Basis_string uw_Basis_strchr(uw_context ctx, uw_Basis_string s, uw_Basis_char ch) {
2154 return strchr(s, ch); 2179 return strchr(s, ch);
2155 } 2180 }