Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "Reflex/Base.h"
00016
00017
00018 #include "CommonTools/Utils/src/findDataMember.h"
00019 #include "CommonTools/Utils/src/ErrorCodes.h"
00020
00021
00022
00023
00024
00025 namespace reco {
00026 Reflex::Member findDataMember(const Reflex::Type& iType, const std::string& iName, int& oError) {
00027 using namespace Reflex;
00028 Member returnValue;
00029 oError = parser::kNameDoesNotExist;
00030 Type type = iType;
00031 if(type) {
00032 if(type.IsPointer()) {
00033 type = type.ToType();
00034 }
00035 returnValue = type.DataMemberByName(iName);
00036 if(!returnValue) {
00037
00038 for(Base_Iterator b = type.Base_Begin(); b != type.Base_End(); ++ b) {
00039 returnValue = findDataMember(b->ToType(), iName, oError);
00040
00041 if(returnValue || parser::kNameDoesNotExist != oError) {
00042 break;
00043 }
00044 }
00045 }
00046 if(returnValue && !returnValue.IsPublic()) {
00047 returnValue = Member();
00048 oError = parser::kIsNotPublic;
00049 }
00050 }
00051 if(returnValue) {
00052 oError = parser::kNoError;
00053 }
00054 return returnValue;
00055 }
00056 }