📄 classstr.cpp
字号:
"\n" " /// Assign a value to "<<i->cName<<" data member.\n" " ///\n" " /// @return\n" " /// Reference to the data value.\n"; } setters << " "<<i->tName<<"& Set"<<i->cName<<"(void);\n"; if ( i->canBeNull ) { // we have to init ref before returning _ASSERT(!i->haveFlag); methods << rType<<"& "<<methodPrefix<<"Set"<<i->cName<<"(void)\n" "{\n"; if ( i->delayed ) { methods << " "DELAY_PREFIX<<i->cName<<".Update();\n"; } methods << " if ( !"<<i->mName<<" )\n" " "<<i->mName<<".Reset("<<i->type->NewInstance(NcbiEmptyString)<<");\n" " return "<<i->valueName<<";\n" "}\n" "\n"; } else { // value already not null -> simple inline method inlineMethods << "inline\n"<< rType<<"& "<<methodPrefix<<"Set"<<i->cName<<"(void)\n" "{\n"; if ( i->delayed ) { inlineMethods << " "DELAY_PREFIX<<i->cName<<".Update();\n"; } if ( i->haveFlag) { inlineMethods << " "SET_PREFIX"["<<set_index<<"] |= 0x"<<hex<<set_mask<<dec<<";\n"; } if (isNullWithAtt) { inlineMethods << " "<<i->mName<<"->Set"<<i->cName<<"();\n"; } inlineMethods << " return "<<i->valueName<<";\n" "}\n" "\n"; } if (i->dataType && !isNullWithAtt) { const CDataType* resolved = i->dataType->Resolve(); if (resolved && resolved != i->dataType) { CClassTypeStrings* typeStr = resolved->GetTypeStr(); if (typeStr) { ITERATE ( TMembers, ir, typeStr->m_Members ) { if (ir->simple) { string ircType(ir->type->GetCType( code.GetNamespace())); if (CClassCode::GetDoxygenComments()) { setters << "\n" " /// Assign a value to "<<i->cName<<" data member.\n" " ///\n" " /// @param value\n" " /// Reference to value.\n"; } setters << " void Set"<<i->cName<<"(const "<< ircType<<"& value);\n"; methods << "void "<<methodPrefix<<"Set"<< i->cName<<"(const "<<ircType<< "& value)\n" "{\n"; methods << " Set" << i->cName << "() = value;\n" "}\n" "\n"; } } } } } } else { if (isNull) { if (CClassCode::GetDoxygenComments()) { setters << "\n" " /// Set NULL data member (assign \'NULL\' value to "<<i->cName<<" data member).\n"; } setters << " void Set"<<i->cName<<"(void);\n"; inlineMethods << "inline\n"<< "void "<<methodPrefix<<"Set"<<i->cName<<"(void)\n" "{\n"; inlineMethods << " "SET_PREFIX"["<<set_index<<"] |= 0x"<<hex<<set_mask<<dec<<";\n"; inlineMethods << "}\n" "\n"; } else { if ( i->type->CanBeCopied() ) { if (CClassCode::GetDoxygenComments()) { setters << "\n" " /// Assign a value to "<<i->cName<<" data member.\n" " ///\n" " /// @param value\n" " /// Reference to value.\n"; } setters << " void Set"<<i->cName<<"(const "<<i->tName<<"& value);\n"; inlineMethods << "inline\n" "void "<<methodPrefix<<"Set"<<i->cName<<"(const "<<rType<<"& value)\n" "{\n"; if ( i->delayed ) { inlineMethods << " "DELAY_PREFIX<<i->cName<<".Forget();\n"; } inlineMethods << " "<<i->valueName<<" = value;\n"; if ( i->haveFlag ) { inlineMethods << " "SET_PREFIX"["<<set_index<<"] |= 0x"<<hex<<set_mask<<dec<<";\n"; } inlineMethods << "}\n" "\n"; } if (CClassCode::GetDoxygenComments()) { setters << "\n" " /// Assign a value to "<<i->cName<<" data member.\n" " ///\n" " /// @return\n" " /// Reference to the data value.\n"; } setters << " "<<i->tName<<"& Set"<<i->cName<<"(void);\n"; inlineMethods << "inline\n"<< rType<<"& "<<methodPrefix<<"Set"<<i->cName<<"(void)\n" "{\n"; if ( i->delayed ) { inlineMethods << " "DELAY_PREFIX<<i->cName<<".Update();\n"; } if ( i->haveFlag ) { if ((kind == eKindStd) || (kind == eKindEnum) || (kind == eKindString)) { inlineMethods << "#ifdef _DEBUG\n" " if (!IsSet"<<i->cName<<"()) {\n" " "; if (kind == eKindString) { inlineMethods << i->valueName << " = ms_UnassignedStr;\n"; } else { inlineMethods << "memset(&"<<i->valueName<<",ms_UnassignedByte,sizeof("<<i->valueName<<"));\n"; } inlineMethods << " }\n" "#endif\n"; } inlineMethods << " "SET_PREFIX"["<<set_index<<"] |= 0x"<<hex<<set_mask_maybe<<dec<<";\n"; } inlineMethods << " return "<<i->valueName<<";\n" "}\n" "\n"; } } // generate conversion operators if ( i->cName.empty() ) { if ( i->optional ) { NCBI_THROW(CDatatoolException,eInvalidData, "the only member of adaptor class is optional"); } code.ClassPublic() << " /// Conversion operator to \'const "<<i->tName<<"\' type.\n" " operator const "<<i->tName<<"& (void) const;\n\n" " /// Conversion operator to \'"<<i->tName<<"\' type.\n" " operator "<<i->tName<<"& (void);\n\n"; inlineMethods << "inline\n"<< methodPrefix<<"operator const "<<rType<<"& (void) const\n" "{\n"; if ( i->delayed ) { inlineMethods << " "DELAY_PREFIX<<i->cName<<".Update();\n"; } inlineMethods << " return "; if ( i->ref ) inlineMethods << "*"; inlineMethods << i->mName<<";\n" "}\n" "\n"; inlineMethods << "inline\n"<< methodPrefix<<"operator "<<rType<<"& (void)\n" "{\n"; if ( i->delayed ) { inlineMethods << " "DELAY_PREFIX<<i->cName<<".Update();\n"; } if ( i->haveFlag ) { if ((kind == eKindStd) || (kind == eKindEnum) || (kind == eKindString)) { inlineMethods << "#ifdef _DEBUG\n" " if (!IsSet"<<i->cName<<"()) {\n" " "; if (kind == eKindString) { inlineMethods << i->valueName << " = ms_UnassignedStr;\n"; } else { inlineMethods << "memset(&"<<i->valueName<<",ms_UnassignedByte,sizeof("<<i->valueName<<"));\n"; } inlineMethods << " }\n" "#endif\n"; } inlineMethods << " "SET_PREFIX"["<<set_index<<"] |= 0x"<<hex<<set_mask_maybe<<dec<<";\n"; } inlineMethods << " return "; if ( i->ref ) inlineMethods << "*"; inlineMethods << i->mName<<";\n" "}\n" "\n"; } setters << "\n"; } } // generate member data { code.ClassPrivate() << " // Prohibit copy constructor and assignment operator\n" << " " << code.GetClassNameDT() << "(const " << code.GetClassNameDT() << "&);\n" << " " << code.GetClassNameDT() << "& operator=(const " << code.GetClassNameDT() << "&);\n" << "\n"; code.ClassPrivate() << " // data\n"; { if (m_Members.size() !=0) { code.ClassPrivate() << " Uint4 "SET_PREFIX<<"["<< (2*m_Members.size()-1+8*sizeof(Uint4))/(8*sizeof(Uint4)) <<"];\n"; } } { ITERATE ( TMembers, i, m_Members ) { if ( i->delayed ) { code.ClassPrivate() << " mutable NCBI_NS_NCBI::CDelayBuffer "DELAY_PREFIX<<i->cName<<";\n"; } } } { ITERATE ( TMembers, i, m_Members ) { if ( i->ref ) { code.ClassPrivate() << " "<<ncbiNamespace<<"CRef< "<<i->tName<<" > "<<i->mName<<";\n"; } else { if (!x_IsNullType(i)) { code.ClassPrivate() << " "<<i->tName<<" "<<i->mName<<";\n"; } } } } } // generate member initializers { { ITERATE ( TMembers, i, m_Members ) { if ( i->ref ) { if ( !i->canBeNull ) { string init = i->defaultValue; if ( init.empty() ) { init = i->type->GetInitializer(); } code.AddInitializer(i->mName, i->type->NewInstance(init)); } } else { if (!x_IsNullType(i)) { string init = i->defaultValue; if ( init.empty() ) init = i->type->GetInitializer(); if ( !init.empty() ) code.AddInitializer(i->mName, init); } } } } } // generate Reset method code.ClassPublic() << " /// Reset the whole object\n" " "; if ( !wrapperClass ) { if ( HaveUserClass() ) code.ClassPublic() << "virtual "; code.ClassPublic() << "void Reset(void);\n"; methods << "void "<<methodPrefix<<"Reset(void)\n" "{\n"; ITERATE ( TMembers, i, m_Members ) { methods << " Reset"<<i->cName<<"();\n"; } methods << "}\n" "\n"; } code.ClassPublic() << "\n";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -