void c_MorphTree::shortpath(t_SubStringEntryDList & reslist) { t_MorphNodeList nlist; t_MorphNodeDList res; _shortpath(root, nlist, res); res.sort(); t_MorphNodeDList::iterator it0, it1; it0 = it1 = res.begin(); if (res.size() > 0) // Added by PB; otherwise runtime error when res is an empty list { for(it1++; it1!=res.end(); it0++, it1++) { if ((*it0).size() != (*it1).size()) { break; } } res.erase(it1, res.end()); } t_MorphNodeList::const_iterator it; for(it0=res.begin(); it0!=res.end(); it0++) { t_SubStringEntryList tmplist; for(it=(*it0).begin(); it!=(*it0).end(); it++) { tmplist.push_back((*it)->inf); } reslist.push_back(tmplist); } }
/* returns a static buffer, overwritten with each call */ char *shortpath(const char *path, unsigned maxlen, const char *home) { char *e; static char tmp[PATH_MAX]; extern bool gvTilde; if(!path) return 0; strcpy(tmp, path); path_collapse(tmp); if(home && home[0] && strlen(home)>=3 && gvTilde) { if(strncmp(tmp, home, strlen(home)) == 0) { tmp[0] = '~'; strpull(tmp+1, strlen(home)-1); } } if(maxlen <= 3) return tmp; e = _shortpath(tmp, maxlen); return e; }
void c_MorphTree::_shortpath(const c_MorphNode & node, t_MorphNodeList & nlist, t_MorphNodeDList & res) { if(!node.nodes.size() && nlist.size()) res.push_back(nlist); for(unsigned i=0; i<node.nodes.size(); i++) { nlist.push_back(&(node.nodes[i])); _shortpath(node.nodes[i], nlist, res); nlist.pop_back(); } }
static char *_shortpath(char *path, unsigned maxlen) { static char tmp[PATH_MAX]; int len = strlen(path); strcpy(tmp, path); if(len <= maxlen) return tmp; dirtodots(tmp, maxlen); return _shortpath(tmp, maxlen); }