overridemethods : output |
Output the block to the stream.
Any other method of any other object can call this method. This is called 'public' access.
The data-type returned is "voidtype";
This method is contained in the object "overridemethods".
The method takes the following arguments:
filedef : Pointer to tgl_structure_parser
Not sure.
obj : Pointer to @schemaobj
Not sure.
This method is overridden from an abstract method with the same signature found in the object @block.
The files "../cppxmlobj/reflect/jscript_object_navigator.hpp", "schema/schema_method.hpp" and "tgl_block_parser.hpp" are included.
Find any methods that need to be overridden.
xmlobj::xmlobj *o = obj; if (_location != "") { ph::reflect::jscript_object_navigator n(obj->root(), filedef->console(), false, false); ph::common::object_base *no = n.navigate(o, _location); if (!no) { filedef->error("Could not find location [" + _location + "] in object."); return; } o = dynamic_cast<xmlobj::xmlobj *>(no); if (!o) { filedef->error("Internal error. How could the object returned not be an xmlobj?."); return; } } ph::xmlobj::xmlobj_typed_vector<ph::tools::schema::schema_method> *v = dynamic_cast<ph::xmlobj::xmlobj_typed_vector<ph::tools::schema::schema_method> *>( o->get_composite_object("methods")); if (!v) { filedef->error("No composite member 'methods'."); return; } // loop through all of the methods for (ph::xmlobj::xmlobj_typed_vector<ph::tools::schema::schema_method>::iterator i=v->begin(); i != v->end(); i++) { // skip over those objects that don't match if matchname is on. if (o != obj && _matchname) if (i->name() != obj->name()) continue; if (i->get("inheritance") == "override") { // search back for the parent class whcih implements // this same name as an abstract method, and then use the source // for that, except without the "=0". ph::tools::schema::schema_method *impl = 0; xmlobj *parent = dynamic_cast<xmlobj *>(o->parent()); while (!impl && parent) { impl = find_method(parent, i->name()); if (!impl) parent = dynamic_cast<xmlobj *>(parent->parent()); } if (impl) { tgl_block_parser parser(this, impl, false, false, filedef); if (!parser.write_output(_structure)) { filedef->error("Could not process blocks."); return; } } else { std::string err = "Could not find overriden method '" + i->name() + "' as abstract."; filedef->error(err); return; } } }