示例#1
0
文件: ft_strcmp.c 项目: alex8092/Lib
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;
	}
}