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