본문 바로가기
Computer Science

Generic swap

by OKOK 2021. 4. 24.

int, float 가 바뀌면서 인풋으로 들어올 때 이것을 같이 처리하고 싶음.

char* 받아서 하나의 바이트 마다 swap 을 돌릴 수 있음 for 문을 사용하여서

불법 !!

 

가독성 측면에서 정인님 코드

kernel 코드에서는 > 0 이랑 비교하는게 어셈블리상 유리함.

 

 

#if 1
#include <stdio.h>

void generic_swap(void *a, void *b, int size)
{
	char t;

	do {
		t = *(char *)a;
		*(char *)a++ = *(char *)b;
		*(char *)b++ = t;
	} while (--size > 0);
}

int main()
{
	double ad=3., bd=4.;
	int a=3, b=4;

	generic_swap( &a, &b, sizeof(a) );
	generic_swap( &ad,&bd, sizeof(ad) );

	printf("main : ad=%lf, bd=%lf\n", ad, bd );
	printf("main : a=%d, b=%d\n", a, b );
	return 0;
}
#endif
#if 0
#include <stdio.h>

void swap( void *a , void *b, int size )
{
	char t;
	int i;
	char *p = (char*)a;
	char *q = (char*)b;

	for(i=0; i<size; i++)
	{
		t = p[i];
		p[i] = q[i];
		q[i] = t;
	}
}

int main()
{
	double ad=3., bd=4.;
	int a=3, b=4;

	swap( &a, &b, sizeof(a) );
	swap( &ad,&bd, sizeof(ad) );

	printf("main : ad=%lf, bd=%lf\n", ad, bd );
	printf("main : a=%d, b=%d\n", a, b );
	return 0;
}
#endif
#if 0
#include <stdio.h>

void swap( char *a , char *b, int size )
{
	char t;
	int i;

	for(i=0; i<size; i++)
	{
		t = a[i];
		a[i] = b[i];
		b[i] = t;
	}
}

int main()
{
	double ad=3., bd=4.;
	int a=3, b=4;

	swap( (char*)&a, (char*)&b, sizeof(a) );
	swap( (char*)&ad, (char*)&bd, sizeof(ad) );

	printf("main : ad=%lf, bd=%lf\n", ad, bd );
	printf("main : a=%d, b=%d\n", a, b );
	return 0;
}
#endif
#if 0
#include <stdio.h>

void swap_int( int *a , int *b )
{
	int t;

	t = *a;
	*a = *b;
	*b = t;
}

void swap_double( double *a , double *b )
{
	double t;

	t = *a;
	*a = *b;
	*b = t;
}
int main()
{
	double ad=3., bd=4.;
	int a=3, b=4;

	swap_int( &a, &b );
	swap_double( &ad, &bd );

	printf("main : ad=%lf, bd=%lf\n", ad, bd );
	printf("main : a=%d, b=%d\n", a, b );
	return 0;
}
#endif
#if 0
#include <stdio.h>
#define  TYPE   int
void swap( TYPE *a , TYPE *b )
{
	int t;

	t = *a;
	*a = *b;
	*b = t;
}

int main()
{
	double ad=3., bd=4.;
	int a=3, b=4;

	swap( &ad, &bd );
	swap( &a, &b );

	printf("main : ad=%lf, bd=%lf\n", ad, bd );
	printf("main : a=%d, b=%d\n", a, b );
	return 0;
}
#endif
#if 0
#include <stdio.h>
void swap( int *a , int *b )
{
	int t;

	t = *a;
	*a = *b;
	*b = t;
}

int main()
{
	int a=3, b=4;

	swap( &a, &b );

	printf("main : a=%d, b=%d\n", a, b );
	return 0;
}
#endif


#if 0
#include <stdio.h>
void swap( int a , int b )
{
	int t;

	t = a;
	a = b;
	b = t;
	printf("swap : a=%d, b=%d\n", a, b );
}

int main()
{
	int a=3, b=4;

	swap( a, b );

	printf("main : a=%d, b=%d\n", a, b );
	return 0;
}
#endif

#if 0
#include <stdio.h>
int main()
{
	int a=3, b=4;

	int t;

	t = a;
	a = b;
	b = t;

	printf("a=%d, b=%d\n", a, b );
	return 0;
}
#endif

댓글