Add map_keys support so member auto-completion works.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@10373 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
9a0cf47532
commit
87390fac26
1 changed files with 25 additions and 5 deletions
|
|
@ -250,7 +250,7 @@ namespace {
|
|||
|
||||
void load_members(const swig_octave_class* c,member_map& out) const {
|
||||
for (const swig_octave_member *m = c->members; m->name; ++m) {
|
||||
if (out.find(m->name)==out.end())
|
||||
if (out.find(m->name) == out.end())
|
||||
out.insert(std::make_pair(m->name, std::make_pair(m, octave_value())));
|
||||
}
|
||||
for (int j = 0; c->base_names[j]; ++j) {
|
||||
|
|
@ -269,6 +269,13 @@ namespace {
|
|||
}
|
||||
}
|
||||
|
||||
void load_members(member_map& out) const {
|
||||
out=members;
|
||||
for (unsigned int j = 0; j < types.size(); ++j)
|
||||
if (types[j].first->clientdata)
|
||||
load_members((const swig_octave_class *) types[j].first->clientdata, out);
|
||||
}
|
||||
|
||||
octave_value_list member_invoke(member_value_pair *m, const octave_value_list &args, int nargout) {
|
||||
if (m->second.is_defined())
|
||||
return m->second.subsref("(", std::list < octave_value_list > (1, args), nargout);
|
||||
|
|
@ -673,6 +680,18 @@ namespace {
|
|||
return outarg(0).string_value();
|
||||
}
|
||||
|
||||
virtual string_vector map_keys() const {
|
||||
member_map tmp;
|
||||
load_members(tmp);
|
||||
|
||||
string_vector keys(tmp.size());
|
||||
int k = 0;
|
||||
for (member_map::iterator it = tmp.begin(); it != tmp.end(); ++it)
|
||||
keys(k++) = it->first;
|
||||
|
||||
return keys;
|
||||
}
|
||||
|
||||
virtual octave_value convert_to_str(bool pad = false, bool force = false, char type = '"') const {
|
||||
return string_value();
|
||||
}
|
||||
|
|
@ -759,10 +778,8 @@ namespace {
|
|||
return;
|
||||
}
|
||||
|
||||
member_map tmp(members);
|
||||
for (unsigned int j = 0; j < types.size(); ++j)
|
||||
if (types[j].first->clientdata)
|
||||
load_members((const swig_octave_class *) types[j].first->clientdata, tmp);
|
||||
member_map tmp;
|
||||
load_members(tmp);
|
||||
|
||||
os << "{" << std::endl;
|
||||
for (unsigned int j = 0; j < types.size(); ++j) {
|
||||
|
|
@ -838,6 +855,9 @@ namespace {
|
|||
virtual std::string string_value(bool force = false) const
|
||||
{ return ptr->string_value(force); }
|
||||
|
||||
virtual string_vector map_keys() const
|
||||
{ return ptr->map_keys(); }
|
||||
|
||||
virtual octave_value convert_to_str(bool pad = false, bool force = false, char type = '"') const
|
||||
{ return ptr->convert_to_str(pad, force, type); }
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue