void set_update(int o,int L,int R){ int lc=o*2,rc=o*2+1; if(y1<=L && y2>=R){ setv[o]=v; }else{ pushdown(o); int M=L+(R-L)/2; if(y1<=M) set_update(lc,L,M);else maintain(lc,L,M); if(y2>M) set_update(rc,M+1,R);else maintain(rc,M+1,R); } maintain(o,L,R); }
void PrefAgent::update_toggle (WCallback *wcb) { XmToggleButtonCallbackStruct &cbs = *(XmToggleButtonCallbackStruct*) wcb->CallData(); set_update (cbs.set); }
void trial(int cnt, _Bool train, double *err) { // get problem function state and solution double *state = func_state(train); double answer = func_answer(train); // create match set NODE *mset = NULL, *kset = NULL; int msize = 0, mnum = 0; set_match(&mset, &msize, &mnum, state, cnt, &kset); // calculate system prediction and track performance double pre = set_pred(&mset, msize, state); err[cnt%PERF_AVG_TRIALS] = fabs(answer - pre); if(train) { // provide reinforcement to the set set_update(&mset, &msize, &mnum, answer, &kset, state); // run the genetic algorithm ga(&mset, msize, mnum, cnt, &kset); } // clean up set_kill(&kset); // kills deleted classifiers set_free(&mset); // frees the match set list }
void PrefAgent::reset() { // Reset browse preferences. if (IS_CHANGED (f_browse_geo)) set_geometry (f_browse_geo, ORIGINAL_VALUE (f_browse_geo, WindowGeometry)); if (IS_CHANGED (f_fs_field)) set_integer (f_fs_field, ORIGINAL_VALUE (f_fs_field, Integer)); if (IS_CHANGED (f_lock_toggle)) { set_lock (ORIGINAL_VALUE (f_lock_toggle, Boolean)); f_lock_toggle.Unmap(); f_lock_toggle.Map(); } // Reset map preferences. if (IS_CHANGED (f_map_geo)) set_geometry (f_map_geo, ORIGINAL_VALUE (f_map_geo, WindowGeometry)); if (IS_CHANGED (f_update_toggle)) set_update (ORIGINAL_VALUE (f_update_toggle, Boolean)); // Reset history preferences. if (IS_CHANGED (f_nh_field)) set_integer (f_nh_field, ORIGINAL_VALUE (f_nh_field, Integer)); if (IS_CHANGED (f_sh_field)) set_integer (f_sh_field, ORIGINAL_VALUE (f_sh_field, Integer)); // Reset Search preferences. if (IS_CHANGED (f_max_hits_field)) set_integer (f_max_hits_field, ORIGINAL_VALUE (f_max_hits_field, Integer)); if (IS_CHANGED (f_adisplay_toggle)) set_auto_display (ORIGINAL_VALUE (f_adisplay_toggle, Boolean)); // Desensitize appropriate controls. f_ok.SetSensitive (False); f_apply.SetSensitive (False); f_reset.SetSensitive (False); }
LRESULT CALLBACK EditProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){ char bstr[MAX_PATH]; char *p,c; int i,k,n,o,r,f; POINT pt; struct edvars *ev; r = 0; //if (domove(GetParent(hwnd),message,wParam,lParam)) return 0; switch (message) { case WM_COPYDATA: if (0x4F4E4242 == ((PCOPYDATASTRUCT)lParam)->dwData) { char buff[MAX_PATH]; int line_nr; const char *file = (const char*)((PCOPYDATASTRUCT)lParam)->lpData; getfile(buff, file, &line_nr); set_currentdir(buff); LoadFile(buff); if (line_nr) { ed_cmd(EK_GOTOLINE,line_nr-1); //ed_cmd(EK_MARK,lpos,imin(lpos+1,nextline(lpos,1))); } r = TRUE; goto p0r; } return bbn_receive_data(hwnd, lParam); default: if (bb_broadcast_msg == message && message) { if (bb_register(hwnd) && bb_getstyle(hwnd)) goto reconfig1; return 0; } break; case BB_RECONFIGURE: if (bb_getstyle(hwnd)) goto reconfig1; return 0; reconfig1: bb_close_dlg(); makedlgfont(); reconfig: zy0 = title_h + FRM-1; setsize(hwnd); new_back(); InvalidateRect(hwnd, NULL, FALSE); return 0; case BB_SETSTYLESTRUCT: { StyleStruct *d = (StyleStruct *)wParam; StyleStruct *s = (StyleStruct *)lParam; memset(d, 0, sizeof *d); memcpy(d, s, sizeof *d); break; } case BB_SETSTYLE: { char *d = (char *)wParam; char *s = (char *)lParam; strcpy(d, s); break; } case WM_CREATE: zy0 = title_h + FRM-1; setsize(ewnd=hwnd); dragC = LoadCursor(hInst,MAKEINTRESOURCE(101)); dragCp = LoadCursor(hInst,MAKEINTRESOURCE(102)); pointC = hCurs = LoadCursor(NULL,IDC_ARROW); init_edit(hwnd); DragAcceptFiles(hwnd,TRUE); if (false == bb_register(hwnd) || false == bb_getstyle(hwnd)) readstyle(defstyle); goto reconfig1; case WM_DROPFILES: { POINT pt; HDROP hDrop = (HDROP)wParam; int n,f; ev=edp; f=0; GetCursorPos(&pt); if (GetAsyncKeyState(VK_CONTROL)<0) f=1; if (GetAsyncKeyState(VK_SHIFT)<0) f=2; if (f) ScreenToClient(hwnd,&pt); for (i=-1, k=0; i<k; i++) { n=DragQueryFile (hDrop, i, p=bstr, 255); if (i<0) { k=n; } else if (f==0) { LoadFile(p); } else if (f==2) { if (readstyle(p)) { CopyFile(p, defstyle, FALSE); } break; } else { if (i == 0 && -1 == getmoupos(pt.x ,pt.y)) break; ed_cmd(EK_SETVAR); ed_cmd(EK_INSERT, p); ed_cmd(KEY_RET); } } DragFinish(hDrop); SetForegroundWindow(hwnd); if (f==0) goto showf; if (f==2) goto reconfig1; goto p0; } case WM_QUERYENDSESSION: return (1 == QueryDiscard(hwnd,1)); case WM_ENDSESSION: { //void savecfg(void); savecfg(); return 0; } case WM_DESTROY: exit_edit(); DragAcceptFiles(hwnd,FALSE); bb_unregister(hwnd); PostQuitMessage(0); return 0 ; case WM_ACTIVATE: i=LOWORD(wParam); if (i==WA_ACTIVE) clickflag=0; return 0; case WM_ACTIVATEAPP: if (wParam) { clickflag=2; } return 0; case WM_LBUTTONDOWN: case WM_RBUTTONDOWN: if (alt_f) alt_f=2; case WM_MOUSEMOVE: #if 0 { static int wm; i = (short)HIWORD(lParam)/2; n = wm; wm = i; wParam = MAKELPARAM(0,(n-i)*30); goto mwhl; } #endif case WM_LBUTTONDBLCLK: case WM_LBUTTONUP: case WM_RBUTTONUP: case WM_MBUTTONUP: case WM_MBUTTONDOWN: if (drag==0 && domove (hwnd, message, wParam, lParam)) return 0; do_mouse(hwnd, wParam, lParam, message); if (message==WM_MOUSEMOVE && 0==(wParam & (MK_LBUTTON | MK_RBUTTON))) return 0; goto p0; case WM_TIMER: if (wParam==2) { resetmsg(hwnd); goto p0; } if (wParam==4) { mousewheelaccu=0; t0: KillTimer(hwnd, wParam); return 0; } GetCursorPos(&pt); ScreenToClient(hwnd,&pt); o=getmoupos(pt.x ,pt.y); if (o!=tcmd) { settimer(hwnd, o, SCROLL_INTERVAL); return 0; } if (tcmd==0) goto t0; c=ltup; ltup=0; ed_cmd(tcmd); ed_cmd(tcmd); upd=1; ltup=c; k=GetAsyncKeyState(VK_SHIFT)&0x8000; domarking(k!=0 || (0==moumrk && 0==drag)); goto p0; case WM_SIZE: if (SIZE_MINIMIZED == wParam) return 0; if (edp) upd=1; ed_cmd(EK_SIZE); new_back(); case WM_MOVE: setsize(hwnd); goto p0; /* case WM_WINDOWPOSCHANGED: ewx0 = ((LPWINDOWPOS) lParam)->x; ewy0 = ((LPWINDOWPOS) lParam)->y; ewxl = ((LPWINDOWPOS) lParam)->cx; ewyl = ((LPWINDOWPOS) lParam)->cy; cfg_f |= 1; break; //process wm_move/wm_size case WM_WINDOWPOSCHANGING: SnapWindowToEdge((WINDOWPOS*)lParam, 10, 0); setsize(hwnd); return 0; */ case WM_VSCROLL: vscroll(wParam); goto p0; case WM_HSCROLL: hscroll(wParam); goto p0; case WM_SETFOCUS: k_alt = 0>GetAsyncKeyState(VK_MENU); k_shft= 0>GetAsyncKeyState(VK_SHIFT); k_ctrl= 0>GetAsyncKeyState(VK_CONTROL); CreateCaret(hwnd,NULL,My_CaretSize,zy); caret=1; checkftime(hwnd); goto f1; case WM_KILLFOCUS: DestroyCaret(); caret=0; f1: if (edp) upd=1; goto p0; p0: r=0; p0r: set_update(hwnd); return r; case WM_ERASEBKGND: return 1; case WM_PAINT: paint_window (hwnd); return 0; case WM_COMMAND: switch (LOWORD(wParam)) { case CMD_HELP: #if 0 bbnote_help(); return 0; #else if (fileexist(set_my_path(bstr, "bbnote.txt"))) LoadFile(bstr); else if (fileexist(set_my_path(bstr, "docs/bbnote.txt"))) LoadFile(bstr); goto p0; #endif case CMD_EXIT: goto quit; case CMD_MENU_2: filemenu: if (ed0) { struct edvars *e = ed0; struct strl *s = NULL; while (e) { char temp[MAX_PATH]; sprintf(temp, "&%s", fname(e->sfilename)); appendstr(&s, temp); e = e->next; } bb_file_menu (hwnd, lParam, s); } return 0; case CMD_MENU_1: bb_menu(hwnd, lParam); return 0; case CMD_COLOR: goto reconfig; case CMD_UPD: settitle(); if (edp) upd=1; goto p0; case CMD_ZOOM: zoom: ShowWindow(hwnd, IsZoomed(hwnd) ? SW_SHOWNORMAL : SW_MAXIMIZE); return 0; case CMD_SEARCH: search: if (edp) bb_search_dialog(hwnd); return 0; case CMD_CLOSE: closefile: if (edp) { if (1 != QueryDiscard_1(hwnd, 1)) goto p0; if (ed0->next==NULL) { extern HWND mwnd; SendMessage(mwnd, WM_KEYDOWN, VK_ESCAPE, 0); //DestroyWindow(mwnd); } CloseFile(); } goto p0; case CMD_OPEN: openfile: ev=edp; DoFileOpenSave(hwnd, 0); showf: if (ev==NULL || ev->next) { edp = ev ? ev->next : ed0; settitle(); } goto p0; case CMD_RELOAD: reload: if (edp) f_reload(1); goto p0; case CMD_LIST: lParam = 2; goto filemenu; case CMD_NEW: newfile: NewFile(); goto p0; case CMD_SAVE: savefile: if (edp) DoFileOpenSave(hwnd, 2); goto p0; case CMD_SAVEAS: if (edp!=NULL) DoFileOpenSave(hwnd, 1); break; case CMD_SAVEALL: //saveall: return QueryDiscard(hwnd, 0); case CMD_UNDO: ed_cmd(KEY_C_Z); goto p0; case CMD_REDO: ed_cmd(KEY_CS_Z); goto p0; case CMD_ABOUT: oyncan_msgbox( VERSION_STRING "\n" "\nediting with style" "\n04/2003 by grischka" "\n" "\[email protected]" , NULL, 1); return 0; case CMD_OPTIONS: goto config; case CMD_INFO: resetmsg(hwnd); p=(char*)lParam; if (p[0]==1) p++; else infoflg=1,infotimer=SetTimer(hwnd,2,666,NULL); strcpy(infomsg,p); if (edp) upd=1; goto p0; case CMD_FILECHG: { struct edvars *p=edp; edp=(struct edvars*)lParam; settitle(); set_update(hwnd); f_reload(0); edp=p; settitle(); goto p0; } default: i = LOWORD(wParam); if (i>=CMD_FILE && i< CMD_FILE_M) { struct edvars *p=ed0; i-=CMD_FILE; for (;i && p!=NULL; p=p->next,i--); if (p) { //edp = p; settitle(); insfile(p); goto p0; } return 0; } break; } break; quit: if (1 == QueryDiscard(hwnd, 1)) DestroyWindow(hwnd); return 0; case WM_SYSKEYDOWN: f=3; goto k1; case WM_SYSKEYUP: f=2; goto k1; case WM_KEYUP: if (wParam==VK_CONTROL && drag==3) setdragc(2); f=0; goto k1; case WM_KEYDOWN: if (wParam==VK_CONTROL && drag==2) setdragc(3); if (wParam==VK_SCROLL) { scroll_lock^=1; goto p0; } f=1; k1: n=LOWORD(wParam); #if 0 sprintf(bstr,"key %d stat %d",n,f); if (n!=VK_MENU) MessageBox(NULL, bstr, "", MB_OK|MB_TOPMOST|MB_SETFOREGROUND); #endif n=trans_keys(n, f); //if (0==n) goto p0; if (0==n) return 0; if (n>=2110 && n<=2117) { vmark=k_alt!=0; domarking(1); ed_cmd(n-100); domarking(1); goto p0; } switch (n) { case KEY_F8: return 0; case KEY_A_RIGHT: case KEY_F6: nextfile(); goto p0; case KEY_A_LEFT: case KEY_C_F6: prevfile(); goto p0; case KEY_F10: goto zoom; case KEY_F3: case KEY_C_F: goto search; case KEY_C_F4: goto closefile; case KEY_C_O: goto openfile; //case KEY_A_F3: goto reload; case KEY_C_N: goto newfile; case KEY_C_L: lParam = 0; goto filemenu; case KEY_F4: QueryDiscard(hwnd, 0); bb_reconfig(); return 0; case KEY_S_F4: if (IDOK == oyncan_msgbox("Do you want to write all files?", "", 1+8)) QueryDiscard(hwnd, 4); return 0; case KEY_C_S: goto savefile; case KEY_A_F4: goto quit; case KEY_A_F2: config: n = tabs; bb_config_dialog(hwnd); if (n!=tabs) goto reload; return 0; case KEY_ESC: if (drag==0) goto quit; dragmove=0; do_mouse(hwnd, 0,0,WM_LBUTTONUP); goto p0; case KEY_UP: case KEY_DOWN: if (scroll_lock) n+=200; goto defkey; case KEY_LEFT: case KEY_RIGHT: if (scroll_lock) n=(n^1)+204; goto defkey; } defkey: domarking(0); ed_cmd(n); i=n; if (i!=KEY_C_A && i!=KEY_C_U && i!=KEY_C_7 && i!=KEY_C_8 && i!=KEY_C_9 && i!=KEY_C_0 && i!=KEY_TAB && i!=KEY_S_TAB ) unmark(); goto p0; case WM_MOUSEWHEEL: i = mousewheelaccu + mousewheelfac * (short)HIWORD(wParam); while (i < -300) ed_cmd(KEY_C_DOWN), i+=600; while (i > 300) ed_cmd(KEY_C_UP), i-=600; mousewheelaccu=i; unmark(); SetTimer(hwnd, 4, 200, NULL); goto p0; case WM_NCPAINT: return 0; case WM_CHAR: n = LOWORD(wParam); if (n<32||n==127) return 0; resetmsg(hwnd); ed_cmd(EK_CHAR, n); goto p0; case CMD_GOTOLINE: ed_cmd(EK_GOTOLINE,wParam-1); ed_cmd(EK_MARK,lpos,imin(lpos+1,nextline(lpos,1))); lmf=2; goto p0; case CMD_LOADFILE: r=LoadFile((char*)wParam); goto p0r; case CMD_NSEARCH: resetmsg(hwnd); if (wParam&8) { ed_cmd(EK_REPLACE,(char *)lParam); if (wParam&1) ed_cmd(EK_GOTO,fpos+strlen((char*)lParam)); goto p0; } unmark(); if (wParam!=0) { struct sea *s=(struct sea *)lParam; struct edvars *ev0; for (ev0=edp;;) { r=ed_search(s); if (r || 0==(s->sf&128)) break; s->sf &= ~4; if (s->sf & 1) { if (edp->next==NULL) break; nextfile(); s->from=0; continue; } if (s->sf & 2) { if (edp==ed0) break; prevfile(); s->from=flen; continue; }} if (r<=0) { edp=ev0; settitle(); } else { ed_cmd(KEY_HOME); ed_cmd(EK_MARK,s->a,s->e); ed_cmd(EK_GOTO,s->a); } } goto p0r; } return DefWindowProc (hwnd, message, wParam, lParam) ; }
/* caching attempt now added.. */ void save_player(player * p) { saved_player *old, **hash, *sp; int sum, fd=-1; file data; char *c, *oldstack; int verb = 1, cached=-1; if(p->residency==STANDARD_ROOMS) return; oldstack = stack; if (!(p->location) || !(p->name[0]) || p->residency == NON_RESIDENT) return; if (sys_flags & PANIC) vlog("boot", "Attempting to save player %s.", p->name); if (!(isalpha(p->lower_name[0]))) { log("error", "Tried to save non-player."); return; } if (p != current_player) verb = 0; if (sys_flags & INVIS_SAVE) verb = 0; if (verb) { if (p->password[0]==0) { if(!(p->flags & CHUCKOUT)) tell_current(" Tried to save this character but failed ...\n" " Your character will not save until you set a password.\n" " Simply type 'password' whilst in command mode to set one.\n"); p->residency |= NO_SYNC; if(p->flags & CHUCKOUT) tell_current("\n\n Character Abandoned.\n"); else tell_current(" NOT saved.\n"); return; } else if (p->email[0]==0) { if(!(p->flags & CHUCKOUT)) tell_current(" Tried to save this character but failed ...\n" " Your character will not save until you set an email address.\n" " To set this just type 'email <whatever>', where <whatever> is your\n" " email address.\n" " If you do not have an email, please speak to one of the superusers.\n"); p->residency |= NO_SYNC; if(p->flags & CHUCKOUT) tell_current("\n\n Character Abandoned.\n"); else tell_player(p, " NOT saved.\n"); return; } } p->residency &= ~NO_SYNC; p->saved_residency = p->residency; old = p->saved; sp = old; if (!old) { sp = (saved_player *) MALLOC(sizeof(saved_player)); memset((char *) sp, 0, sizeof(saved_player)); strncpy(sp->lower_name, p->lower_name, MAX_NAME-1); strncpy(sp->saved_email, p->email, MAX_EMAIL-1); sp->rooms = 0; sp->mail_sent = 0; sp->received_list = 0; sp->list_top = 0; sp->cache = -1; hash = saved_hash[((int) p->lower_name[0] - (int) 'a')]; for (sum = 0, c = p->lower_name; *c; c++) { if (isalpha(*c)) sum += (int) (*c) - 'a'; else { tell_player(p, " Eeek, trying to save bad player name !!\n"); FREE(sp); return; } } hash = (hash + (sum % HASH_SIZE)); sp->next = *hash; *hash = sp; p->saved = sp; sp->saved_flags = p->saved_flags; create_room(p); set_update(*(p->lower_name)); } /* DYNAMIC */ /* ok, check to see if they are, cache them in their old place. if not, then stick them into the cache, or dump to disk if that fails */ /* we dont want to cache them if they arent to be cached */ if(p->flags & ARGH_DONT_CACHE_ME) { cached = -1; sp->cache = -1; } else { cached = find_cached_player(sp->lower_name); if(cached!=-1) sp->cache=cached; else { cached = find_available_cache_space(); sp->cache = cached; } } /* if they arent in the cache and there is no space, sync it. */ if(cached<0) { sprintf(stack, "files/dynamic/%.1s/%.1s/%s.data", p->lower_name, (p->lower_name)+1, p->lower_name); #if defined( FREEBSD ) fd = open(stack, O_CREAT | O_WRONLY | O_TRUNC, S_IRUSR | S_IWUSR); #else fd = open(stack, O_CREAT | O_WRONLY | O_TRUNC | O_SYNC, S_IRUSR | S_IWUSR); #endif if(fd<0) { vlog("dynamic", "Failed to open dynamic data file for '%s'", p->lower_name); return; } } /* after here, stack is affected */ data = construct_save_data(p); if (!data.length) { log("error", "Bad construct save."); stack = oldstack; if(fd>-1) close(fd); return; } /* DYNAMIC */ /* cache checking! */ if(sp->cache<0) { if(fd>-1) { write(fd, data.where, data.length); close(fd); } else log("dynamic", "save_player tried to write to non existant fd due to bad cache value"); } else { if(!dynamic_tempfile_to_cache(sp, data)) { vlog("cache", "Caching problem encountered with %s", sp->lower_name); vsu_wall("-=> Meep! %s failed to cache on save!\n", sp->lower_name); } } sp->residency = p->saved_residency; sp->saved_flags = p->saved_flags; strncpy(sp->last_host, p->inet_addr, MAX_INET_ADDR - 1); strncpy(sp->saved_email, p->email, MAX_EMAIL-1); p->saved = sp; sp->last_on = time(0); /* DYNAMIC - we do need to save their file however.. */ /* this bit is commented out since i think we only need to save it if we are delinking it, or if we are shutting down/crashing */ if (verb) tell_current(" Character Saved ...\n"); stack = oldstack; }
/* removes an entry from the saved player lists */ int remove_player_file(char *name) { saved_player *previous = 0, **hash, *list; char *c; int sum = 0, cachekill; recmail *rescan; if (!isalpha(*name)) { log("error", "Tried to remove non-player from save files."); return 0; } /* all things coming in here should already be lower case. this is if someone has spooned. */ lower_case(name); hash = saved_hash[((int) (*name) - (int) 'a')]; for (c = name; *c; c++) { if (isalpha(*c)) sum += (int) (*c) - 'a'; else { log("error", "Remove bad name from save files"); return 0; } } hash += (sum % HASH_SIZE); list = *hash; for (; list; previous = list, list = list->next) { if (!strcmp(name, list->lower_name)) { /* first, save their files to disk. */ write_to_file(list); /* take them out of the cache! */ cachekill = find_cached_player(list->lower_name); if(cachekill!=-1) { sync_cache_item_to_disk(cachekill); empty_cache_item(cachekill); } list->cache = -1; /* uncache them to disk */ /* DYNAMIC - well this bit needs to rm the data file presumably */ sprintf(stack, "mv -f files/dynamic/%.1s/%.1s/%s.data " "files/dynamic/deadzone/%s.data", list->lower_name, (list->lower_name)+1, list->lower_name, list->lower_name); system(stack); sprintf(stack, "mv -f files/dynamic/%.1s/%.1s/%s.saved " "files/dynamic/deadzone/%s.saved", list->lower_name, (list->lower_name)+1, list->lower_name, list->lower_name); system(stack); if (previous) previous->next = list->next; else *hash = list->next; while(list->received_list) { rescan = list->received_list; list->received_list = rescan->next; FREE(rescan); } free_room_data(list); set_update(*name); FREE((void *) list); return 1; } } return 0; }
STATIC mp_obj_t set_binary_op(mp_binary_op_t op, mp_obj_t lhs, mp_obj_t rhs) { mp_obj_t args[] = {lhs, rhs}; #if MICROPY_PY_BUILTINS_FROZENSET bool update = MP_OBJ_IS_TYPE(lhs, &mp_type_set); #else bool update = true; #endif if (op != MP_BINARY_OP_CONTAINS && !is_set_or_frozenset(rhs)) { // For all ops except containment the RHS must be a set/frozenset return MP_OBJ_NULL; } switch (op) { case MP_BINARY_OP_OR: return set_union(lhs, rhs); case MP_BINARY_OP_XOR: return set_symmetric_difference(lhs, rhs); case MP_BINARY_OP_AND: return set_intersect(lhs, rhs); case MP_BINARY_OP_SUBTRACT: return set_diff(2, args); case MP_BINARY_OP_INPLACE_OR: if (update) { set_update(2, args); return lhs; } else { return set_union(lhs, rhs); } case MP_BINARY_OP_INPLACE_XOR: if (update) { set_symmetric_difference_update(lhs, rhs); return lhs; } else { return set_symmetric_difference(lhs, rhs); } case MP_BINARY_OP_INPLACE_AND: rhs = set_intersect_int(lhs, rhs, update); if (update) { return lhs; } else { return rhs; } case MP_BINARY_OP_INPLACE_SUBTRACT: return set_diff_int(2, args, update); case MP_BINARY_OP_LESS: return set_issubset_proper(lhs, rhs); case MP_BINARY_OP_MORE: return set_issuperset_proper(lhs, rhs); case MP_BINARY_OP_EQUAL: return set_equal(lhs, rhs); case MP_BINARY_OP_LESS_EQUAL: return set_issubset(lhs, rhs); case MP_BINARY_OP_MORE_EQUAL: return set_issuperset(lhs, rhs); case MP_BINARY_OP_CONTAINS: { mp_obj_set_t *o = MP_OBJ_TO_PTR(lhs); mp_obj_t elem = mp_set_lookup(&o->set, rhs, MP_MAP_LOOKUP); return mp_obj_new_bool(elem != MP_OBJ_NULL); } default: return MP_OBJ_NULL; // op not supported } }