예제 #1
0
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));
}
예제 #2
0
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;
}