Lines Matching +full:mem +full:- +full:array
1 /*-
2 * SPDX-License-Identifier: MIT
4 * Copyright (c) 2005-2014 Rich Felker, et al.
34 return *h ? (char *)h - 1 : 0; in twobyte_strstr()
44 return *h ? (char *)h - 2 : 0; in threebyte_strstr()
54 return *h ? (char *)h - 3 : 0; in fourbyte_strstr()
66 * byte of the window. A bit array marks which entries in the shift table are
69 * Reference: CROCHEMORE M., PERRIN D., 1991, Two-way string-matching,
70 * Journal of the ACM 38(3):651-675
76 size_t l, ip, jp, k, p, ms, p0, mem, mem0; in twoway_strstr() local
87 ip = -1; in twoway_strstr()
100 p = jp - ip; in twoway_strstr()
110 ip = -1; in twoway_strstr()
123 p = jp - ip; in twoway_strstr()
137 p = MAX(ms, l - ms - 1) + 1; in twoway_strstr()
139 mem0 = l - p; in twoway_strstr()
140 mem = 0; in twoway_strstr()
142 /* Initialize incremental end-of-haystack pointer */ in twoway_strstr()
147 /* Update incremental end-of-haystack pointer */ in twoway_strstr()
148 if (z - h < l) { in twoway_strstr()
154 if (z - h < l) in twoway_strstr()
161 if (BITOP(byteset, h[l - 1], &)) { in twoway_strstr()
162 k = l - shift[h[l - 1]]; in twoway_strstr()
164 if (k < mem) in twoway_strstr()
165 k = mem; in twoway_strstr()
167 mem = 0; in twoway_strstr()
172 mem = 0; in twoway_strstr()
177 for (k = MAX(ms + 1, mem); n[k] && n[k] == h[k]; k++) in twoway_strstr()
180 h += k - ms; in twoway_strstr()
181 mem = 0; in twoway_strstr()
185 for (k = ms + 1; k > mem && n[k - 1] == h[k - 1]; k--) in twoway_strstr()
187 if (k <= mem) in twoway_strstr()
190 mem = mem0; in twoway_strstr()