void FieldDefinition::addFieldType(const FieldType& fieldType) { TypeMap::const_iterator it = m_name2TypeMap.find(fieldType.getName()); if (it != m_name2TypeMap.end()) { FIRTEX_THROW(IllegalArgumentException, _T("Field type duplicate: [%s]"), fieldType.getName().c_str()); } FieldType* pFieldType = new FieldType(fieldType); m_types.push_back(pFieldType); m_name2TypeMap.insert(make_pair(pFieldType->getName(), pFieldType)); }
bool isFieldContentDerivedFrom(const FieldType &TheFieldType, const FieldContainerType* TheFCType) { if(TheFieldType.isPtrField()) { std::string FieldPtrTypeName(TheFieldType.getName()); switch(TheFieldType.getClass()) { case FieldType::PtrField: FieldPtrTypeName = FieldPtrTypeName.substr(7,FieldPtrTypeName.size()-10); break; case FieldType::ParentPtrField: FieldPtrTypeName = FieldPtrTypeName.substr(13,FieldPtrTypeName.size()-16); break; case FieldType::ChildPtrField: FieldPtrTypeName = FieldPtrTypeName.substr(12,FieldPtrTypeName.size()-15); break; default: case FieldType::ValueField: return false; break; } const FieldContainerType* PtrContentType = FieldContainerFactory::the()->findType(FieldPtrTypeName.c_str()); return TheFCType->isDerivedFrom(*PtrContentType); } else { return false; } return false; }