SRL_STATIC_INLINE void srl_parse_array(pTHX_ srl_path_t *path, int expr_idx, SV *route) { int range[3]; const char *loc_str; STRLEN loc_len; SV *loc; assert(route != NULL); assert(expr_idx >= 0); assert(expr_idx <= av_len(path->expr)); assert(srl_iterator_stack(aTHX_ path->iter) != NULL); loc = *av_fetch(path->expr, expr_idx, 0); loc_str = SvPV(loc, loc_len); if (is_all(loc_str, loc_len)) { // * srl_parse_array_all(aTHX_ path, expr_idx, route); } else if (is_number(loc_str, loc_len)) { // [10] srl_parse_array_item(aTHX_ path, expr_idx, route, atoi(loc_str)); } else if (is_list(loc_str, loc_len)) { // [0,1,2] srl_parse_array_list(aTHX_ path, expr_idx, route, loc_str, loc_len); } else if (is_range(loc_str, loc_len, (int*) &range)) { // [start:stop:step] srl_parse_array_range(aTHX_ path, expr_idx, route, (int*) &range); } }
literalt cnft::land(const bvt &bv) { if(bv.size()==0) return const_literal(true); if(bv.size()==1) return bv[0]; if(bv.size()==2) return land(bv[0], bv[1]); forall_literals(it, bv) if(it->is_false()) return *it; if(is_all(bv, const_literal(true))) return const_literal(true); bvt new_bv; eliminate_duplicates(bv, new_bv); bvt lits(2); literalt literal=new_variable(); lits[1]=neg(literal); forall_literals(it, new_bv) { lits[0]=pos(*it); lcnf(lits); }
/*virtual*/ void gui_filterbar_c::created() { set_theme_rect(CONSTASTR("filter"), false); filtereditheight = gui->theme().conf().get_int(CONSTASTR("filtereditheight"), 25); if (prf().get_options().is(UIOPT_SHOW_SEARCH_BAR)) { gui_textfield_c &e = (MAKE_CHILD<gui_textfield_c>(getrid(), L"", MAX_PATH, 0, false) << (gui_textedit_c::TEXTCHECKFUNC)DELEGATE(this, update_filter)); edit = &e; e.set_placeholder(TOOLTIP(TTT("Search", 277)), get_default_text_color(COL_PLACEHOLDER)); e.register_kbd_callback(DELEGATE(this, cancel_filter), SSK_ESC, false); } if (prf().get_options().is(UIOPT_TAGFILETR_BAR)) { fill_tags(); } search_in_messages = prf().is_loaded() && prf().get_options().is(MSGOP_FULL_SEARCH); if (!is_all()) refresh_list(); __super::created(); }
literalt z3_propt::lor(const bvt &bv) { if(bv.size()==0) return const_literal(false); if(bv.size()==1) return bv[0]; if(bv.size()==2) return lor(bv[0], bv[1]); for(unsigned i=0; i<bv.size(); i++) if(bv[i]==const_literal(true)) return const_literal(true); if(is_all(bv, const_literal(false))) return const_literal(false); bvt new_bv; eliminate_duplicates(bv, new_bv); literalt literal=new_variable(); for(unsigned int i=0; i<new_bv.size(); ++i) { bvt lits; lits.reserve(2); lits.push_back(neg(new_bv[i])); lits.push_back(pos(literal)); lcnf(lits); } bvt lits; lits.reserve(new_bv.size()+1); for(unsigned int i=0; i<new_bv.size(); ++i) lits.push_back(pos(new_bv[i])); lits.push_back(neg(literal)); lcnf(lits); return literal; }
SRL_STATIC_INLINE void srl_parse_hash(pTHX_ srl_path_t *path, int expr_idx, SV *route) { const char *loc_str; STRLEN loc_len; SV *loc; assert(route != NULL); assert(expr_idx >= 0); assert(expr_idx <= av_len(path->expr)); assert(srl_iterator_stack(aTHX_ path->iter) != NULL); loc = *av_fetch(path->expr, expr_idx, 0); loc_str = SvPV(loc, loc_len); if (is_all(loc_str, loc_len)) { // * srl_parse_hash_all(aTHX_ path, expr_idx, route); } else if (is_list(loc_str, loc_len)) { // [name1,name2] srl_parse_hash_list(aTHX_ path, expr_idx, route, loc_str, loc_len); } else { // name srl_parse_hash_item(aTHX_ path, expr_idx, route, loc_str, loc_len); } }
bool gui_filterbar_c::update_filter(const ts::wstr_c & e) { ts::wstrings_c ospl( found_stuff.fsplit ); found_stuff.fsplit.split<ts::wchar>(e, ' '); found_stuff.fsplit.trim(); found_stuff.fsplit.kill_empty_fast(); found_stuff.fsplit.case_down(); // kill dups for(int i = found_stuff.fsplit.size() - 1;i>=0;--i) { for(int j = i-1;j>=0;--j) if ( found_stuff.fsplit.get(j).equals( found_stuff.fsplit.get(i) ) ) { found_stuff.fsplit.remove_fast(i); break; } } // sort by length found_stuff.fsplit.sort([](const ts::wstr_c &s1,const ts::wstr_c &s2)->bool { return s1.get_length() == s2.get_length() ? (ts::wstr_c::compare(s1,s2) > 0) : s1.get_length() > s2.get_length(); }); if (!tagschanged && found_stuff.fsplit == ospl) return true; if (current_search) { current_search->no_need = true; current_search = nullptr; } show_options(0 != found_stuff.fsplit.size()); if (!tagschanged && is_all()) { found_stuff.items.clear(); gui_contactlist_c &cl = HOLD(getparent()).as<gui_contactlist_c>(); cl.on_filter_deactivate(RID(),nullptr); return true; } if (search_in_messages && found_stuff.fsplit.size()) { current_search = TSNEW( full_search_s, prf().get_db(), this, found_stuff.fsplit ); found_stuff.items.clear(); g_app->add_task( current_search ); } else found_stuff.items.clear(); active = g_app->active_contact_item ? &g_app->active_contact_item->getengine() : nullptr; if (!active) { gui_contactlist_c &cl = HOLD(getparent()).as<gui_contactlist_c>(); active = cl.get_first_contact_item(); } tagschanged = false; contact_index = 1; do_contact_check(RID(),nullptr); return true; }
void test_CPipeReadBuffer(IUnitTest* _ts) { TEST_SUITE(_ts,_T("Pipe"),_T("buffer operations")); CPipeReadedBuffer buffer; CPipeReadedBuffer::PipeBufferErrorsEn bufferr = CPipeReadedBuffer::PBE_Success; ok(buffer.is_empty(),_T("created buffer is not empty")); const DWORD allocate_size = 100; const DWORD blksz_1 = 122; const DWORD blksz_1_aligned = align(blksz_1,QWORD()); const DWORD blksz_2 = 10; const DWORD blksz_2_aligned = align(blksz_2,QWORD()); const DWORD blksz_3 = 15; const DWORD blksz_3_aligned = align(blksz_3,QWORD()); LPVOID pbuf = NULL; pbuf = buffer.alloc_chunk(allocate_size); ok(is_all(pbuf,allocate_size,(BYTE)0),_T("alloc_chunk() not zeros memory")); ok(buffer.get_firstBlockRealSize()==0,_T("allocated chunk is not counted")); LPDWORD pdwbuf = (LPDWORD)pbuf; pdwbuf[0] = PDM_Data; pdwbuf[1] = blksz_1; ok(buffer.get_firstBlockRealSize()==allocate_size-sizeof(DWORD)*2,_T("bad real size")); ok(buffer.get_firstBlockSendedSize()==blksz_1,_T("allocated chunk is not counted")); ok(buffer.get_firstBlockMetaData()==PDM_Data,_T("no metadata DWORD in data chunk")); pbuf = buffer.alloc_chunk(allocate_size); fill_fortest((LPVOID)(pdwbuf+2),allocate_size-sizeof(DWORD)*2); DWORD cnt = blksz_1 - (allocate_size-sizeof(DWORD)*2); fill_fortest(pbuf,cnt,(byte)(blksz_1-cnt)); ok(buffer.get_firstBlockRealSize()==blksz_1,_T("not processed block after it was already readed")); ok(buffer.get_firstBlockSendedSize()==blksz_1,_T("bad real size")); pdwbuf = (LPDWORD) ((LPBYTE)pbuf + blksz_1_aligned - (allocate_size-sizeof(DWORD)*2)); pdwbuf[0] = PDM_Data; pdwbuf[1] = blksz_2; fill_fortest((LPVOID)(pdwbuf+2),blksz_2); pdwbuf = (LPDWORD)( (LPBYTE)pbuf + blksz_1_aligned - (allocate_size - sizeof(DWORD)*2) + sizeof(DWORD)*2 + blksz_2_aligned ); pdwbuf[0] = PDM_Data; pdwbuf[1] = blksz_3; fill_fortest((LPVOID)(pdwbuf+2),blksz_3); LPVOID preadbuf = NULL; DWORD dwsize = 0; DWORD dwMetaData = PDM_Null; ok(EQL(CPipeReadedBuffer::PBE_Success,buffer.read(preadbuf,dwsize,dwMetaData,true)) && EQL(dwMetaData,PDM_Data) ,_T("read error") ); ok(EQL(dwsize,blksz_1),_T("read error")); ok(test_filling(preadbuf,dwsize),_T("inccorrect data was readed")); ok(buffer.get_firstBlockRealSize()==blksz_2,_T("incorrect buffer size")); ok(buffer.get_firstBlockSendedSize()==blksz_2,_T("incorrect sended buffer size")); delete[] trace_free(preadbuf); dwsize = blksz_2+2;//set incorrect size preadbuf = trace_alloc(new BYTE[dwsize]); //test errors dwMetaData = PDM_Null; ok(EQL(CPipeReadedBuffer::PBE_WrongBufferSize,buffer.read(preadbuf,dwsize,dwMetaData,false)) ,_T("read return not PBE_WrongBufferSize") ); ok(buffer.get_firstBlockRealSize()==blksz_2,_T("incorrect buffer size")); ok(buffer.get_firstBlockSendedSize()==blksz_2,_T("incorrect sended buffer size")); dwMetaData = PDM_Null; ok(EQL(CPipeReadedBuffer::PBE_InvalidArg,buffer.read(preadbuf,dwsize,dwMetaData,true)) ,_T("read return not PBE_InvalidArg") ); ok(buffer.get_firstBlockRealSize()==blksz_2,_T("incorrect buffer size")); ok(buffer.get_firstBlockSendedSize()==blksz_2,_T("incorrect sended buffer size")); delete[] trace_free(preadbuf); dwsize = blksz_2; preadbuf = trace_alloc(new BYTE[dwsize]); ok(EQL(CPipeReadedBuffer::PBE_Success,buffer.read(preadbuf,dwsize,dwMetaData,false)) && EQL(dwMetaData,PDM_Data) ,_T("read return not PBE_Success") ); ok(test_filling(preadbuf,dwsize),_T("incorrect data was readed")); ok(EQL(buffer.get_firstBlockRealSize(),blksz_3),_T("incorrect real size")); ok(EQL(buffer.get_firstBlockSendedSize(),blksz_3),_T("incorrect sended size")); ok(EQL(buffer.free_firstBlock(),CPipeReadedBuffer::PBE_Success),_T("error while free first block")); ok(EQL(buffer.free_firstBlock(),CPipeReadedBuffer::PBE_DataNotReady),_T("free_firstBlock return not PBE_DataNotReady")); delete[] trace_free(preadbuf); }