void collect_stats(Stats& stats, const Index& index, const php::Program& program) { parallel::for_each( program.units, [&] (const std::unique_ptr<php::Unit>& unit) { for (auto& c : unit->classes) { collect_class(stats, index, *c); for (auto& m : c->methods) { collect_func(stats, index, *m); } } for (auto& x : unit->funcs) { collect_func(stats, index, *x); } collect_func(stats, index, *unit->pseudomain); } ); }
static PRUint32 collect_objects( CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulAttributeCount, ckmkInternalObject ***listp, CK_RV *pError ) { PRUint32 i; PRUint32 count = 0; PRUint32 size = 0; CK_OBJECT_CLASS objClass; /* * first handle the static build in objects (if any) */ for( i = 0; i < nss_ckmk_nObjects; i++ ) { ckmkInternalObject *o = (ckmkInternalObject *)&nss_ckmk_data[i]; if( CK_TRUE == ckmk_match(pTemplate, ulAttributeCount, o) ) { PUT_OBJECT(o, *pError, size, count, *listp); } } /* * now handle the various object types */ objClass = nss_ckmk_GetULongAttribute(CKA_CLASS, pTemplate, ulAttributeCount, pError); if (CKR_OK != *pError) { objClass = CK_INVALID_HANDLE; } *pError = CKR_OK; switch (objClass) { case CKO_CERTIFICATE: count = collect_class(objClass, kSecCertificateItemClass, pTemplate, ulAttributeCount, listp, &size, count, pError); break; case CKO_PUBLIC_KEY: count = collect_class(objClass, CSSM_DL_DB_RECORD_PUBLIC_KEY, pTemplate, ulAttributeCount, listp, &size, count, pError); break; case CKO_PRIVATE_KEY: count = collect_class(objClass, CSSM_DL_DB_RECORD_PRIVATE_KEY, pTemplate, ulAttributeCount, listp, &size, count, pError); break; /* all of them */ case CK_INVALID_HANDLE: count = collect_class(CKO_CERTIFICATE, kSecCertificateItemClass, pTemplate, ulAttributeCount, listp, &size, count, pError); count = collect_class(CKO_PUBLIC_KEY, CSSM_DL_DB_RECORD_PUBLIC_KEY, pTemplate, ulAttributeCount, listp, &size, count, pError); count = collect_class(CKO_PUBLIC_KEY, CSSM_DL_DB_RECORD_PRIVATE_KEY, pTemplate, ulAttributeCount, listp, &size, count, pError); break; default: break; } if (CKR_OK != *pError) { goto loser; } return count; loser: nss_ZFreeIf(*listp); return 0; }