常用快速流处理函数


#pragma once

typedef union _EFFICA {
	struct {
		char v1;
		char v2;
		char v3;
		char v4;
	};
	int effica;
} EFFICA, *PEFFICA;

static size_t __cdecl fast_strlen(const char * str)
{
	register PEFFICA peffica;

	if (0 == str) {
		return 0;
	}

	peffica = (PEFFICA)str;

	for ( ;; )
	{
		if ((peffica->v2 && peffica->v4) && (peffica->v1 && peffica->v3))
		{
			++peffica;
			continue;
		}
		else
		{
			if (0 == peffica->v1)
				return ((size_t)peffica - (size_t)str);
			if (0 == peffica->v2)
				return ((size_t)peffica - (size_t)str + 1);
			if (0 == peffica->v3)
				return ((size_t)peffica - (size_t)str + 2);
			if (0 == peffica->v4)
				return ((size_t)peffica - (size_t)str + 3);
			break;
		}
	}
	return 0;
}

static size_t __cdecl fast_strcpy(char * des, const char * src, size_t len)
{
	register size_t dwordCount;
	register size_t i;

	if (0 == des || 0 == src) {
		return 0;
	}

	dwordCount = len / sizeof(size_t);
	i = 0;

	for (; i < dwordCount; ++i) {
		((size_t *)des)[i] = ((size_t *)src)[i];
	}

	i = i * sizeof(size_t);

	for (; i < len; ++i) {
		des[i] = src[i];
	}

	des[i] = 0;
	return (i);
}

static size_t __cdecl fast_strcmp(const char * des, const char * src, size_t len)
{
	register size_t dwordCount;
	register size_t i;

	if (0 == des || 0 == src) {
		return 0;
	}

	dwordCount = len / sizeof(size_t);
	i = 0;

	for (; i < dwordCount; ++i)
	{
		if (((size_t *)des)[i] != ((size_t *)src)[i]) {
			return (i);
		}
	}

	i = i * sizeof(size_t);

	for (; i < len; ++i)
	{
		if (des[i] != src[i]) {
			return (i);
		}
	}
	return (i);
}

static size_t __cdecl fast_strcat(char * des, const char * src, size_t len)
{
	register size_t dwordCount;
	register char * pdes;
	register size_t i;

	if (0 == des || 0 == src) {
		return 0;
	}

	dwordCount = len / sizeof(size_t);
	pdes = des + fast_strlen(des);
	i = 0;

	for (; i < dwordCount; ++i) {
		((size_t *)pdes)[i] = ((size_t *)src)[i];
	}

	i = i * sizeof(size_t);

	for (; i < len; ++i) {
		pdes[i] = src[i];
	}

	pdes[i] = 0;
	return (i);
}

static size_t __cdecl fast_strxch(char * des, char * src, size_t len)
{
	register size_t dwordCount;
	register size_t i;

	if (0 == des || 0 == src) {
		return 0;
	}

	dwordCount = len / sizeof(size_t);
	i = 0;

	for (; i < dwordCount; ++i)
	{
		((size_t *)des)[i] = ((size_t *)des)[i] ^ ((size_t *)src)[i];
		((size_t *)src)[i] = ((size_t *)des)[i] ^ ((size_t *)src)[i];
		((size_t *)des)[i] = ((size_t *)des)[i] ^ ((size_t *)src)[i];
	}

	i = i * sizeof(size_t);

	for (; i < len; ++i)
	{
		des[i] = des[i] ^ src[i];
		src[i] = des[i] ^ src[i];
		des[i] = des[i] ^ src[i];
	}
	return (i);
}

static int __cdecl fast_strstr(const char * des, const char * src, size_t len)
{
	int s;
	int cx,cy,cz;
	int sx,sy;
	register int i,sz;

	if (0 == des || 0 == src) {
		return (-1);
	}

	cx = (int)len / 2;
	cy = (int)len - cx;
	cz = (int)len - 1;

	i = cx;
	s = (int)fast_strlen(des);

	for (; i < s; )
	{
		if (des[i] == src[cx])
		{
			sx = i - 1;
			sz = cx - 1;

			for (; sz >= 0; )
			{
				if (des[sx] != src[sz])
				{
					i = i + (cx - sz);
					break;
				}
				--sx;
				--sz;
			}

			if (sz < 0)
			{
				i = i + 1;
				sy = cx + 1;

				for (; (int)len > sy; )
				{
					if (des[i] != src[sy])
					{
						i = i + cy;
						break;
					}
					++i;
					++sy;
				}

				if (len == sy) {
					return (i - sy);
				}
			}
			continue;
		}

		if (src[cz] != des[(i + cy)]) {
			i = i + 2;
		}
		else {
			i = i + 1;
		}
	}
	return (-1);
}

static size_t fast_memset(void * d, int v, size_t l)
{
	register size_t dwordCount;
	register char * pval;
	register size_t i;

	if (0 == d) {
		return 0;
	}

	dwordCount = l / sizeof(size_t);
	pval = (char *)&v;
	i = 0;

	for (; i < dwordCount; ++i) {
		((size_t *)d)[i] = v;
	}

	i = i * sizeof(size_t);

	for (; i < l; ++i) {
		((char *)d)[i] = *pval++;
	}
	return (i);
}

static size_t __cdecl fast_memcpy(void * d, const void * s, size_t l)
{
	register size_t dwordCount;
	register size_t i;

	if (0 == d || 0 == s) {
		return 0;
	}

	dwordCount = l / sizeof(size_t);
	i = 0;

	for (; i < dwordCount; ++i) {
		((size_t *)d)[i] = ((size_t *)s)[i];
	}

	i = i * sizeof(size_t);

	for (; i < l; ++i) {
		((char *)d)[i] = ((char *)s)[i];
	}
	return (i);
}

static size_t __cdecl fast_memcmp(const void * d, const void * s, size_t l)
{
	register size_t dwordCount;
	register size_t i;

	if (0 == d || 0 == s) {
		return 0;
	}

	dwordCount = l / sizeof(size_t);
	i = 0;

	for (; i < dwordCount; ++i)
	{
		if (((size_t *)d)[i] != ((size_t *)s)[i]) {
			return (i);
		}
	}

	i = i * sizeof(size_t);

	for (; i < l; ++i)
	{
		if (((char *)d)[i] != ((char *)s)[i]) {
			return (i);
		}
	}
	return (i);
}

static size_t __cdecl fast_memxch(void * d, void * s, size_t l)
{
	register size_t dwordCount;
	register size_t i;

	if (0 == d || 0 == s) {
		return 0;
	}

	dwordCount = l / sizeof(size_t);
	i = 0;

	for (; i < dwordCount; ++i)
	{
		((size_t *)d)[i] = ((size_t *)d)[i] ^ ((size_t *)s)[i];
		((size_t *)s)[i] = ((size_t *)d)[i] ^ ((size_t *)s)[i];
		((size_t *)d)[i] = ((size_t *)d)[i] ^ ((size_t *)s)[i];
	}

	i = i * sizeof(size_t);

	for (; i < l; ++i)
	{
		((char *)d)[i] = ((char *)d)[i] ^ ((char *)s)[i];
		((char *)s)[i] = ((char *)d)[i] ^ ((char *)s)[i];
		((char *)d)[i] = ((char *)d)[i] ^ ((char *)s)[i];
	}
	return (i);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值