static void gen_index(xsbBool tabled, int clause_no, CPtr sob_arg_p, byte arity, Pair ptr) { pindex new_i; CPtr ep1, ep2, temp; int j, size; size = hsize(clause_no); new_i = new_index_seg(size,ptr); ep1 = i_block(new_i) ; cell(sob_arg_p) = (Cell)ep1 ; for (j = 0; j < size; j++) { if (indextab[j].l == 0) cell(ep1) = (Cell) &fail_inst; else if (indextab[j].l == 1) { if (!tabled) { cell(ep1) = *(indextab[j].link); } else { /* create tabletrysingle */ cell(ep1) = cell(indextab[j].link); new_i = new_index_seg(3,ptr); ep2 = i_block(new_i); cell(ep1) = (Cell) ep2; temp = indextab[j].link; gentabletry(tabletrysingle, arity, *temp++, tab_info_ptr, ep2); } } else { /* otherwise create try/retry/trust instruction */ new_i = (pindex)new_index_seg(2*indextab[j].l+tabled,ptr); ep2 = i_block(new_i) ; cell(ep1) = (Cell) ep2 ; temp = (indextab[j].link) ; if (!tabled) { /* generate "try" */ gentry(try, arity, *temp, ep2); } else { gentabletry(tabletry, arity, *temp, tab_info_ptr, ep2); } for (temp++; *temp != (Cell)temp; temp++) { temp = (CPtr) cell(temp); /* generate "retry" */ gentry((tabled?tableretry:retry), arity, *temp, ep2); } /* change last "retry" to "trust" */ cell_opcode(ep2-2) = tabled ? tabletrust : trust; }
void Window::drawWindow(Renderer2D &out, IRect rect, FColor color, int outline) { FColor lighter(color.rgb() * 1.2f, color.a); FColor darker(color.rgb() * 0.8f, color.a); int aoutline = fwk::abs(outline); if(outline) { int2 hsize(rect.width(), aoutline); int2 vsize(aoutline, rect.height()); FColor col1 = outline < 0? darker : lighter; out.addFilledRect(IRect(rect.min, rect.min + hsize), col1); out.addFilledRect(IRect(rect.min, rect.min + vsize), col1); int2 p1(rect.min.x, rect.max.y - aoutline); int2 p2(rect.max.x - aoutline, rect.min.y); FColor col2 = outline < 0? lighter : darker; out.addFilledRect(IRect(p1, p1 + hsize), col2); out.addFilledRect(IRect(p2, p2 + vsize), col2); } int2 off(aoutline, aoutline); out.addFilledRect(inset(rect, off, off), color); }
static Integer get_index_tab(CTXTdeclc FILE *fd, int clause_no) { Integer hashval, size, j; Integer count = 0; byte type ; CPtr label; Integer ival; Cell val; Integer dummy; /* used to squash warnings */ size = hsize(clause_no); indextab = (struct hrec *)mem_alloc(size*sizeof(struct hrec),COMPILED_SPACE); for (j = 0; j < size; j++) { indextab[j].l = 0; indextab[j].link = (CPtr)&(indextab[j].link); } for (j = 0; j < clause_no; j++) { dummy = get_obj_byte(&type); switch (type) { case 'i': get_obj_word_bbsig_notag(&ival); hashval = ihash((Cell) ival, size); count += 9; break; case 'f': get_obj_word_bbsig_notag(&ival); // printf("sfloat: %f, %x\n",(*(float *)(&ival)), (*(Integer *)(&ival)) ); #ifndef FAST_FLOATS val = float_val_to_hash(*(float *)(&ival)); #else val = ival; #endif hashval = ihash((Cell) val, size); count += 9; break; case 'd': { double fval; dummy = get_obj_string(&fval,8); #ifndef FAST_FLOATS val = float_val_to_hash(fval); #else { union { long intp; float fltp; } cvtr; cvtr.fltp = (float)fval; val = cvtr.intp; } #endif // printf("bld float index: %2.14f, %0x, size=%d\n",fval,val,size); hashval = ihash((Cell) val, size); count += 9; break; } case 'l': hashval = ihash((Cell)(list_pscPair), size); count += 5; break; case 'n': hashval = ihash((Cell) 0, size); count += 5; break; case 'c': get_obj_word_bb(&ival); count += 9; val = (Cell)ival ; st_pscname(&val); hashval = ihash(val, size) ; break; case 's': get_obj_word_bb(&ival); count += 9; val = (Cell)ival ; st_ptrpsc(&val); hashval = ihash(val, size) ; break; default: hashval = 0; xsb_exit( "illegal format"); } get_obj_word_bbsig_notag(&label); label = reloc_addr((Integer)label, seg_text(current_seg)); inserth(label, &indextab[hashval]); } return count; }