mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-08 18:52:50 -06:00
fast word completion for functions names in the shell
This commit is contained in:
@@ -627,6 +627,32 @@ void namespace_iter(Namespace<V> map, PgfItor* itor, PgfExn *err)
|
||||
return;
|
||||
}
|
||||
|
||||
template <class V>
|
||||
void namespace_iter_prefix(Namespace<V> map, PgfText *prefix, PgfItor* itor, PgfExn *err)
|
||||
{
|
||||
if (map == 0)
|
||||
return;
|
||||
|
||||
int cmp = textcmp_prefix(prefix,&map->value->name);
|
||||
if (cmp < 0)
|
||||
namespace_iter_prefix(map->left, prefix, itor, err);
|
||||
else if (cmp > 0)
|
||||
namespace_iter_prefix(map->right, prefix, itor, err);
|
||||
else {
|
||||
namespace_iter_prefix(map->left, prefix, itor, err);
|
||||
if (err->type != PGF_EXN_NONE)
|
||||
return;
|
||||
|
||||
itor->fn(itor, &map->value->name, map->value.as_object(), err);
|
||||
if (err->type != PGF_EXN_NONE)
|
||||
return;
|
||||
|
||||
namespace_iter_prefix(map->right, prefix, itor, err);
|
||||
if (err->type != PGF_EXN_NONE)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
template <class V>
|
||||
Namespace<V> namespace_map(Namespace<V> map, std::function<ref<V>(ref<V>)> f)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user