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(); }
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 }
/*! * 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(); }
int main() { brief("abc"); brief("abcdefghijklmnopqr"); // not brief enough }
const HeaderStrategy * prev() const { return brief(); }
const HeaderStrategy * next() const { return brief(); }
/** * @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; }