📄 mal_type.c
字号:
#line 113 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/mal/mal_type.mx"#include "mal_config.h"#include "mal_type.h"strgetTypeName(malType tpe){ char buf[PATHLENGTH], *s; int l = PATHLENGTH, k;#ifdef DEBUG_MAL_TYPE stream_printf(GDKout, "maltype: %d %d %d", tpe, getHeadType(tpe), getTailType(tpe)); stream_printf(GDKout, " [%d,%d]", getHeadIndex(tpe), getTailIndex(tpe)); stream_printf(GDKout, " : %s\n", (isaBatType(tpe) ? "bat" : ""));#endif if (tpe == TYPE_any) return GDKstrdup("any"); if (isaBatType(tpe)) { k = getHeadIndex(tpe); if (k) snprintf(buf, l, "bat[:any%c%d,", TMPMARKER, k); else if (getHeadType(tpe) == TYPE_any) snprintf(buf, l, "bat[:any,"); else snprintf(buf, l, "bat[:%s,", ATOMname(getHeadType(tpe))); l -= strlen(buf); s = buf + strlen(buf); k = getTailIndex(tpe); if (k) snprintf(s, l, ":any%c%d]",TMPMARKER, k); else if (getTailType(tpe) == TYPE_any) snprintf(s, l, ":any]"); else snprintf(s, l, ":%s]", ATOMname(getTailType(tpe)));#ifdef DEBUG_MAL_TYPE stream_printf(GDKout, "%s\n", buf);#endif return GDKstrdup(buf); } if (isAnyExpression(tpe)) { strncpy(buf, "any", 4); if (isAnyExpression(tpe)) snprintf(buf + 3, PATHLENGTH - 3, "%c%d", TMPMARKER, getTailIndex(tpe)); return GDKstrdup(buf); }#ifdef DEBUG_MAL_TYPE stream_printf(GDKout, "Rely on GDK atom %s\n", ATOMname(tpe));#endif return GDKstrdup(ATOMname(tpe));}#line 167 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/mal/mal_type.mx"int gdkCoercionTable[12][12] = {/* void bit chr sht bat int oid ptr flt dbl lng str *//* void */ {TYPE_void, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_str},/* bit */ {TYPE_any, TYPE_bit, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_str},/* chr */ {TYPE_any, TYPE_any, TYPE_chr, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_str},/* sht */ {TYPE_any, TYPE_any, TYPE_any, TYPE_sht, TYPE_any, TYPE_int, TYPE_any, TYPE_any, TYPE_flt, TYPE_dbl, TYPE_lng, TYPE_str},/* bat */ {TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_bat, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_str},/* int */ {TYPE_any, TYPE_any, TYPE_any, TYPE_int, TYPE_any, TYPE_int, TYPE_any, TYPE_any, TYPE_flt, TYPE_dbl, TYPE_lng, TYPE_str},/* oid */ {TYPE_any, TYPE_any, TYPE_any, TYPE_int, TYPE_any, TYPE_int, TYPE_oid, TYPE_any, TYPE_any, TYPE_int, TYPE_any, TYPE_str},/* ptr */ {TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_ptr, TYPE_any, TYPE_any, TYPE_any, TYPE_str},/* flt */ {TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_flt, TYPE_dbl, TYPE_any, TYPE_str},/* dbl */ {TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_any, TYPE_dbl, TYPE_dbl, TYPE_any, TYPE_str},/* lng */ {TYPE_any, TYPE_any, TYPE_any, TYPE_lng, TYPE_any, TYPE_lng, TYPE_any, TYPE_any, TYPE_flt, TYPE_dbl, TYPE_lng, TYPE_str},/* str */ {TYPE_str, TYPE_str, TYPE_str, TYPE_str, TYPE_str, TYPE_str, TYPE_str, TYPE_str, TYPE_str, TYPE_str, TYPE_str, TYPE_str}};#line 213 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/mal/mal_type.mx"malTypecoercion(malType t1, malType t2){ if (t1 == t2) return t1; if (t1 < 0 || t1 >= TYPE_str) return t1; if (t2 < 0 || t2 >= TYPE_str) return t2; return gdkCoercionTable[(int) t1][(int) t2];}#line 234 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/mal/mal_type.mx"INLINE intidcmp(str n, str m){ if (* n == * m) return strcmp(n, m); return -1;}#line 247 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/mal/mal_type.mx"#define qt(x) (nme[1]==x[1] && nme[2]==x[2] )intgetTypeIndex(str nme, int len, int deftype){ int i,k=0; char old=0; if (len == 3) switch (*nme) { case 'a': if (qt("any")) return TYPE_any; break; case 'b': if (qt("bat")) return TYPE_bat; if (qt("bit")) return TYPE_bit; if (qt("bte")) return TYPE_bte; break; case 'c': if (qt("chr")) return TYPE_chr; break; case 'd': if (qt("dbl")) return TYPE_dbl; break; case 'i': if (qt("int")) return TYPE_int; break; case 'f': if (qt("flt")) return TYPE_flt; break; case 'l': if (qt("lng")) return TYPE_lng; break; case 'o': if (qt("oid")) return TYPE_oid; break; case 'p': if (qt("ptr")) return TYPE_ptr; break; case 's': if (qt("str")) return TYPE_str; if (qt("sht")) return TYPE_sht; break; case 'w': if (qt("wrd")) return TYPE_wrd; break; } if( nme[0]=='v' && qt("voi") && nme[3] == 'd') return TYPE_void; if( len > 0 ){ old= nme[k = MIN(IDLENGTH, len)]; nme[k] = 0; } for(i= TYPE_str; i< GDKatomcnt; i++) if( BATatoms[i].name[0]==nme[0] && strcmp(nme,BATatoms[i].name)==0) break; if( len > 0) nme[k]=old; /*stream_printf(GDKout,"getTypeIndex %s %d %d\n",nme,i, GDKatomcnt); */ if (i == GDKatomcnt) i = deftype; return i;}INLINE intfindGDKtype(int type){ if (type == TYPE_any || type== TYPE_void) return TYPE_void; if (isaBatType(type)) return TYPE_bat; return ATOMtype(type);}strnewTmpName(char tag, int i){ char buf[PATHLENGTH]; snprintf(buf, PATHLENGTH, "%c%d", tag, i); return GDKstrdup(buf);}INLINE intisTmpName(str n){ return n && *n == TMPMARKER;}intisTypeName(str n){ int i = ATOMindex(n); return i >= 0;}intisIdentifier(str s){ if (!isalpha((int) *s)) return -1; for (; s && *s; s++) if (!isalnum((int) *s) && *s != '_') return -1; return 0;}#line 367 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/mal/mal_type.mx"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -