bool Slice::ChecksumVisitor::visitClassDefStart(const ClassDefPtr& p) { if (p->isLocal()) { return false; } ClassList bases = p->bases(); ostringstream ostr; if (p->isInterface()) { ostr << "interface "; } else { ostr << "class "; } ostr << p->name(); if (!bases.empty()) { if (!bases.front()->isInterface()) { ostr << " extends " << bases.front()->scoped(); bases.erase(bases.begin()); } if (!bases.empty()) { if (p->isInterface()) { ostr << " extends "; } else { ostr << " implements "; } for (ClassList::iterator q = bases.begin(); q != bases.end(); ++q) { if (q != bases.begin()) { ostr << ", "; } ostr << (*q)->scoped(); } } } ostr << endl; if (p->hasDataMembers()) { DataMemberList members = p->dataMembers(); for (DataMemberList::iterator q = members.begin(); q != members.end(); ++q) { ostr << typeToString((*q)->type()) << ' ' << (*q)->name() << endl; } } if (p->hasOperations()) { OperationList ops = p->operations(); for (OperationList::iterator q = ops.begin(); q != ops.end(); ++q) { ostr << typeToString((*q)->returnType()) << ' ' << (*q)->name() << '('; ParamDeclList params = (*q)->parameters(); for (ParamDeclList::iterator r = params.begin(); r != params.end(); ++r) { if (r != params.begin()) { ostr << ", "; } if ((*r)->isOutParam()) { ostr << "out "; } ostr << typeToString((*r)->type()) << ' ' << (*r)->name(); } ostr << ')'; ExceptionList ex = (*q)->throws(); if (!ex.empty()) { ostr << " throws "; for (ExceptionList::iterator s = ex.begin(); s != ex.end(); ++s) { if (s != ex.begin()) { ostr << ", "; } ostr << (*s)->scoped(); } } ostr << endl; } } updateMap(p->scoped(), ostr.str()); return false; }