📄 serialobject.cpp
字号:
index += classtype->GetItems().FirstIndex(); if ( classtype && index >= classtype->GetItems().FirstIndex() && index <= classtype->GetItems().LastIndex() ) { s << classtype->GetItems().GetItemInfo(index)->GetId().GetName(); } else { s << '[' << index << ']'; } NCBI_THROW(CUnassignedMember,eGet,CNcbiOstrstreamToString(s)); }}bool CSerialObject::HasNamespaceName(void) const{ return GetThisTypeInfo()->HasNamespaceName();}const string& CSerialObject::GetNamespaceName(void) const{ return GetThisTypeInfo()->GetNamespaceName();}void CSerialObject::SetNamespaceName(const string& ns_name){ GetThisTypeInfo()->SetNamespaceName(ns_name);}bool CSerialObject::HasNamespacePrefix(void) const{ return GetThisTypeInfo()->HasNamespacePrefix();}const string& CSerialObject::GetNamespacePrefix(void) const{ return GetThisTypeInfo()->GetNamespacePrefix();}void CSerialObject::SetNamespacePrefix(const string& ns_prefix){ GetThisTypeInfo()->SetNamespacePrefix(ns_prefix);}CSerialAttribInfoItem::CSerialAttribInfoItem( const string& name, const string& ns_name, const string& value) : m_Name(name), m_NsName(ns_name), m_Value(value){}CSerialAttribInfoItem::CSerialAttribInfoItem(const CSerialAttribInfoItem& other) : m_Name(other.m_Name), m_NsName(other.m_NsName), m_Value(other.m_Value){}CSerialAttribInfoItem::~CSerialAttribInfoItem(void){}const string& CSerialAttribInfoItem::GetName(void) const{ return m_Name;}const string& CSerialAttribInfoItem::GetNamespaceName(void) const{ return m_NsName;}const string& CSerialAttribInfoItem::GetValue(void) const{ return m_Value;}CAnyContentObject::CAnyContentObject(void){}CAnyContentObject::CAnyContentObject(const CAnyContentObject& other){ x_Copy(other);}CAnyContentObject::~CAnyContentObject(void){}const CTypeInfo* CAnyContentObject::GetTypeInfo(void){ return CStdTypeInfo<ncbi::CAnyContentObject>::GetTypeInfo();}void CAnyContentObject::Reset(void){ m_Name.erase(); m_Value.erase(); m_NsName.erase(); m_NsPrefix.erase(); m_Attlist.clear();}void CAnyContentObject::x_Copy(const CAnyContentObject& other){ m_Name = other.m_Name; m_Value= other.m_Value; m_NsName= other.m_NsName; m_NsPrefix= other.m_NsPrefix; m_Attlist.clear(); vector<CSerialAttribInfoItem>::const_iterator it; for (it = other.m_Attlist.begin(); it != other.m_Attlist.end(); ++it) { m_Attlist.push_back( *it); }}CAnyContentObject& CAnyContentObject::operator= (const CAnyContentObject& other){ x_Copy(other); return *this;}bool CAnyContentObject::operator== (const CAnyContentObject& other) const{ return m_Name == other.GetName() && m_Value == other.GetValue() && m_NsName == other.m_NsName;}void CAnyContentObject::SetName(const string& name){ m_Name = name;}const string& CAnyContentObject::GetName(void) const{ return m_Name;}void CAnyContentObject::SetValue(const string& value){ x_Decode(value);}const string& CAnyContentObject::GetValue(void) const{ return m_Value;}void CAnyContentObject::SetNamespaceName(const string& ns_name){ m_NsName = ns_name;}const string& CAnyContentObject::GetNamespaceName(void) const{ return m_NsName;}void CAnyContentObject::SetNamespacePrefix(const string& ns_prefix){ m_NsPrefix = ns_prefix;}const string& CAnyContentObject::GetNamespacePrefix(void) const{ return m_NsPrefix;}void CAnyContentObject::x_Decode(const string& value){ m_Value = value;}void CAnyContentObject::AddAttribute( const string& name, const string& ns_name, const string& value){// TODO: check if an attrib with this name+ns_name already exists m_Attlist.push_back( CSerialAttribInfoItem( name,ns_name,value));}const vector<CSerialAttribInfoItem>&CAnyContentObject::GetAttributes(void) const{ return m_Attlist;}/////////////////////////////////////////////////////////////////////////////// I/O stream manipulators and helpers for serializable objects#define eFmt_AsnText (1l << 0)#define eFmt_AsnBinary (1l << 1)#define eFmt_Xml (1l << 2)#define eFmt_All (eFmt_AsnText | eFmt_AsnBinary | eFmt_Xml)#define eVerify_No (1l << 8)#define eVerify_Yes (1l << 9)#define eVerify_DefValue (1l << 10)#define eVerify_All (eVerify_No | eVerify_Yes | eVerify_DefValue)staticlong& s_SerFlags(CNcbiIos& io){ static int s_SerIndex; {{ // Make sure to get a unique IOS index static bool s_HaveIndex = false; if ( !s_HaveIndex ) { s_SerIndex = CNcbiIos::xalloc(); s_HaveIndex = true; } }} return io.iword(s_SerIndex);}staticESerialDataFormat s_SerFormat(CNcbiIos& io){ switch (s_SerFlags(io) & eFmt_All) { case eFmt_AsnText: return eSerial_AsnText; case eFmt_AsnBinary: return eSerial_AsnBinary; case eFmt_Xml: return eSerial_Xml; default: return eSerial_None; }}staticESerialVerifyData s_SerVerify(CNcbiIos& io){ switch (s_SerFlags(io) & eVerify_All) { case eVerify_No: return eSerialVerifyData_No; case eVerify_Yes: return eSerialVerifyData_Yes; case eVerify_DefValue: return eSerialVerifyData_DefValue; default: return eSerialVerifyData_Default; }}// FormattingCNcbiIos& MSerial_AsnText(CNcbiIos& io){ s_SerFlags(io) = (s_SerFlags(io) & ~eFmt_All) | eFmt_AsnText; return io;}CNcbiIos& MSerial_AsnBinary(CNcbiIos& io){ s_SerFlags(io) = (s_SerFlags(io) & ~eFmt_All) | eFmt_AsnBinary; return io;}CNcbiIos& MSerial_Xml(CNcbiIos& io){ s_SerFlags(io) = (s_SerFlags(io) & ~eFmt_All) | eFmt_Xml; return io;}// Class member assignment verificationCNcbiIos& MSerial_VerifyDefault(CNcbiIos& io){ s_SerFlags(io) = (s_SerFlags(io) & ~eVerify_All); return io;}CNcbiIos& MSerial_VerifyNo(CNcbiIos& io){ s_SerFlags(io) = (s_SerFlags(io) & ~eVerify_All) | eVerify_No; return io;}CNcbiIos& MSerial_VerifyYes(CNcbiIos& io){ s_SerFlags(io) = (s_SerFlags(io) & ~eVerify_All) | eVerify_Yes; return io;}CNcbiIos& MSerial_VerifyDefValue(CNcbiIos& io){ s_SerFlags(io) = (s_SerFlags(io) & ~eVerify_All) | eVerify_DefValue; return io;}// Input/outputCNcbiOstream& operator<< (CNcbiOstream& os, const CSerialObject& obj){ auto_ptr<CObjectOStream> ostr( CObjectOStream::Open(s_SerFormat(os), os) ); ostr->SetVerifyData(s_SerVerify(os)); ostr->Write(&obj,obj.GetThisTypeInfo()); return os;}CNcbiIstream& operator>> (CNcbiIstream& is, CSerialObject& obj){ auto_ptr<CObjectIStream> istr( CObjectIStream::Open(s_SerFormat(is), is) ); istr->SetVerifyData(s_SerVerify(is)); istr->Read(&obj,obj.GetThisTypeInfo()); return is;}END_NCBI_SCOPE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -