int ft_strcmp(const char *s1, const char *s2) { const uint64_t himagic = ((0x80808080L << 16) << 16) | 0x80808080L; const uint64_t lomagic = ((0x01010101L << 16) << 16) | 0x01010101L; const uint64_t *i1; const uint64_t *i2; i1 = (const uint64_t *)s1; i2 = (const uint64_t *)s2; while (42) { if (*i1 != *i2) return (ft_cmp((const char *)(i1), (const char *)(i2))); if (((*i1++ - lomagic) & himagic) && ft_zero((const char *)(i1 - 1))) return (ft_cmp((const char *)(i1 - 1), (const char *)i2)); else if (((*i2++ - lomagic) & himagic) && ft_zero((const char *)(i2 - 1))) return (ft_cmp((const char *)(i1 - 1), (const char *)(i2 - 1))); } }
void f_array_delete_if(t_array *v_this, bool (*ft_cmp)(void *d1, void *d2), void *data) { size_t i; size_t size; char *ptr; i = 0; ptr = (char *)v_this->v_data; size = v_this->v_size * v_this->v_type_size; while (i < size) { if (ft_cmp((void *)(ptr + i), data) == true) { uf_memcpy(ptr + i, ptr + i + v_this->v_type_size, size - i - v_this->v_type_size); uf_memset(ptr + size - v_this->v_type_size, 0, v_this->v_type_size); v_this->v_size = v_this->v_size - 1; size = v_this->v_size * v_this->v_type_size; } else i = i + v_this->v_type_size; } }