⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mal_io.c

📁 一个内存数据库的源代码这是服务器端还有客户端
💻 C
📖 第 1 页 / 共 2 页
字号:
#line 208 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"#include "mal_config.h"#include "mal_io.h"strio_stdin(bstream **ret){	*ret = (bstream*)GDKin;	return MAL_SUCCEED;}strio_stdout(stream **ret){	*ret = GDKout;	return MAL_SUCCEED;}strio_stderr(stream **ret){	*ret = GDKerr;	return MAL_SUCCEED;}strIOprintBoth(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, int indx, str hd, str tl, int nobat){	int tpe = getArgType(mb, pci, indx);	ptr val = (ptr) getArgReference(stk, pci, indx);	stream *fp = GDKout;	(void) mb;	if (tpe == TYPE_any)		tpe = stk->stk[pci->argv[indx]].vtype;	if (val == NULL || tpe == TYPE_void) {		if (hd)			stream_printf(fp, "%s", hd);		stream_printf(fp, "nil");		if (tl)			stream_printf(fp, "%s", tl);		return MAL_SUCCEED;	}	if (isaBatType(tpe) ) {		BAT *b;		if (*(int *) val == 0) {			if (hd)				stream_printf(fp, "%s", hd);			stream_printf(fp,"nil");			if (tl)				stream_printf(fp, "%s", tl);			return MAL_SUCCEED;		}		b = BATdescriptor(*(int *) val);		if (b == NULL) {			throw(MAL, "io.print", "Could not access descriptor");		}		if (nobat) {			if (hd)				stream_printf(fp, "%s", hd);			stream_printf(fp, "<%s>", BBPname(b->batCacheid));			if (tl)				stream_printf(fp, "%s", tl);		} else			BATmultiprintf(GDKout, 2, &b, TRUE, 0, TRUE);		BBPunfix(b->batCacheid);		return MAL_SUCCEED;	}	if (hd)		stream_printf(fp, "%s", hd);	if (ATOMvarsized(tpe))		ATOMprint(tpe, *(str *) val, fp);	else		ATOMprint(tpe, val, fp);	if (tl)		stream_printf(fp, "%s", tl);	return MAL_SUCCEED;}strIOprint_val(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){	int i;	if (p->argc == 2)		IOprintBoth(mb, stk, p, 1, "[ ", " ]\n", 0);	else {		IOprintBoth(mb, stk, p, 1, "[ ", 0, 1);		for (i = 2; i < p->argc - 1; i++)			IOprintBoth(mb, stk, p, i, ", ", 0, 1);		IOprintBoth(mb, stk, p, i, ", ", "]\n", 1);	}	return MAL_SUCCEED;}strIOprint_tables(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){	IOtableAll(GDKout, mb, stk, p, 1, 0, FALSE, TRUE);	return MAL_SUCCEED;}strIOprompt_val(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){	return IOprintBoth(mb, stk, pci, 1, 0, 0, 1);}strIOprint_ft(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){	int tpe = getArgType(mb, pci, 1);	ptr val = (ptr) getArgReference(stk, pci, 1);	if (val == NULL) {		ATOMprint(TYPE_str, "nil", GDKout);		return MAL_SUCCEED;	}	if (tpe == TYPE_str)		ATOMprint(TYPE_str, *(str *) val, GDKout);	else		ATOMprint(tpe, val, GDKout);	return MAL_SUCCEED;}#line 341 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"strIOtableAll(stream *f, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, int i, int order, int printhead, int printorder){	BAT *piv[MAXPARAMS], *b;	int nbats = 0;	int tpe, k = i;	ptr val;	for (; i < pci->argc; i++) {		tpe = getArgType(mb, pci, i);		val = (ptr) getArgReference(stk, pci, i);		if (!isaBatType(tpe))			throw(MAL, "io.table", "BAT expected");		b = BATdescriptor(*(int *) val);		if (b == NULL) {			for (k = 0; k < nbats; k++)				BBPunfix(piv[k]->batCacheid);			throw(MAL, "io.table", "Could not access descriptor");		}		piv[nbats++] = b;	}	/*if(printhead) */ nbats++;	BATmultiprintf(f, nbats, piv, printhead, order, printorder);	for (k = 0; k < nbats - 1; k++)		BBPunfix(piv[k]->batCacheid);	return MAL_SUCCEED;}strIOotable(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){	int order;	order = *(int *) getArgReference(stk, pci, 1);	return IOtableAll(GDKout, mb, stk, pci, 2, order, TRUE, TRUE);}strIOtable(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){	return IOtableAll(GDKout, mb, stk, pci, 1, 0, TRUE, TRUE);}strIOfotable(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){	stream *fp;	int order;	fp = *(stream **) getArgReference(stk, pci, 1);	order = *(int *) getArgReference(stk, pci, 2);	(void) order;		/* fool compiler */	return IOtableAll(fp, mb, stk, pci, 3, 1, TRUE, TRUE);}strIOftable(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){	stream *fp;	fp = *(stream **) getArgReference(stk, pci, 1);	return IOtableAll(fp, mb, stk, pci, 2, 0, TRUE, TRUE);}strIOttable(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){	return IOtableAll(GDKout, mb, stk, pci, 1, 0, FALSE, TRUE);}strIOtotable(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){	int order;	order = *(int *) getArgReference(stk, pci, 1);	(void) order;		/* fool compiler */	return IOtableAll(GDKout, mb, stk, pci, 2, order, FALSE, TRUE);}#line 439 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"strIOprint_str(int *ret, str *s){	stream *fd = GDKout;	str c;	(void) ret;	if (strNil(*s))		stream_printf(fd, "nil");	else {		for (c = *s; *c; c++) {			if (*c == '\\') {				c++;				#line 431 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"	switch(*c){	case 'n': stream_printf(fd,"\n");break;	case 't': stream_printf(fd,"\t");break;	case 'r': stream_printf(fd,"\r");break;	case '\\': stream_printf(fd,"\\");break;	default : stream_printf(fd,"\\");stream_printf(fd,"%c",*c);	}#line 452 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"			} else				stream_printf(fd, "%c", *c);		}	}	return MAL_SUCCEED;}intformatMarker(str format){	int i = 0;	str t = format;	while ((t = strchr(t, '%')) != NULL) {		t++;		i++;	}	return i;}#line 521 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"#line 502 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"io_export str IOprint_formatted_chr(int *ret, ptr fmt, chr *s);str IOprint_formatted_chr(int *ret, ptr fmt, chr *s){	stream *fd = MCgetClient()->fdout;	char *format;	str c;	(void) ret;	/* TODO: check format properly !!! including sizes */	format= *(str *)fmt;	if( format== NULL || format== str_nil) 		throw(MAL, "io.print", "Format missing");	if( formatMarker(format)!=1) 		throw(MAL, "io.print", "Too many %%");	if( *s == chr_nil) 		return IOprint_formatted_nil(fd,* (str*) fmt, 'c');	#line 477 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"	for(c= format;*c; c++){		if( *c=='\\'){			c++;			#line 431 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"	switch(*c){	case 'n': stream_printf(fd,"\n");break;	case 't': stream_printf(fd,"\t");break;	case 'r': stream_printf(fd,"\r");break;	case '\\': stream_printf(fd,"\\");break;	default : stream_printf(fd,"\\");stream_printf(fd,"%c",*c);	}#line 480 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"		} else 		if( *c== '%'){			char newformat[1024];			int i=0;			if(*(c+1)=='%'){ 				stream_printf(fd,"%c",*c);				c++; continue;			}			while(*c != 'c' && *c && i<1024)				 newformat[i++]= *c++;			newformat[i++]='c';			newformat[i]=0;			if(*c!= 'c') 			throw(MAL, "io.print", "Format limitation");			else  stream_printf(fd,newformat,*s);		} else stream_printf(fd,"%c",*c);	}#line 517 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"	return MAL_SUCCEED;}#line 521 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"#line 502 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"io_export str IOprint_formatted_sht(int *ret, ptr fmt, sht *s);str IOprint_formatted_sht(int *ret, ptr fmt, sht *s){	stream *fd = MCgetClient()->fdout;	char *format;	str c;	(void) ret;	/* TODO: check format properly !!! including sizes */	format= *(str *)fmt;	if( format== NULL || format== str_nil) 		throw(MAL, "io.print", "Format missing");	if( formatMarker(format)!=1) 		throw(MAL, "io.print", "Too many %%");	if( *s == sht_nil) 		return IOprint_formatted_nil(fd,* (str*) fmt, 'd');	#line 477 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"	for(c= format;*c; c++){		if( *c=='\\'){			c++;			#line 431 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"	switch(*c){	case 'n': stream_printf(fd,"\n");break;	case 't': stream_printf(fd,"\t");break;	case 'r': stream_printf(fd,"\r");break;	case '\\': stream_printf(fd,"\\");break;	default : stream_printf(fd,"\\");stream_printf(fd,"%c",*c);	}#line 480 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"		} else 		if( *c== '%'){			char newformat[1024];			int i=0;			if(*(c+1)=='%'){ 				stream_printf(fd,"%c",*c);				c++; continue;			}			while(*c != 'd' && *c && i<1024)				 newformat[i++]= *c++;			newformat[i++]='d';			newformat[i]=0;			if(*c!= 'd') 			throw(MAL, "io.print", "Format limitation");			else  stream_printf(fd,newformat,*s);		} else stream_printf(fd,"%c",*c);	}#line 517 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"	return MAL_SUCCEED;}#line 522 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"#line 502 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"io_export str IOprint_formatted_int(int *ret, ptr fmt, int *s);str IOprint_formatted_int(int *ret, ptr fmt, int *s){	stream *fd = MCgetClient()->fdout;	char *format;	str c;	(void) ret;	/* TODO: check format properly !!! including sizes */	format= *(str *)fmt;	if( format== NULL || format== str_nil) 		throw(MAL, "io.print", "Format missing");	if( formatMarker(format)!=1) 		throw(MAL, "io.print", "Too many %%");	if( *s == int_nil) 		return IOprint_formatted_nil(fd,* (str*) fmt, 'd');	#line 477 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"	for(c= format;*c; c++){		if( *c=='\\'){			c++;			#line 431 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"	switch(*c){	case 'n': stream_printf(fd,"\n");break;	case 't': stream_printf(fd,"\t");break;	case 'r': stream_printf(fd,"\r");break;	case '\\': stream_printf(fd,"\\");break;	default : stream_printf(fd,"\\");stream_printf(fd,"%c",*c);	}#line 480 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"		} else 		if( *c== '%'){			char newformat[1024];			int i=0;			if(*(c+1)=='%'){ 				stream_printf(fd,"%c",*c);				c++; continue;			}			while(*c != 'd' && *c && i<1024)				 newformat[i++]= *c++;			newformat[i++]='d';			newformat[i]=0;			if(*c!= 'd') 			throw(MAL, "io.print", "Format limitation");			else  stream_printf(fd,newformat,*s);		} else stream_printf(fd,"%c",*c);	}#line 517 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"	return MAL_SUCCEED;}#line 523 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"#line 502 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"io_export str IOprint_formatted_flt(int *ret, ptr fmt, flt *s);str IOprint_formatted_flt(int *ret, ptr fmt, flt *s){	stream *fd = MCgetClient()->fdout;	char *format;	str c;	(void) ret;	/* TODO: check format properly !!! including sizes */	format= *(str *)fmt;	if( format== NULL || format== str_nil) 		throw(MAL, "io.print", "Format missing");	if( formatMarker(format)!=1) 		throw(MAL, "io.print", "Too many %%");	if( *s == flt_nil) 		return IOprint_formatted_nil(fd,* (str*) fmt, 'f');	#line 477 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"	for(c= format;*c; c++){		if( *c=='\\'){			c++;			#line 431 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"	switch(*c){	case 'n': stream_printf(fd,"\n");break;	case 't': stream_printf(fd,"\t");break;	case 'r': stream_printf(fd,"\r");break;	case '\\': stream_printf(fd,"\\");break;	default : stream_printf(fd,"\\");stream_printf(fd,"%c",*c);	}#line 480 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"		} else 		if( *c== '%'){			char newformat[1024];			int i=0;			if(*(c+1)=='%'){ 				stream_printf(fd,"%c",*c);				c++; continue;			}			while(*c != 'f' && *c && i<1024)				 newformat[i++]= *c++;			newformat[i++]='f';			newformat[i]=0;			if(*c!= 'f') 			throw(MAL, "io.print", "Format limitation");			else  stream_printf(fd,newformat,*s);		} else stream_printf(fd,"%c",*c);	}#line 517 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"	return MAL_SUCCEED;}#line 524 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"#line 502 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"io_export str IOprint_formatted_dbl(int *ret, ptr fmt, dbl *s);str IOprint_formatted_dbl(int *ret, ptr fmt, dbl *s){	stream *fd = MCgetClient()->fdout;	char *format;	str c;	(void) ret;	/* TODO: check format properly !!! including sizes */	format= *(str *)fmt;	if( format== NULL || format== str_nil) 		throw(MAL, "io.print", "Format missing");	if( formatMarker(format)!=1) 		throw(MAL, "io.print", "Too many %%");	if( *s == dbl_nil) 		return IOprint_formatted_nil(fd,* (str*) fmt, 'f');	#line 477 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -