File indexing completed on 2023-03-17 10:45:42
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 #include "TInterpreter.h"
0016 #include "TVirtualMutex.h"
0017
0018 #include "FWCore/Reflection/interface/BaseWithDict.h"
0019
0020
0021 #include "CommonTools/Utils/src/findDataMember.h"
0022 #include "CommonTools/Utils/src/ErrorCodes.h"
0023
0024
0025
0026
0027
0028 namespace reco {
0029
0030 edm::MemberWithDict findDataMember(const edm::TypeWithDict& iType, const std::string& iName, int& oError) {
0031 edm::MemberWithDict ret;
0032 oError = parser::kNameDoesNotExist;
0033 edm::TypeWithDict type = iType;
0034 if (!bool(type)) {
0035 return ret;
0036 }
0037 if (type.isPointer()) {
0038 type = type.toType();
0039 }
0040 ret = type.dataMemberByName(iName);
0041 if (!bool(ret)) {
0042
0043 edm::TypeBases bases(type);
0044 for (auto const& B : bases) {
0045 ret = findDataMember(edm::BaseWithDict(B).typeOf(), iName, oError);
0046
0047 if (bool(ret) || (oError != parser::kNameDoesNotExist)) {
0048 break;
0049 }
0050 }
0051 }
0052 if (bool(ret) && !ret.isPublic()) {
0053 ret = edm::MemberWithDict();
0054 oError = parser::kIsNotPublic;
0055 } else if (bool(ret)) {
0056 oError = parser::kNoError;
0057 }
0058 return ret;
0059 }
0060
0061 }