bool cut(Unicode::const_iterator begin , Unicode::const_iterator end, vector<TrieNodeInfo>& segWordInfos)const { if(!_getInitFlag()) { LogError("not inited."); return false; } SegmentContext segContext; //calc DAG if(!_calcDAG(begin, end, segContext)) { LogError("_calcDAG failed."); return false; } if(!_calcDP(segContext)) { LogError("_calcDP failed."); return false; } if(!_cut(segContext, segWordInfos)) { LogError("_cut failed."); return false; } return true; }
static int cut(struct cut_option *op, const char *file) { char tmpline[MAX_LINE_BUF_SIZE]; FILE *fp = open_simplefile(file); int err; memset(tmpline, 0, MAX_LINE_BUF_SIZE); while(fgets(tmpline, MAX_LINE_BUF_SIZE, fp) != NULL) { if((err = _cut(op, tmpline)) != 0) return err; memset(tmpline, 0, MAX_LINE_BUF_SIZE); } if(ferror(fp)) { fprintf(stderr, "fgets [%s] happend some error[%s]\n", file, strerror(errno)); fclose(fp); exit(1); } fclose(fp); return 0; }
node<V>* _decreaseKey(node<V>* heap,node<V>* n,V value) { if(n->value<value)return heap; n->value=value; if(n->value<n->parent->value) { heap=_cut(heap,n); node<V>* parent=n->parent; n->parent=NULL; while(parent!=NULL && parent->marked) { heap=_cut(heap,parent); n=parent; parent=n->parent; n->parent=NULL; } if(parent!=NULL && parent->parent!=NULL)parent->marked=true; } return heap; }
unsigned char DisInfo(struct words_info *words) { char *path, *size, *wrdf, *wrdl; int i, len = 0, key; _resize: path = _cut(1, getmaxx(stdscr) - 14, words->fpath); size = _husize(words->size); for (i = 0; i < 6; i++) len += _intlength(words->num[i]); len += 7; wrdf = _cut(2, getmaxx(stdscr) - 14, words->p->mean); wrdl = _cut(2, getmaxx(stdscr) - 14, words->p->prev->mean); len = _max(strlen(path), _max(strlen(size), _max(len, _max(strlen(wrdf), strlen(wrdl))))) + 12; clear(); border('|', '|', '-', '-', '+', '+', '+', '+'); _mvchgrectat(1, 1, getmaxy(stdscr) - 2, getmaxx(stdscr) - 2, 0, clr_ibkg, NULL); i = (getmaxy(stdscr) - 8) / 2 + 1; attron(COLOR_PAIR(clr_ides)); mvaddstr(i++, 1, "单词表文件: "); mvaddstr(i++, 1, "文件大小: "); mvaddstr(i++, 1, "单词个数: "); mvaddstr(i++, 1, "第一个单词: "); mvprintw(i++, 1, "最后一个: "); attroff(COLOR_PAIR(clr_ides)); attron(COLOR_PAIR(clr_con) | A_BOLD); mvaddstr(i++, 1, "按回车键继续,返回键返回..."); attroff(COLOR_PAIR(clr_con) | A_BOLD); i = (getmaxy(stdscr) - 8) / 2 + 1; attron(COLOR_PAIR(clr_igvn)); mvaddstr(i++, 13, path); mvaddstr(i++, 13, size); mvprintw(i++, 13, "%d (%d/%d/%d/%d/%d)", words->num[0], words->num[1], words->num[2], words->num[3], words->num[4], words->num[5]); mvaddstr(i++, 13, wrdf); mvaddstr(i++, 13, wrdl); attroff(COLOR_PAIR(clr_igvn)); refresh(); while (key = getch(), key != '\n' && key != 033) goto _resize; free(path); free(size); free(wrdf); free(wrdl); return key != 033; }