Example #1
0
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);
    }
}
Example #2
0
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);
  }
Example #3
0
/*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();
}
Example #4
0
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;
}
Example #5
0
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);
    }
}
Example #6
0
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;
}
Example #7
0
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);
}