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

📄 mal_atom.c

📁 一个内存数据库的源代码这是服务器端还有客户端
💻 C
字号:
#line 122 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/mal/mal_atom.mx"#include "mal_config.h"#include "mal_atom.h"#include "mal_namespace.h"#include "mal_exception.h"#ifndef MAXPATHLEN#define MAXPATHLEN 1024#endifvoid setAtomName(InstrPtr pci){	char buf[MAXPATHLEN];	snprintf(buf,MAXPATHLEN,"#%s", getFunctionId(pci));	setFunctionId(pci, putName(buf,strlen(buf)));#ifdef MAL_ATOM_DEBUG	stream_printf(GDKout,"replaced the function %s.%s\n",		getModuleId(pci),getFunctionId(pci));#endif}int malAtomProperty(MalBlkPtr mb, InstrPtr pci){	str name= getFunctionId(pci);	int tpe = getTypeIndex(getModuleId(pci), strlen(getModuleId(pci)), TYPE_any);	(void) mb; /* fool compilers */#ifdef MAL_ATOM_DEBUG	stream_printf(GDKout,"Atomproperty %s.%s\n",		getModuleId(pci),getFunctionId(pci));#endif	if( pci->fcn == 0)		GDKwarning("malAtomProperty:function not bound\n");	if( tpe<0 || tpe>= GDKatomcnt)		GDKfatal("malAtomProperty:illegal type name:%s",name);	switch(name[0]){	case 'd': 		if( idcmp("del",name)==0 && pci->argc==1){			BATatoms[tpe].atomDel= (void (*)(Heap *, var_t *)) pci->fcn;			setAtomName(pci);			return 1;		}		break;	case 'c': 		if( idcmp("cmp",name)==0 && pci->argc==1){			BATatoms[tpe].atomCmp= (int (*)(ptr, ptr)) pci->fcn;			setAtomName(pci);			return 1;		} 		if( idcmp("convert",name)==0 && pci->argc==1){			BATatoms[tpe].atomConvert= (void (*)(ptr, int)) pci->fcn;			setAtomName(pci);			return 1;		} 		break;	case 'f': 		if( idcmp("fromstr",name)==0 && pci->argc==1){			BATatoms[tpe].atomFromStr= (int (*)(str, int *, ptr *)) pci->fcn;			setAtomName(pci);			return 1;		} 		if( idcmp("fix",name)==0 && pci->argc==1){			BATatoms[tpe].atomFix= (int (*)(ptr)) pci->fcn;			setAtomName(pci);			return 1;		} 		break;	case 'h':		if( idcmp("heap",name)==0 && pci->argc==1){			/* heap function makes an atom varsized */			BATatoms[tpe].size = sizeof(var_t);			BATatoms[tpe].varsized = 1;			BATatoms[tpe].align = sizeof(var_t);			BATatoms[tpe].atomHeap= (void (*)(Heap *, size_t)) pci->fcn;			setAtomName(pci);			return 1;		} 		if( idcmp("heapconvert",name)==0 && pci->argc==1){			BATatoms[tpe].atomHeapConvert= (void (*)(Heap *, int)) pci->fcn;			setAtomName(pci);			return 1;		} 		if( idcmp("hash",name)==0 && pci->argc==1){			BATatoms[tpe].atomHash= (hash_t (*)(ptr)) pci->fcn;			setAtomName(pci);			return 1;		} 		if( idcmp("heapcheck",name)==0 && pci->argc==1){			BATatoms[tpe].atomHeapCheck= (int (*)(Heap *, HeapRepair *)) pci->fcn;			setAtomName(pci);			return 1;		} 		break;	case 'l': 		if( idcmp("length",name)==0 && pci->argc==1){			BATatoms[tpe].atomLen= (int (*)(ptr)) pci->fcn;			setAtomName(pci);			return 1;		} 		break;	case 'n':		if( idcmp("null",name)==0 && pci->argc==1){                        ptr atmnull = ((ptr (*)(void)) pci->fcn) ();						BATatoms[tpe].atomNull= atmnull;			setAtomName(pci);			return 1;		}		if( idcmp("nequal",name)==0 && pci->argc==1){			BATatoms[tpe].atomCmp= (int (*)(ptr, ptr)) pci->fcn;			setAtomName(pci);			return 1;		}		break; 	case 'p': 		if( idcmp("put",name)==0 && pci->argc==1){			BATatoms[tpe].atomPut= (var_t (*)(Heap *, var_t *, ptr)) pci->fcn;			setAtomName(pci);			return 1;		} 		break;	case 's': 		#line 98 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/mal/mal_atom.mx"if( idcmp("storage",name) || pci->argc != 1)	return 0;else{#ifdef MAL_ATOM_DEBUG	stream_printf(GDKout,"set the atom property %s.%s\n",		getModuleId(pci),getFunctionId(pci));#endif	BATatoms[tpe].storage= (long) (*pci->fcn)();	setAtomName(pci);	return 1;}#line 240 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/mal/mal_atom.mx"; 		break;	case 't': 		if( idcmp("tostr",name)==0 && pci->argc==1){			BATatoms[tpe].atomToStr= (int (*)(str *, int *, ptr)) pci->fcn;			setAtomName(pci);			return 1;		} 		break;	case 'u': 		if( idcmp("unfix",name)==0 && pci->argc==1){			BATatoms[tpe].atomUnfix= (int (*)(ptr)) pci->fcn;			setAtomName(pci);			return 1;		} 		break;	case 'v': 		#line 98 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/mal/mal_atom.mx"if( idcmp("varsized",name) || pci->argc != 1)	return 0;else{#ifdef MAL_ATOM_DEBUG	stream_printf(GDKout,"set the atom property %s.%s\n",		getModuleId(pci),getFunctionId(pci));#endif	BATatoms[tpe].varsized= (long) (*pci->fcn)();	setAtomName(pci);	return 1;}#line 257 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/mal/mal_atom.mx"  		break;	case 'r': 		if( idcmp("read",name)==0 && pci->argc==1){			BATatoms[tpe].atomRead= (void *(*)(void *, stream *, size_t)) pci->fcn;			setAtomName(pci);			return 1;		} 		break;	case 'w': 		if( idcmp("write",name)==0 && pci->argc==1){			BATatoms[tpe].atomWrite= (int (*)(void *, stream *, size_t)) pci->fcn;			setAtomName(pci);			return 1;		} 		break;	}	return 0;}#line 283 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/mal/mal_atom.mx"void malAtomDefinition(str name, int tpe){	int i;	if(strlen(name) >= IDLENGTH){		showException(SYNTAX,"atomDefinition", "Atom name '%s' too long", name);		return;	}	if( ATOMindex(name)>=0){		showException(TYPE,"atomDefinition", "Redefinition of atom '%s'", name);		return;	}	if( tpe<0 || tpe >=GDKatomcnt){		showException(TYPE,"atomDefinition", "Undefined atom inheritance '%s'", name);		return;	}#ifdef MAL_ATOM_DEBUG	stream_printf(GDKout,"introduce a new atom type '%s'  %d\n",name,tpe);#endif		ATOMproperty(name,"",  (int (*)()) 0);	i= ATOMindex(name);	/* overload atom ? */	if (tpe) { 		memcpy((char*)(BATatoms+i),			(char*)(BATatoms+tpe), sizeof(BATatoms[tpe]));		strncpy(BATatoms[i].name, name, IDLENGTH);		BATatoms[i].storage= BATatoms[tpe].storage;	} else { /* cannot overload void atoms */ 		BATatoms[i].storage = i;	}}#line 319 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/mal/mal_atom.mx"int malAtomFixed(int size, int align, char *name){	int i = 0;	ATOMproperty(name,"",  (int (*)()) 0);	i= ATOMindex(name);	memcpy((char*)(BATatoms+i),		(char*)(BATatoms+TYPE_chr), sizeof(BATatoms[TYPE_chr]));	strncpy(BATatoms[i].name, name, IDLENGTH);	BATatoms[i].storage= i;	BATatoms[i].size = size;	BATatoms[i].align = align;	BATatoms[i].linear = FALSE;	return i;}int malAtomArray(int tpe, int size){	int i;	char name[IDLENGTH];	str nme;	nme = getTypeName(tpe);	stream_printf(GDKout,"enter a new array type definition %s %d\n", nme,size);	snprintf(name,IDLENGTH,"%s_", nme);	i= strlen(name);	snprintf(name+i,IDLENGTH-i,"%d", size);	GDKfree(nme);	if(strlen(name) >= IDLENGTH){		showException(SYNTAX,"atomArray", "Atom name '%s' too long", name);		return -1;  /* ERROR! */	}#ifdef MAL_ATOM_DEBUG	stream_printf(GDKout,"new type name %s\n",name);#endif	ATOMproperty(name,"",  (int (*)()) 0);	i= ATOMindex(name);	memcpy((char*)(BATatoms+i),		(char*)(BATatoms+tpe), sizeof(BATatoms[tpe]));	strncpy(BATatoms[i].name, name, IDLENGTH);	BATatoms[i].storage= tpe;	BATatoms[i].size *= size;	BATatoms[i].linear = FALSE;#ifdef MAL_ATOM_DEBUG	stream_printf(GDKout,"new type %d\n",i);#endif	return i;}void showAtoms(stream *fd){	int i;	for(i=0;BATatoms[i].name[0] && i<TYPE_any; i++){		stream_printf(fd,"%s", BATatoms[i].name);		if( BATatoms[i+1].name[0]) stream_printf(fd,",");	}	stream_printf(fd,"\n");}#line 375 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/mal/mal_atom.mx"

⌨️ 快捷键说明

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