bool Object::inherits(const char* cls) const { TypeInfo* typeinfo = getTypeInfo(); for (; typeinfo; typeinfo=typeinfo->getBaseTypeInfo()) { if (Strequ(cls, typeinfo->getTypeName())) { return true; } } return false; }
Member* Object::findMember(const char* name) const { TypeInfo* typeinfo = getTypeInfo(); while (typeinfo) { Member* member = typeinfo->findMember(name); if (member) return member; typeinfo = typeinfo->getBaseTypeInfo(); } if (!m_classInfo) { return nullptr; } ScriptPropDict::const_iterator it = m_classInfo->m_scriptProps.find(name); if (it == m_classInfo->m_scriptProps.end()) { return nullptr; } return it->second; }
void Object::copyPropertiesFrom(const Object* rhs) { // write properties TypeInfo* typeinfo = rhs->getTypeInfo(); while (typeinfo) { // don't copy objectname if (typeinfo == Object::m_typeinfo) break; const MemberSeq& members = typeinfo->getMembers(); AX_FOREACH(Member* m, members) { if (!m->isProperty()) { continue; } if (m->isConst()) { continue; } setProperty(m->getName(), m->getProperty(rhs)); } typeinfo = typeinfo->getBaseTypeInfo(); } // write script properties const ClassInfo* classinfo = getClassInfo(); if (!classinfo) return; const ScriptPropSeq& props = classinfo->m_scriptPropSeq; AX_FOREACH(ScriptProp* m, props) { if (m->getPropKind() == ScriptProp::kGroup) continue; setProperty(m->getName(), m->getProperty(rhs)); } }
void Object::writeProperties(File* f, int indent) const { String indstr(indent*2, ' '); #define INDENT if (indent) f->printf("%s", indstr.c_str()); // write properties TypeInfo* typeinfo = getTypeInfo(); while (typeinfo) { const MemberSeq& members = typeinfo->getMembers(); AX_FOREACH(Member* m, members) { if (!m->isProperty()) { continue; } if (m->isConst()) { continue; } INDENT; f->printf(" %s=\"%s\"\n", m->getName(), getProperty(m->getName()).toString().c_str()); } typeinfo = typeinfo->getBaseTypeInfo(); } // write script properties const ClassInfo* classinfo = getClassInfo(); if (!classinfo) return; const ScriptPropSeq& props = classinfo->m_scriptPropSeq; AX_FOREACH(ScriptProp* m, props) { if (m->getPropKind() == ScriptProp::kGroup) continue; INDENT; f->printf(" %s=\"%s\"\n", m->getName(), m->getProperty(this).toString().c_str()); } #undef INDENT }