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

📄 array.c

📁 一个内存数据库的源代码这是服务器端还有客户端
💻 C
📖 第 1 页 / 共 2 页
字号:
#line 96 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/array.mx"/*============================================================================*/#include "mal_config.h"#include "array.h"#include "gdk.h"#include <math.h>#include <time.h>/*----------------------------------------------------------------------------*/#ifdef WIN32#ifndef LIBARRAY#define array_export extern __declspec(dllimport)#else#define array_export extern __declspec(dllexport)#endif#else#define array_export extern#endifarray_export str ARRAYproduct(int *ret, int *bid, int *rid);array_export str ARRAYproject(int *ret, int *bid, int *cst);array_export str ARRAYprint(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);#line 199 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/array.mx"#line 119 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/array.mx"array_export str ARRAYgrid_int(int *ret, int *groups, int *groupsize, int *clustersize, int *offset);array_export str ARRAYgridShift_int(int *ret, int *groups, int *groupsize, int *clustersize, int *offset, int *shift);array_export str ARRAYgridBAT_int(int *ret, int *bid, int *groups, int *groupsize, int *clustersize, int *offset);array_export str ARRAYgridBATshift_int(int *ret, int *bid, int *groups, int *groupsize, int *clustersize, int *offset, int *shift);intfillgrid_int(BAT **out, int *groups, int *groupsize, int *clustersize, int *offset, int *shift){	register int *ptr;	int i = *groups;	int n = *groupsize + *offset;	int r = *clustersize;	int o = *offset;	int s = *shift;#ifdef EXCESSIVE_DEBUGGING	fprintf(stderr, "[grid] (%d,%d,%d,%d)", i, n, r, o);#endif	ptr = get_int_ptr(*out);	while (i-- > 0) {		register int ni = (int) o;		while (ni < n) {			register int ri = (int) r;			while (ri-- > 0)				(*(ptr ++)) = ni * s;			ni++;		}	}#ifdef EXCESSIVE_DEBUGGING	fprintf(stderr, "- done\n");#endif	return GDK_SUCCEED;}intgrid_int(BAT **out, int *groups, int *groupsize, int *clustersize, int *offset){	int i = *groups;	int n = *groupsize + *offset;	int r = *clustersize;	int o = *offset;	int s = 1;#ifdef EXCESSIVE_DEBUGGING	fprintf(stderr, "[grid] (%d,%d,%d,%d)", i, n, r, o);#endif	new_int_bat(*out, (i * (n - o) * r));	if (*out == 0)		return GDK_FAIL;	add_ints(*out, (i * (n - o) * r));	return fillgrid_int(out, groups, groupsize, clustersize, offset, &s);}intgridShift_int(BAT **out, int *groups, int *groupsize, int *clustersize, int *offset, int *shift){	int i = *groups;	int n = *groupsize + *offset;	int r = *clustersize;	int o = *offset;#ifdef EXCESSIVE_DEBUGGING	fprintf(stderr, "[grid] (%d,%d,%d,%d)", i, n, r, o);#endif	new_int_bat(*out, (i * (n - o) * r));	if (*out == 0)		return GDK_FAIL;	add_ints(*out, (i * (n - o) * r));	return fillgrid_int(out, groups, groupsize, clustersize, offset, shift);}#line 199 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/array.mx"#line 119 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/array.mx"array_export str ARRAYgrid_lng(lng *ret, lng *groups, lng *groupsize, lng *clustersize, lng *offset);array_export str ARRAYgridShift_lng(lng *ret, lng *groups, lng *groupsize, lng *clustersize, lng *offset, lng *shift);array_export str ARRAYgridBAT_lng(lng *ret, lng *bid, lng *groups, lng *groupsize, lng *clustersize, lng *offset);array_export str ARRAYgridBATshift_lng(lng *ret, lng *bid, lng *groups, lng *groupsize, lng *clustersize, lng *offset, lng *shift);intfillgrid_lng(BAT **out, lng *groups, lng *groupsize, lng *clustersize, lng *offset, lng *shift){	register lng *ptr;	lng i = *groups;	lng n = *groupsize + *offset;	lng r = *clustersize;	lng o = *offset;	lng s = *shift;#ifdef EXCESSIVE_DEBUGGING	fprintf(stderr, "[grid] (%d,%d,%d,%d)", i, n, r, o);#endif	ptr = get_lng_ptr(*out);	while (i-- > 0) {		register int ni = (int) o;		while (ni < n) {			register int ri = (int) r;			while (ri-- > 0)				(*(ptr ++)) = ni * s;			ni++;		}	}#ifdef EXCESSIVE_DEBUGGING	fprintf(stderr, "- done\n");#endif	return GDK_SUCCEED;}intgrid_lng(BAT **out, lng *groups, lng *groupsize, lng *clustersize, lng *offset){	lng i = *groups;	lng n = *groupsize + *offset;	lng r = *clustersize;	lng o = *offset;	lng s = 1;#ifdef EXCESSIVE_DEBUGGING	fprintf(stderr, "[grid] (%d,%d,%d,%d)", i, n, r, o);#endif	new_lng_bat(*out, (i * (n - o) * r));	if (*out == 0)		return GDK_FAIL;	add_lngs(*out, (i * (n - o) * r));	return fillgrid_lng(out, groups, groupsize, clustersize, offset, &s);}intgridShift_lng(BAT **out, lng *groups, lng *groupsize, lng *clustersize, lng *offset, lng *shift){	lng i = *groups;	lng n = *groupsize + *offset;	lng r = *clustersize;	lng o = *offset;#ifdef EXCESSIVE_DEBUGGING	fprintf(stderr, "[grid] (%d,%d,%d,%d)", i, n, r, o);#endif	new_lng_bat(*out, (i * (n - o) * r));	if (*out == 0)		return GDK_FAIL;	add_lngs(*out, (i * (n - o) * r));	return fillgrid_lng(out, groups, groupsize, clustersize, offset, shift);}#line 200 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/array.mx"#line 205 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/array.mx"#include "mal.h"#line 267 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/array.mx"#line 207 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/array.mx"strARRAYgrid_int(int *ret, int *groups, int *groupsize, int *clustersize, int *offset){	BAT *bn;	if (grid_int(&bn, groups, groupsize, clustersize, offset) == GDK_FAIL)		throw(MAL, "array.grid", "Failed to create the grid");	if (!(bn->batDirty&2)) bn = BATsetaccess(bn, BAT_READ); \	*ret = bn->batCacheid;	BBPkeepref((int)*ret);	return MAL_SUCCEED;}strARRAYgridShift_int(int *ret, int *groups, int *groupsize, int *clustersize, int *offset, int *shift){	BAT *bn;	if (gridShift_int(&bn, groups, groupsize, clustersize, offset, shift) == GDK_FAIL)		throw(MAL, "array.grid", "Failed to create the grid");	if (!(bn->batDirty&2)) bn = BATsetaccess(bn, BAT_READ); \	*ret = bn->batCacheid;	BBPkeepref((int)*ret);	return MAL_SUCCEED;}strARRAYgridBAT_int(int *ret, int *bid, int *groups, int *groupsize, int *clustersize, int *offset){	BAT *bn;	int shift = 1;	if ((bn = BATdescriptor(*bid)) == NULL) {		throw(MAL, "array.grid", "Cannot access descriptor");	}	if (fillgrid_int(&bn, groups, groupsize, clustersize, offset, &shift) == GDK_FAIL)		throw(MAL, "array.grid", "Failed to create the grid");	if (!(bn->batDirty&2)) bn = BATsetaccess(bn, BAT_READ); \	*ret = bn->batCacheid;	BBPkeepref((int)*ret);	return MAL_SUCCEED;}strARRAYgridBATshift_int(int *ret, int *bid, int *groups, int *groupsize, int *clustersize, int *offset, int *shift){	BAT *bn;	if ((bn = BATdescriptor(*bid)) == NULL) {		throw(MAL, "array.grid", "Cannot access descriptor");	}	if (fillgrid_int(&bn, groups, groupsize, clustersize, offset, shift) == GDK_FAIL)		throw(MAL, "array.grid", "Failed to create the grid");	if (!(bn->batDirty&2)) bn = BATsetaccess(bn, BAT_READ); \	*ret = bn->batCacheid;	BBPkeepref((int)*ret);	return MAL_SUCCEED;}#line 267 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/array.mx"#line 207 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/array.mx"strARRAYgrid_lng(lng *ret, lng *groups, lng *groupsize, lng *clustersize, lng *offset){	BAT *bn;	if (grid_lng(&bn, groups, groupsize, clustersize, offset) == GDK_FAIL)		throw(MAL, "array.grid", "Failed to create the grid");	if (!(bn->batDirty&2)) bn = BATsetaccess(bn, BAT_READ); \	*ret = bn->batCacheid;	BBPkeepref((int)*ret);	return MAL_SUCCEED;}strARRAYgridShift_lng(lng *ret, lng *groups, lng *groupsize, lng *clustersize, lng *offset, lng *shift){	BAT *bn;	if (gridShift_lng(&bn, groups, groupsize, clustersize, offset, shift) == GDK_FAIL)		throw(MAL, "array.grid", "Failed to create the grid");	if (!(bn->batDirty&2)) bn = BATsetaccess(bn, BAT_READ); \	*ret = bn->batCacheid;	BBPkeepref((int)*ret);	return MAL_SUCCEED;}strARRAYgridBAT_lng(lng *ret, lng *bid, lng *groups, lng *groupsize, lng *clustersize, lng *offset){	BAT *bn;	lng shift = 1;	if ((bn = BATdescriptor(*bid)) == NULL) {		throw(MAL, "array.grid", "Cannot access descriptor");	}	if (fillgrid_lng(&bn, groups, groupsize, clustersize, offset, &shift) == GDK_FAIL)		throw(MAL, "array.grid", "Failed to create the grid");	if (!(bn->batDirty&2)) bn = BATsetaccess(bn, BAT_READ); \	*ret = bn->batCacheid;	BBPkeepref((int)*ret);	return MAL_SUCCEED;}strARRAYgridBATshift_lng(lng *ret, lng *bid, lng *groups, lng *groupsize, lng *clustersize, lng *offset, lng *shift){	BAT *bn;	if ((bn = BATdescriptor(*bid)) == NULL) {		throw(MAL, "array.grid", "Cannot access descriptor");	}	if (fillgrid_lng(&bn, groups, groupsize, clustersize, offset, shift) == GDK_FAIL)		throw(MAL, "array.grid", "Failed to create the grid");	if (!(bn->batDirty&2)) bn = BATsetaccess(bn, BAT_READ); \	*ret = bn->batCacheid;	BBPkeepref((int)*ret);	return MAL_SUCCEED;}#line 268 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/array.mx"#line 305 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/array.mx"#line 272 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/array.mx"array_export str ARRAYmultiply_sht_lng(int *ret, int *bid, int *rid);strARRAYmultiply_sht_lng(int *ret, int *bid, int *rid){	BAT *bn, *b, *r;	BUN p,q, s,t;	int x1,x2;	lng val;	oid o= oid_nil;	if( (b= BATdescriptor(*bid)) == NULL ){		 throw(MAL, "array.*", "Cannot access descriptor");	}	if( (r= BATdescriptor(*rid)) == NULL ){		BBPreleaseref(b->batCacheid);		 throw(MAL, "array.*", "Cannot access descriptor");	}	bn= BATnew(TYPE_void, TYPE_lng, BATcount(b)*BATcount(r));	BATseqbase(bn,0);	BATloopFast(b,p,q,x1){		BATloopFast(r,s,t,x2){			val = (*(sht*) BUNtail(b,p)) * (*(sht*)BUNtail(r,s));			BUNfastins(bn,&o,&val);		}	}	if (!(bn->batDirty&2)) bn = BATsetaccess(bn, BAT_READ); \	*ret= bn->batCacheid;	BBPkeepref(*ret);	BBPreleaseref(b->batCacheid);	BBPreleaseref(r->batCacheid);	return MAL_SUCCEED;}#line 305 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/array.mx"#line 272 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/array.mx"array_export str ARRAYmultiply_sht_int(int *ret, int *bid, int *rid);strARRAYmultiply_sht_int(int *ret, int *bid, int *rid){	BAT *bn, *b, *r;	BUN p,q, s,t;	int x1,x2;	int val;	oid o= oid_nil;	if( (b= BATdescriptor(*bid)) == NULL ){		 throw(MAL, "array.*", "Cannot access descriptor");	}	if( (r= BATdescriptor(*rid)) == NULL ){		BBPreleaseref(b->batCacheid);		 throw(MAL, "array.*", "Cannot access descriptor");

⌨️ 快捷键说明

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