aboutsummaryrefslogtreecommitdiff
path: root/src/mem/ft_memmove.c
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-01-16 10:28:33 +0100
committerCharles <sircharlesaze@gmail.com>2020-01-16 10:29:11 +0100
commite23e9b3f74b0510542064e01ef505b6b7edbe17c (patch)
treee8846b6c9d7cbc31a54e1fa55457ed7f9c3572b5 /src/mem/ft_memmove.c
parentae1412fdc283e442a0869aa7d63778449a7e5cfe (diff)
downloadlibft-e23e9b3f74b0510542064e01ef505b6b7edbe17c.tar.gz
libft-e23e9b3f74b0510542064e01ef505b6b7edbe17c.tar.bz2
libft-e23e9b3f74b0510542064e01ef505b6b7edbe17c.zip
Merge push_swap to master
(optimized ft_memcpy, ft_memset)
Diffstat (limited to 'src/mem/ft_memmove.c')
-rw-r--r--src/mem/ft_memmove.c34
1 files changed, 18 insertions, 16 deletions
diff --git a/src/mem/ft_memmove.c b/src/mem/ft_memmove.c
index aa107bd..73e26b8 100644
--- a/src/mem/ft_memmove.c
+++ b/src/mem/ft_memmove.c
@@ -6,7 +6,7 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/10/07 10:03:21 by cacharle #+# #+# */
-/* Updated: 2019/11/20 03:31:00 by cacharle ### ########.fr */
+/* Updated: 2019/11/21 18:43:26 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
@@ -14,20 +14,22 @@
void *ft_memmove(void *dst, const void *src, size_t len)
{
- size_t i;
- t_byte *dst_cast;
- t_byte *src_cast;
+ long int *long_dst;
+ const long int *long_src;
+ void *dst_copy;
- if (dst == src)
- return (dst);
- dst_cast = (t_byte*)dst;
- src_cast = (t_byte*)src;
- i = -1;
- if (dst_cast < src_cast)
- while (++i < len)
- dst_cast[i] = src_cast[i];
- else
- while (len-- > 0)
- dst_cast[len] = src_cast[len];
- return (dst);
+ if (dst >= src)
+ return (ft_memcpy(dst, src, len));
+ dst_copy = dst;
+ while (len % 8 > 0)
+ {
+ len--;
+ *(t_byte*)dst++ = *(t_byte*)src++;
+ }
+ long_dst = dst;
+ long_src = src;
+ len /= 8;
+ while (len-- > 0)
+ *long_dst++ = *long_src++;
+ return (dst_copy);
}