| 253 | // split |
| 254 | |
| 255 | PtrUArray *UArray_split_(const UArray *self, const PtrUArray *delims) { |
| 256 | PtrUArray *results = UArray_new(); |
| 257 | size_t i, last = 0; |
| 258 | UArray_setItemType_(results, CTYPE_uintptr_t); |
| 259 | |
| 260 | for (i = 0; i < self->size; i++) { |
| 261 | UArray slice = UArray_stackRange(self, i, self->size - i); |
| 262 | size_t j; |
| 263 | |
| 264 | for (j = 0; j < delims->size; j++) { |
| 265 | UArray *delim = UArray_rawPointerAt_(delims, j); |
| 266 | |
| 267 | if (UArray_beginsWith_(&slice, delim)) { |
| 268 | UArray_appendPointer_(results, |
| 269 | UArray_range(self, last, i - last)); |
| 270 | |
| 271 | last = i + delim->size; |
| 272 | i = last - 1; // since for() will increment it |
| 273 | break; |
| 274 | } |
| 275 | } |
| 276 | } |
| 277 | |
| 278 | if (last != self->size) { |
| 279 | UArray_appendPointer_(results, |
| 280 | UArray_range(self, last, self->size - last)); |
| 281 | } |
| 282 | |
| 283 | return results; |
| 284 | } |
| 285 | |
| 286 | size_t UArray_splitCount_(const UArray *self, const PtrUArray *delims) { |
| 287 | PtrUArray *r = UArray_split_(self, delims); |
no test coverage detected