void tst_model_retrieval() { memory::initialize(0); front_end_params params; params.m_model = true; ast_manager m; m.register_decl_plugins(); family_id array_fid = m.get_family_id(symbol("array")); array_util au(m); array_decl_plugin& ad = *static_cast<array_decl_plugin *>(m.get_plugin(array_fid)); // arr_s and select_fn creation copy-pasted from z3.cpp parameter sparams[2] = { parameter(to_sort(m.mk_bool_sort())), parameter(to_sort(m.mk_bool_sort())) }; sort_ref arr_s(m.mk_sort(array_fid, ARRAY_SORT, 2, sparams), m); sort * domain2[2] = {arr_s, m.mk_bool_sort()}; func_decl_ref select_fn( m.mk_func_decl(array_fid, OP_SELECT, 2, arr_s->get_parameters(), 2, domain2), m); app_ref a1(m.mk_const(symbol("a1"), arr_s), m); app_ref a2(m.mk_const(symbol("a2"), arr_s), m); // (= true (select a1 true)) app_ref fml(m.mk_eq(m.mk_true(), m.mk_app(select_fn.get(), a1, m.mk_true())), m); smt::context ctx(m, params); ctx.assert_expr(fml); lbool check_result = ctx.check(); std::cout<<((check_result==l_true) ? "satisfiable" : (check_result==l_false) ? "unsatisfiable" : "unknown")<<"\n"; ref<model> model; ctx.get_model(model); model_v2_pp(std::cout, *model, false); expr_ref a1_val(model->get_const_interp(a1->get_decl()), m); app_ref fml2(m.mk_eq(a2, a1_val), m); ctx.assert_expr(fml2); std::cout<<"--------------------------\n"; ctx.display(std::cout); std::cout<<"--------------------------\n"; check_result = ctx.check(); ctx.display(std::cout); std::cout<<"--------------------------\n"; std::cout<<((check_result==l_true) ? "satisfiable" : (check_result==l_false) ? "unsatisfiable" : "unknown")<<"\n"; }
bool ButtonComponent::mouseUp( ci::app::MouseEvent &event, const MatrixAffine2f &world_transform ) { bool selected = false; _tracked_touch = 0; if( contains( event.getPos(), world_transform ) ) selected = true; _is_hovering = false; if( selected && select_fn ) { select_fn(); } return false; }
bool ButtonComponent::touchesEnded( ci::app::TouchEvent &event, const MatrixAffine2f &world_transform ) { bool selected = false; for( auto &touch : event.getTouches() ) { if( touch.getId() == _tracked_touch ) { _tracked_touch = 0; // reset tracked touch _is_hovering = false; if( contains( touch.getPos(), world_transform ) ) { selected = true; break; } } } if( selected && select_fn ) { // call function last, as it may destroy this object select_fn(); } return false; }
static struct resource_struct *get_next_ftp_noname(struct resource_struct *p, unsigned char type, void **index, unsigned char (*select_fn)(struct resource_struct *p, struct resource_struct *r, char *name, unsigned char type)) { struct resource_struct *r=NULL; if (type==FTP_TYPE_NETWORK) { /* there is one ftp network resource for all net workspaces/users */ r=&ftp_network_resource; } else if (type==FTP_TYPE_SERVER) { int hashvalue=0; while(hashvalue<server_list.len && ! r) { /* lookup in workgroup list */ r=get_next_element(&server_list, index, hashvalue); while(r) { if (select_fn(p, r, NULL, type)==1) break; r=get_next_element(&server_list, index, hashvalue); } if (!r) { /* jump to the next hash */ *index=NULL; hashvalue++; } else { break; } } } return r; struct resource_struct *get_next_ftp(struct resource_struct *p, char *name, unsigned char type, void **index, unsigned char (*select_fn)(struct resource_struct *p, struct resource_struct *r, char *name, unsigned char type)) { struct resource_struct *r=NULL; if (! select_fn) select_fn=default_select_fn; if (! name) { r=get_next_ftp_noname(p, type, index, select_fn); goto out; } if (type==FTP_TYPE_NETWORK) { /* there is one smb network resource for all net workspaces/users */ r=&ftp_network_resource; } else if (type==FTP_TYPE_SERVER) { int hashvalue; hashvalue=calculate_ftp_hash(name); /* lookup in server list */ r=get_next_element(server_list, &index, hashvalue); while(r) { if (select_fn(p, r, name, type)==1) break; r=get_next_element(server_list, index, hashvalue); } } out: return r; } int ftp_groupadd(struct resource_struct *resource) { if (resource->type==FTP_TYPE_SERVER) { /* add resource to servers */ add_element_to_group(&server_list, (void *) resource); } return 0; } int smb_groupremove(struct resource_struct *resource) { if (resource->type==FTP_TYPE_SERVER) { /* remove resource from servers */ remove_element_from_group(&server_list, (void *) resource); } return 0; } static struct group_calls_struct ftp_group_calls={ .find_role = find_role_ftp, .readrecord = NULL, .init = NULL, .add = NULL, .change = NULL, .remove = NULL, .close = NULL, .get_next = get_next_ftp, .groupadd = ftp_groupadd, .groupremove = ftp_groupremove, .lock = NULL, .unlock = NULL, }; void add_group_ftp() { int res=0; init_resource_group(&ftp_resource_group); add_resource_group(RESOURCE_GROUP_FTP, &ftp_resource_group, &ftp_group_calls); create_ftp_network_resource(); res=initialize_group(server_list, server_hashfunction, 256); /* read the config */ read_ftp_config(); /* init ftp network role */ snprintf(ftp_network_role.name, 128, "remote.net.ftp.network"); ftp_network_role.directory_file=NULL; ftp_network_role.group=RESOURCE_GROUP_FTP; ftp_network_role.type=FTP_TYPE_NETWORK; add_role_simple(&ftp_network_role); /* init ftp server role */ snprintf(ftp_server_role.name, 128, "remote.net.ftp.server"); ftp_server_role.directory_file=NULL; ftp_server_role.group=RESOURCE_GROUP_FTP; ftp_server_role.type=FTP_TYPE_SERVER; add_role_simple(&ftp_server_role); }