284 size_t s_prefix_table[CX_STRSTR_SBO_SIZE]; |
284 size_t s_prefix_table[CX_STRSTR_SBO_SIZE]; |
285 |
285 |
286 // check needle length and use appropriate prefix table |
286 // check needle length and use appropriate prefix table |
287 // if the pattern exceeds static prefix table, allocate on the heap |
287 // if the pattern exceeds static prefix table, allocate on the heap |
288 const bool useheap = needle.length >= CX_STRSTR_SBO_SIZE; |
288 const bool useheap = needle.length >= CX_STRSTR_SBO_SIZE; |
289 register size_t *ptable = useheap ? calloc(needle.length + 1, |
289 register size_t *ptable = useheap |
290 sizeof(size_t)) : s_prefix_table; |
290 ? cxCalloc(cxDefaultAllocator, needle.length + 1, sizeof(size_t)) |
|
291 : s_prefix_table; |
291 |
292 |
292 // keep counter in registers |
293 // keep counter in registers |
293 register size_t i, j; |
294 register size_t i, j; |
294 |
295 |
295 // fill prefix table |
296 // fill prefix table |