📄 array.c
字号:
#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 + -