📄 batstr.c
字号:
#line 162 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"#include "mal_config.h"#include <gdk.h>#include "ctype.h"#include <string.h>#include "mal_exception.h"#include "str.h"#ifdef HAVE_REGEX_H#include <regex.h>#endif#ifdef HAVE_LANGINFO_H#include <langinfo.h>#endif#ifdef HAVE_ICONV_H#include <iconv.h>#endif#ifdef WIN32#ifndef LIBBATSTR#define batstr_export extern __declspec(dllimport)#else#define batstr_export extern __declspec(dllexport)#endif#else#define batstr_export extern#endif#define prepareOperand(X,Y,Z) \ if( (X= BATdescriptor(*Y)) == NULL ) \ throw(MAL, "batstr." Z, "Cannot access descriptor");#define prepareOperand2(X,Y,A,B,Z) \ if( (X= BATdescriptor(*Y)) == NULL ) \ throw(MAL, "batstr." Z, "Cannot access descriptor"); \ if( (A= BATdescriptor(*B)) == NULL ){\ BBPreleaseref(X->batCacheid); \ throw(MAL, "batstr."Z, "Cannot access descriptor"); \ }#define prepareResult(X,Y,T,Z) \ X= BATnew(Y->htype,T,BATcount(Y)); \ if( Y->htype== TYPE_void) \ BATseqbase(X, Y->hseqbase); \ if( X == NULL){ \ BBPreleaseref(Y->batCacheid); \ throw(MAL, "batstr." Z, "no space available "); \ } \ X->hsorted=Y->hsorted; \ X->tsorted=0; #define prepareResult2(X,Y,A,T,Z) \ X= BATnew(Y->htype,T,BATcount(Y)); \ if( Y->htype== TYPE_void) \ BATseqbase(X, Y->hseqbase); \ if( X == NULL){ \ BBPreleaseref(Y->batCacheid); \ BBPreleaseref(A->batCacheid); \ throw(MAL, "batstr." Z, "no space available "); \ } \ X->hsorted=Y->hsorted; \ X->tsorted=0; #define finalizeResult(X,Y,Z) \ if (!((Y)->batDirty&2)) (Y) = BATsetaccess((Y), BAT_READ); \ *X = (Y)->batCacheid; \ BBPkeepref(*(X));\ BBPreleaseref(Z->batCacheid);batstr_export str STRbatsubstringcst(int *ret, int *bid, int *start, int *length);batstr_export str STRbatsubstring(int *ret, int *bid, int *start, int *length);#line 258 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"#line 230 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"batstr_export str STRbatLength(int *ret, int *l);str STRbatLength(int *ret, int *l){ BAT *bn, *b; BUN p,q; int xx; str x; int y, *yp = &y; prepareOperand(b,l,"Length"); prepareResult(bn,b,TYPE_int,"Length"); BATloopFast(b, p, q, xx) { ptr h = BUNhead(b,p); x= (str) BUNtail(b,p); if(x== 0 || *x == 0 || strcmp(x,str_nil)== 0) y= int_nil; else strLength(yp,x); bunfastins(bn, h, yp); } finalizeResult(ret,bn,b); return MAL_SUCCEED;bunins_failed: BBPreleaseref(b->batCacheid); BBPunfix(bn->batCacheid); throw(MAL, "batstr.Length", "bunins failed");}#line 258 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"#line 230 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"batstr_export str STRbatBytes(int *ret, int *l);str STRbatBytes(int *ret, int *l){ BAT *bn, *b; BUN p,q; int xx; str x; int y, *yp = &y; prepareOperand(b,l,"Bytes"); prepareResult(bn,b,TYPE_int,"Bytes"); BATloopFast(b, p, q, xx) { ptr h = BUNhead(b,p); x= (str) BUNtail(b,p); if(x== 0 || *x == 0 || strcmp(x,str_nil)== 0) y= int_nil; else strBytes(yp,x); bunfastins(bn, h, yp); } finalizeResult(ret,bn,b); return MAL_SUCCEED;bunins_failed: BBPreleaseref(b->batCacheid); BBPunfix(bn->batCacheid); throw(MAL, "batstr.Bytes", "bunins failed");}#line 259 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"#line 289 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"#line 262 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"batstr_export str STRbatLower(int *ret, int *l);str STRbatLower(int *ret, int *l){ BAT *bn, *b; BUN p,q; int xx; str x; str y, *yp = &y; prepareOperand(b,l,"Lower"); prepareResult(bn,b,TYPE_str,"Lower"); BATloopFast(b, p, q, xx) { ptr h = BUNhead(b,p); x= (str) BUNtail(b,p); if(x== 0 || *x == 0 || strcmp(x,str_nil)== 0) y = (str)str_nil; else strLower(yp,x); bunfastins(bn, h, *yp); } finalizeResult(ret,bn,b); return MAL_SUCCEED;bunins_failed: BBPreleaseref(b->batCacheid); BBPunfix(bn->batCacheid); throw(MAL, "batstr.Lower", "bunins failed");}#line 289 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"#line 262 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"batstr_export str STRbatUpper(int *ret, int *l);str STRbatUpper(int *ret, int *l){ BAT *bn, *b; BUN p,q; int xx; str x; str y, *yp = &y; prepareOperand(b,l,"Upper"); prepareResult(bn,b,TYPE_str,"Upper"); BATloopFast(b, p, q, xx) { ptr h = BUNhead(b,p); x= (str) BUNtail(b,p); if(x== 0 || *x == 0 || strcmp(x,str_nil)== 0) y = (str)str_nil; else strUpper(yp,x); bunfastins(bn, h, *yp); } finalizeResult(ret,bn,b); return MAL_SUCCEED;bunins_failed: BBPreleaseref(b->batCacheid); BBPunfix(bn->batCacheid); throw(MAL, "batstr.Upper", "bunins failed");}#line 290 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"#line 262 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"batstr_export str STRbatStrip(int *ret, int *l);str STRbatStrip(int *ret, int *l){ BAT *bn, *b; BUN p,q; int xx; str x; str y, *yp = &y; prepareOperand(b,l,"Strip"); prepareResult(bn,b,TYPE_str,"Strip"); BATloopFast(b, p, q, xx) { ptr h = BUNhead(b,p); x= (str) BUNtail(b,p); if(x== 0 || *x == 0 || strcmp(x,str_nil)== 0) y = (str)str_nil; else strStrip(yp,x); bunfastins(bn, h, *yp); } finalizeResult(ret,bn,b); return MAL_SUCCEED;bunins_failed: BBPreleaseref(b->batCacheid); BBPunfix(bn->batCacheid); throw(MAL, "batstr.Strip", "bunins failed");}#line 291 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"#line 262 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"batstr_export str STRbatLtrim(int *ret, int *l);str STRbatLtrim(int *ret, int *l){ BAT *bn, *b; BUN p,q; int xx; str x; str y, *yp = &y; prepareOperand(b,l,"Ltrim"); prepareResult(bn,b,TYPE_str,"Ltrim"); BATloopFast(b, p, q, xx) { ptr h = BUNhead(b,p); x= (str) BUNtail(b,p); if(x== 0 || *x == 0 || strcmp(x,str_nil)== 0) y = (str)str_nil; else strLtrim(yp,x); bunfastins(bn, h, *yp); } finalizeResult(ret,bn,b); return MAL_SUCCEED;bunins_failed: BBPreleaseref(b->batCacheid); BBPunfix(bn->batCacheid); throw(MAL, "batstr.Ltrim", "bunins failed");}#line 292 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"#line 262 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"batstr_export str STRbatRtrim(int *ret, int *l);str STRbatRtrim(int *ret, int *l){ BAT *bn, *b; BUN p,q; int xx; str x; str y, *yp = &y; prepareOperand(b,l,"Rtrim"); prepareResult(bn,b,TYPE_str,"Rtrim"); BATloopFast(b, p, q, xx) { ptr h = BUNhead(b,p); x= (str) BUNtail(b,p); if(x== 0 || *x == 0 || strcmp(x,str_nil)== 0) y = (str)str_nil; else strRtrim(yp,x); bunfastins(bn, h, *yp); } finalizeResult(ret,bn,b); return MAL_SUCCEED;bunins_failed: BBPreleaseref(b->batCacheid); BBPunfix(bn->batCacheid); throw(MAL, "batstr.Rtrim", "bunins failed");}#line 293 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"#line 297 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"#line 329 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"#line 298 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"batstr_export str STRbatEqualCst(int *ret, int *l, str *cst);strSTRbatEqualCst(int *ret, int *l, str *cst){ BAT *bn, *b; BUN p, q; int xx; str x; bit y; prepareOperand(b, l, "=="); prepareResult(bn, b, TYPE_bit, "=="); BATloopFast(b, p, q, xx) { ptr h = BUNhead(b, p); x = (str) BUNtail(b, p); if (x == 0 || *x == 0 || strcmp(x, str_nil) == 0) y = bit_nil; else y = strcmp(x, *cst) == 0; bunfastins(bn, h, &y); } bn->tsorted = (BATtordered(b)&1)?GDK_SORTED_REV:0; finalizeResult(ret, bn, b); return MAL_SUCCEED;bunins_failed: BBPreleaseref(b->batCacheid); BBPunfix(bn->batCacheid); throw(MAL, "batstr.==", "bunins failed");}#line 329 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"#line 298 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"batstr_export str STRbatNotEqualCst(int *ret, int *l, str *cst);strSTRbatNotEqualCst(int *ret, int *l, str *cst){ BAT *bn, *b; BUN p, q; int xx; str x; bit y; prepareOperand(b, l, "!="); prepareResult(bn, b, TYPE_bit, "!="); BATloopFast(b, p, q, xx) { ptr h = BUNhead(b, p); x = (str) BUNtail(b, p); if (x == 0 || *x == 0 || strcmp(x, str_nil) == 0) y = bit_nil; else y = strcmp(x, *cst) != 0; bunfastins(bn, h, &y); } bn->tsorted = (BATtordered(b)&1)?GDK_SORTED:0; finalizeResult(ret, bn, b); return MAL_SUCCEED;bunins_failed: BBPreleaseref(b->batCacheid); BBPunfix(bn->batCacheid); throw(MAL, "batstr.!=", "bunins failed");}#line 330 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"#line 340 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"#line 382 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"#line 341 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"batstr_export str STRbatEqual(int *ret, int *l, int *r);strSTRbatEqual(int *ret, int *l, int *r){ BAT *bn, *left, *right; BUN o, p, q; int xx, yy; prepareOperand2(left, l, right, r, "=="); #line 337 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx" if( BATcount(left) != BATcount(right) ) throw(MAL, "batcalc.CMDcompare==", "requires bats of identical size");#line 350 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx" prepareResult2(bn, left, right, TYPE_bit, "=="); o = BUNfirst(left); p = BUNfirst(right); q = BUNlast(right); xx = BUNsize(left); yy = BUNsize(right); while (p < q) { bit y = TRUE; ptr h = BUNhead(left, o); ptr tl = BUNtail(left, o); ptr tr = BUNtail(right, p); if (tl == 0 || tr == 0 || !(strcmp(tl, tr) == 0)) y = FALSE; bunfastins(bn, h, &y); o += xx; p += yy; } BBPreleaseref(right->batCacheid); bn->tsorted = (BATtordered(left)&BATtordered(right)&1)?GDK_SORTED_REV:0; finalizeResult(ret, bn, left); return MAL_SUCCEED;bunins_failed: BBPreleaseref(left->batCacheid); BBPreleaseref(right->batCacheid); BBPunfix(*ret); throw(MAL, "batstr.==", "bunins failed");}#line 382 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"#line 341 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"batstr_export str STRbatNotEqual(int *ret, int *l, int *r);strSTRbatNotEqual(int *ret, int *l, int *r){ BAT *bn, *left, *right; BUN o, p, q; int xx, yy; prepareOperand2(left, l, right, r, "!="); #line 337 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx" if( BATcount(left) != BATcount(right) ) throw(MAL, "batcalc.CMDcompare!=", "requires bats of identical size");#line 350 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx" prepareResult2(bn, left, right, TYPE_bit, "!="); o = BUNfirst(left); p = BUNfirst(right); q = BUNlast(right); xx = BUNsize(left); yy = BUNsize(right); while (p < q) { bit y = TRUE; ptr h = BUNhead(left, o); ptr tl = BUNtail(left, o); ptr tr = BUNtail(right, p); if (tl == 0 || tr == 0 || !(strcmp(tl, tr) != 0)) y = FALSE; bunfastins(bn, h, &y); o += xx; p += yy; } BBPreleaseref(right->batCacheid); bn->tsorted = (BATtordered(left)&BATtordered(right)&1)?GDK_SORTED:0; finalizeResult(ret, bn, left); return MAL_SUCCEED;bunins_failed: BBPreleaseref(left->batCacheid); BBPreleaseref(right->batCacheid); BBPunfix(*ret); throw(MAL, "batstr.!=", "bunins failed");}#line 383 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"#line 545 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/batstr.mx"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -