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

📄 batstr.c

📁 一个内存数据库的源代码这是服务器端还有客户端
💻 C
📖 第 1 页 / 共 3 页
字号:
#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 + -