示例#1
0
 const HeaderStrategy * HeaderStrategy::create( const QString & type ) {
   QString lowerType = type.lower();
   if ( lowerType == "all" )  return all();
   if ( lowerType == "rich" )   return HeaderStrategy::rich();
   //if ( lowerType == "standard" ) return standard(); // not needed, see below
   if ( lowerType == "brief" ) return brief();
   if ( lowerType == "custom" )  return custom();
   // don't kdFatal here, b/c the strings are user-provided
   // (KConfig), so fail gracefully to the default:
   return standard();
 }
示例#2
0
  const HeaderStrategy * HeaderStrategy::create( Type type ) {
    switch ( type ) {
    case All:  return all();
    case Rich:   return rich();
    case Standard: return standard();
    case Brief:  return brief();
    case Custom:  return custom();
    }
    kdFatal( 5006 ) << "HeaderStrategy::create(): Unknown header strategy ( type == "
		    << (int)type << " ) requested!" << endl;
    return 0; // make compiler happy
  }
示例#3
0
/*!
 * Called when next or previous button was clicked or when info was bought.
 * Updates the array of lines to be displayed.
 */
void BriefMenu::update_briefing_text() 
{
    int line_count = 0;

    // first, clear array
    for (int i = 0; i < kMaxLinePerPage; i++) {
        a_page_[i].erase();
    }

    for (int lvl = 0; lvl <= g_Session.getSelectedBlock().infoLevel; lvl++) {
        std::string brief(p_briefing_->briefing(lvl));
        std::string line;

        while (brief.size() != 0 && 
                line_count <= (start_line_ + kMaxLinePerPage)) {
            bool add = read_next_word(brief, line);

            if (add) {
                // first line should not be empty
                if (line_count % kMaxLinePerPage == 0 && line.size() == 0) {
                    continue;
                }
                if (line_count >= start_line_ && line_count < (start_line_ + kMaxLinePerPage)) {
                    a_page_[line_count - start_line_].assign(line);
                }
                line_count++;
                line.erase();
            }
        }
    }

    // Previous button is visible only if not on the first page
    getOption(prevButId_)->setVisible(start_line_ != 0);
    // Next button is visible only if there are line after the lines currently displayed
    getOption(nextButId_)->setVisible(line_count >= (start_line_ + kMaxLinePerPage));
    redrawBriefing();
}
示例#4
0
文件: main.cpp 项目: CCJY/coliru
int main()
{
    brief("abc");
    brief("abcdefghijklmnopqr"); // not brief enough
}
示例#5
0
 const HeaderStrategy * prev() const { return brief(); }
示例#6
0
 const HeaderStrategy * next() const { return brief(); }
示例#7
0
/**
 * @brief 查询命令处理
 *
 * @param [in] cmd_no   : int 命令号
 * @param [in] req_head   : nshead_t*
 * @param [in] req_buf   : ub_buff_t*
 * @param [in/out] res_head   : nshead_t*
 * @param [in/out] res_buf   : ub_buff_t*
**/
STATIC int
process_query(nshead_t * req_head, ub_buff_t * req_buf,
       nshead_t * res_head, ub_buff_t * res_buf)
{
	
    int opret = 0;
	struct timeval s,e;
    basic_req_info *basic_info;

    ts_query_handle_t *hd = g_runtime.handle->query_handle;

    // parse query
	gettimeofday(&s,NULL);
	ts_buffer_t req_detail(req_buf->buf, req_buf->size);
    vector < ts_terminfo_t > term_list; ///todo: 可能影响性能
    opret = hd->parse_query(req_head, req_detail, basic_info, term_list);
    if(opret < 0)
    {
        UB_LOG_WARNING("hd->parse_query failed.ret[%d]", opret);
        return opret;
    }

    if(term_list.size() > TS_QTERM_MAXNUM)
    {
        UB_LOG_WARNING("term_list[%ld>%d] too large", term_list.size(),
                       TS_QTERM_MAXNUM);
        return -1;
	}
	gettimeofday(&e,NULL);
	ub_log_pushnotice("parse_query(us)","%lu",TIME_US_DIFF(s,e));
    
    // get ri libs
    vector < ts_ri_t * > ri_libs;

    ri_libs.push_back(&g_runtime.mem_ri);

    if(0 == g_runtime.mon_curdir || 1 == g_runtime.mon_curdir)
    {
        ri_libs.push_back(&g_runtime.mon_ri[g_runtime.mon_curdir]);
    }

    if(g_runtime.need_merge)    //can be not thread-safe
    {
        ri_libs.push_back(&g_runtime.day_ri[2]);
    }

    vector < ts_index_t > *merged_list =
        ((vector < ts_index_t > *)get_data("merged_list"));
    vector < ts_index_t > *filted_list =
        ((vector < ts_index_t > *)get_data("filted_list"));

    merged_list->clear();
	filted_list->clear();
	gettimeofday(&s,NULL);
    for(vector < ts_ri_t * >::iterator iter = ri_libs.begin();
        iter != ri_libs.end(); ++iter)
    {

		ts_ind_reader_t ind_reader(*iter);
		// merge
        opret = hd->merge_ind_list(req_head,term_list,ind_reader,merged_list);
        if(opret < 0)
        {   
            UB_LOG_WARNING("merge_ind_list failed.ret[%d]",opret);
            return opret;
        }

    }
    gettimeofday(&e,NULL);
    ub_log_pushnotice("merge_ind_list(us)","%lu",TIME_US_DIFF(s,e));
	// washout del/undel nodes
	gettimeofday(&s,NULL);
	int k = 0;
	for(vector < ts_index_t >::iterator i = merged_list->begin();
        i != merged_list->end(); ++i)
	{   

		if (1 == g_runtime.mod_table.get(i->id)) continue;

		bool bit = g_runtime.del_table.get(i->id);
		if( !strcmp(basic_info->cmd_str, "qsearchall")
		    ||(!strcmp(basic_info->cmd_str, "qsearchdel") && bit)
		    ||(!strcmp(basic_info->cmd_str, "qsearch") && !bit))
		{   
			merged_list->at(k++) = *i; 
		}   
	}   
	merged_list->resize(k);
    UB_LOG_DEBUG("merged_list.size[%ld]", merged_list->size());
	gettimeofday(&e,NULL);
    ub_log_pushnotice("washout_del(us)","%lu",TIME_US_DIFF(s,e));
    
	// filt
	gettimeofday(&s,NULL);
    filted_list->reserve(merged_list->size());
    filted_list->clear();
    ts_buffer_t brief(g_cfg.brief_size);
    opret = hd->index_filt(req_head, brief, merged_list, filted_list);
    if(opret < 0)
    {
        UB_LOG_WARNING("hd->index_filt failed.ret[%d]", opret);
        return opret;
	}
	gettimeofday(&e,NULL);
	ub_log_pushnotice("index_filt(us)","%lu",TIME_US_DIFF(s,e));
    
    // adjust
	gettimeofday(&s,NULL);     
	opret =
		hd->adjust_weight(req_head, term_list,filted_list);
	if(opret < 0)
	{
		UB_LOG_WARNING("hd->adjust_weight failed.ret[%d]", opret);
		return opret;
	}
	gettimeofday(&e,NULL);
	ub_log_pushnotice("adjust_weight(us)","%lu",TIME_US_DIFF(s,e));

    // res
	gettimeofday(&s,NULL);
    ts_buffer_t fulltext(g_cfg.fulltext_maxsize);
    ts_buffer_t res(res_buf->buf, res_buf->size);

    // --page    
    opret = hd->fill_basic_res(req_head, basic_info, filted_list, res);
    if (opret<0)
	{
		UB_LOG_WARNING("hd->init_abs failed.ret[%d]", opret);
		return opret;
	}

    /*if(0 == ret_num)
    {
        res_head->body_len = sizeof(ts_head_t);
        return 0;
    }*/    
    
    // --abs
	opret = hd->init_abs(req_head,res);
	if (opret<0)
	{
		UB_LOG_WARNING("hd->init_abs failed.ret[%d]", opret);
		return opret;
	}
    unsigned int i = 0;
    int start_num = basic_info->num_per_page*basic_info->page_no;
    for(vector < ts_index_t >::iterator iter =
        filted_list->begin() + start_num;
        iter != filted_list->end() && i < basic_info->ret_num; ++iter, ++i)
    {
        fulltext._used = fulltext._size;
        opret = g_runtime.di.read(iter->id, fulltext._buf, fulltext._used);
        if(opret < 0)
        {
            UB_LOG_WARNING("di.read failed.ret[%d]", opret);
            return opret;
        }

        g_runtime.mg.read(iter->id, brief._buf);
        brief._used = brief._size;

        opret = hd->add_abs(req_head, i, fulltext, brief, res);
        if(opret < 0)
        {
            UB_LOG_WARNING("hd->add_abs failed.i[%d]ret[%d]", i, opret);
            return opret;
        }

        fulltext.reset();
        brief.reset();
    }

	opret = hd->fini_abs(req_head,res);
	if (opret<0)
	{
		UB_LOG_WARNING("hd->fini_abs failed.ret[%d]", opret);
		return opret;
	}
	gettimeofday(&e,NULL);
	ub_log_pushnotice("add_abs(us)","%lu",TIME_US_DIFF(s,e));

    res_head->body_len = res._used;
    return 0;
}