nie mehr schule
Code:
while(*p)
{
if(*p == '%')
{
p++;
switch(*p)
{
case 'f':
{
double d = va_arg(ap, double);
buffer <<d;
break;
}
case 'd':
{
int num = va_arg(ap, int);
buffer <<num;
break;
}
case 's':
{
char * str = va_arg(ap, char *);
buffer <<str;
break;
}
case 'a':
{
p++;
if(*p == 'f')
{
double * arr = va_arg(ap, double *);
int length = va_arg(ap, int);
buffer <<"{";
for(int i = 0; i <length; i++)
buffer <<arr[i] <<(i == length - 1 ? "" : ", ");
buffer <<"}";
}
else if(*p == 'd')
{
int * arr = va_arg(ap, int *);
int length = va_arg(ap, int);
buffer <<"{";
for(int i = 0; i <length; i++)
buffer <<arr[i] <<(i == length - 1 ? "" : ", ");
buffer <<"}";
}
else
{
int address = va_arg(ap, int);
p--;
buffer <<"[pointer@" <<address <<"]";
}
break;
}
case ':':
{
int address = va_arg(ap, int);
buffer <<"[object@" <<address <<"]";
break;
}
case 'p':
{
int arg = va_arg(ap, int);
buffer <<(arg != 0 ? "true" : "false");
break;
}
case 'X':
{
buffer <<"%";
break;
}
default:
{
int var = va_arg(ap, int);
buffer <<"[unknown]";
}
}
}
else
buffer <<*p;
p++;
}
va_end(ap);
return buffer.str();