variant.cpp
来自「A*算法 A*算法 A*算法 A*算法A*算法A*算法」· C++ 代码 · 共 2,112 行 · 第 1/4 页
CPP
2,112 行
#endif
virtual bool Write(wxString& str) const;
virtual bool Read(wxString& str);
#if wxUSE_STD_IOSTREAM
virtual bool Read(wxSTD istream& str);
#endif
#if wxUSE_STREAMS
virtual bool Read(wxInputStream& str);
virtual bool Write(wxOutputStream& str) const;
#endif // wxUSE_STREAMS
virtual wxString GetType() const { return wxT("bool"); };
protected:
bool m_value;
};
IMPLEMENT_DYNAMIC_CLASS(wxVariantDataBool, wxVariantData)
void wxVariantDataBool::Copy(wxVariantData& data)
{
wxASSERT_MSG( (data.GetType() == wxT("bool")), wxT("wxVariantDataBool::Copy: Can't copy to this type of data") );
wxVariantDataBool& otherData = (wxVariantDataBool&) data;
otherData.m_value = m_value;
}
bool wxVariantDataBool::Eq(wxVariantData& data) const
{
wxASSERT_MSG( (data.GetType() == wxT("bool")), wxT("wxVariantDataBool::Eq: argument mismatch") );
wxVariantDataBool& otherData = (wxVariantDataBool&) data;
return (otherData.m_value == m_value);
}
#if wxUSE_STD_IOSTREAM
bool wxVariantDataBool::Write(wxSTD ostream& str) const
{
wxString s;
Write(s);
str << (const char*) s.mb_str();
return true;
}
#endif
bool wxVariantDataBool::Write(wxString& str) const
{
str.Printf(wxT("%d"), (int) m_value);
return true;
}
#if wxUSE_STD_IOSTREAM
bool wxVariantDataBool::Read(wxSTD istream& WXUNUSED(str))
{
wxFAIL_MSG(wxT("Unimplemented"));
// str >> (long) m_value;
return false;
}
#endif
#if wxUSE_STREAMS
bool wxVariantDataBool::Write(wxOutputStream& str) const
{
wxTextOutputStream s(str);
s.Write8(m_value);
return true;
}
bool wxVariantDataBool::Read(wxInputStream& str)
{
wxTextInputStream s(str);
m_value = s.Read8() != 0;
return true;
}
#endif // wxUSE_STREAMS
bool wxVariantDataBool::Read(wxString& str)
{
m_value = (wxAtol((const wxChar*) str) != 0);
return true;
}
#endif // HAVE_BOOL
/*
* wxVariantDataChar
*/
class WXDLLIMPEXP_BASE wxVariantDataChar: public wxVariantData
{
DECLARE_DYNAMIC_CLASS(wxVariantDataChar)
public:
wxVariantDataChar() { m_value = 0; }
wxVariantDataChar(char value) { m_value = value; }
inline char GetValue() const { return m_value; }
inline void SetValue(char value) { m_value = value; }
virtual void Copy(wxVariantData& data);
virtual bool Eq(wxVariantData& data) const;
#if wxUSE_STD_IOSTREAM
virtual bool Read(wxSTD istream& str);
virtual bool Write(wxSTD ostream& str) const;
#endif
virtual bool Read(wxString& str);
virtual bool Write(wxString& str) const;
#if wxUSE_STREAMS
virtual bool Read(wxInputStream& str);
virtual bool Write(wxOutputStream& str) const;
#endif // wxUSE_STREAMS
virtual wxString GetType() const { return wxT("char"); };
protected:
char m_value;
};
IMPLEMENT_DYNAMIC_CLASS(wxVariantDataChar, wxVariantData)
void wxVariantDataChar::Copy(wxVariantData& data)
{
wxASSERT_MSG( (data.GetType() == wxT("char")), wxT("wxVariantDataChar::Copy: Can't copy to this type of data") );
wxVariantDataChar& otherData = (wxVariantDataChar&) data;
otherData.m_value = m_value;
}
bool wxVariantDataChar::Eq(wxVariantData& data) const
{
wxASSERT_MSG( (data.GetType() == wxT("char")), wxT("wxVariantDataChar::Eq: argument mismatch") );
wxVariantDataChar& otherData = (wxVariantDataChar&) data;
return (otherData.m_value == m_value);
}
#if wxUSE_STD_IOSTREAM
bool wxVariantDataChar::Write(wxSTD ostream& str) const
{
wxString s;
Write(s);
str << (const char*) s.mb_str();
return true;
}
#endif
bool wxVariantDataChar::Write(wxString& str) const
{
str.Printf(wxT("%c"), m_value);
return true;
}
#if wxUSE_STD_IOSTREAM
bool wxVariantDataChar::Read(wxSTD istream& WXUNUSED(str))
{
wxFAIL_MSG(wxT("Unimplemented"));
// str >> m_value;
return false;
}
#endif
#if wxUSE_STREAMS
bool wxVariantDataChar::Write(wxOutputStream& str) const
{
wxTextOutputStream s(str);
s.Write8(m_value);
return true;
}
bool wxVariantDataChar::Read(wxInputStream& str)
{
wxTextInputStream s(str);
m_value = s.Read8();
return true;
}
#endif // wxUSE_STREAMS
bool wxVariantDataChar::Read(wxString& str)
{
m_value = str.ToAscii()[size_t(0)];
return true;
}
/*
* wxVariantDataString
*/
class WXDLLIMPEXP_BASE wxVariantDataString: public wxVariantData
{
DECLARE_DYNAMIC_CLASS(wxVariantDataString)
public:
wxVariantDataString() { }
wxVariantDataString(const wxString& value) { m_value = value; }
inline wxString GetValue() const { return m_value; }
inline void SetValue(const wxString& value) { m_value = value; }
virtual void Copy(wxVariantData& data);
virtual bool Eq(wxVariantData& data) const;
#if wxUSE_STD_IOSTREAM
virtual bool Write(wxSTD ostream& str) const;
#endif
virtual bool Read(wxString& str);
virtual bool Write(wxString& str) const;
#if wxUSE_STD_IOSTREAM
virtual bool Read(wxSTD istream& str);
#endif
#if wxUSE_STREAMS
virtual bool Read(wxInputStream& str);
virtual bool Write(wxOutputStream& str) const;
#endif // wxUSE_STREAMS
virtual wxString GetType() const { return wxT("string"); };
protected:
wxString m_value;
};
void wxVariantDataString::Copy(wxVariantData& data)
{
wxASSERT_MSG( (data.GetType() == wxT("string")), wxT("wxVariantDataString::Copy: Can't copy to this type of data") );
wxVariantDataString& otherData = (wxVariantDataString&) data;
otherData.m_value = m_value;
}
bool wxVariantDataString::Eq(wxVariantData& data) const
{
wxASSERT_MSG( (data.GetType() == wxT("string")), wxT("wxVariantDataString::Eq: argument mismatch") );
wxVariantDataString& otherData = (wxVariantDataString&) data;
return (otherData.m_value == m_value);
}
#if wxUSE_STD_IOSTREAM
bool wxVariantDataString::Write(wxSTD ostream& str) const
{
str << (const char*) m_value.mb_str();
return true;
}
#endif
bool wxVariantDataString::Write(wxString& str) const
{
str = m_value;
return true;
}
#if wxUSE_STD_IOSTREAM
bool wxVariantDataString::Read(wxSTD istream& str)
{
str >> m_value;
return true;
}
#endif
#if wxUSE_STREAMS
bool wxVariantDataString::Write(wxOutputStream& str) const
{
// why doesn't wxOutputStream::operator<< take "const wxString&"
wxTextOutputStream s(str);
s.WriteString(m_value);
return true;
}
bool wxVariantDataString::Read(wxInputStream& str)
{
wxTextInputStream s(str);
m_value = s.ReadString();
return true;
}
#endif // wxUSE_STREAMS
bool wxVariantDataString::Read(wxString& str)
{
m_value = str;
return true;
}
IMPLEMENT_DYNAMIC_CLASS(wxVariantDataString, wxVariantData)
/*
* wxVariantDataVoidPtr
*/
class wxVariantDataVoidPtr: public wxVariantData
{
DECLARE_DYNAMIC_CLASS(wxVariantDataVoidPtr)
public:
wxVariantDataVoidPtr() { }
wxVariantDataVoidPtr(void* value) { m_value = value; }
inline void* GetValue() const { return m_value; }
inline void SetValue(void* value) { m_value = value; }
virtual void Copy(wxVariantData& data);
virtual bool Eq(wxVariantData& data) const;
#if wxUSE_STD_IOSTREAM
virtual bool Write(wxSTD ostream& str) const;
#endif
virtual bool Write(wxString& str) const;
#if wxUSE_STD_IOSTREAM
virtual bool Read(wxSTD istream& str);
#endif
virtual bool Read(wxString& str);
virtual wxString GetType() const { return wxT("void*"); };
virtual wxVariantData* Clone() { return new wxVariantDataVoidPtr; }
protected:
void* m_value;
DECLARE_NO_COPY_CLASS(wxVariantDataVoidPtr)
};
IMPLEMENT_DYNAMIC_CLASS(wxVariantDataVoidPtr, wxVariantData)
void wxVariantDataVoidPtr::Copy(wxVariantData& data)
{
wxASSERT_MSG( (data.GetType() == wxT("void*")), wxT("wxVariantDataVoidPtr::Copy: Can't copy to this type of data") );
wxVariantDataVoidPtr& otherData = (wxVariantDataVoidPtr&) data;
otherData.m_value = m_value;
}
bool wxVariantDataVoidPtr::Eq(wxVariantData& data) const
{
wxASSERT_MSG( (data.GetType() == wxT("void*")), wxT("wxVariantDataVoidPtr::Eq: argument mismatch") );
wxVariantDataVoidPtr& otherData = (wxVariantDataVoidPtr&) data;
return (otherData.m_value == m_value);
}
#if wxUSE_STD_IOSTREAM
bool wxVariantDataVoidPtr::Write(wxSTD ostream& str) const
{
wxString s;
Write(s);
str << (const char*) s.mb_str();
return true;
}
#endif
bool wxVariantDataVoidPtr::Write(wxString& str) const
{
str.Printf(wxT("%ld"), (long) m_value);
return true;
}
#if wxUSE_STD_IOSTREAM
bool wxVariantDataVoidPtr::Read(wxSTD istream& WXUNUSED(str))
{
// Not implemented
return false;
}
#endif
bool wxVariantDataVoidPtr::Read(wxString& WXUNUSED(str))
{
// Not implemented
return false;
}
/*
* wxVariantDataWxObjectPtr
*/
class wxVariantDataWxObjectPtr: public wxVariantData
{
DECLARE_DYNAMIC_CLASS(wxVariantDataWxObjectPtr)
public:
wxVariantDataWxObjectPtr() { }
wxVariantDataWxObjectPtr(wxObject* value) { m_value = value; }
inline wxObject* GetValue() const { return m_value; }
inline void SetValue(wxObject* value) { m_value = value; }
virtual void Copy(wxVariantData& data);
virtual bool Eq(wxVariantData& data) const;
#if wxUSE_STD_IOSTREAM
virtual bool Write(wxSTD ostream& str) const;
#endif
virtual bool Write(wxString& str) const;
#if wxUSE_STD_IOSTREAM
virtual bool Read(wxSTD istream& str);
#endif
virtual bool Read(wxString& str);
virtual wxString GetType() const ;
virtual wxVariantData* Clone() { return new wxVariantDataWxObjectPtr; }
virtual wxClassInfo* GetValueClassInfo() ;
protected:
wxObject* m_value;
DECLARE_NO_COPY_CLASS(wxVariantDataWxObjectPtr)
};
IMPLEMENT_DYNAMIC_CLASS(wxVariantDataWxObjectPtr, wxVariantData)
void wxVariantDataWxObjectPtr::Copy(wxVariantData& data)
{
wxASSERT_MSG( wxIsKindOf((&data), wxVariantDataWxObjectPtr) ,\
wxT("wxVariantDataWxObjectPtr::Copy: Can't copy to this type of data") \
);
wxVariantDataWxObjectPtr& otherData = (wxVariantDataWxObjectPtr&) data;
otherData.m_value = m_value;
}
bool wxVariantDataWxObjectPtr::Eq(wxVariantData& data) const
{
wxASSERT_MSG( wxIsKindOf((&data), wxVariantDataWxObjectPtr), wxT("wxVariantDataWxObjectPtr::Eq: argument mismatch") );
wxVariantDataWxObjectPtr& otherData = (wxVariantDataWxObjectPtr&) data;
return (otherData.m_value == m_value);
}
wxString wxVariantDataWxObjectPtr::GetType() const
{
wxString returnVal(wxT("wxObject"));
if (m_value) {
returnVal = m_value->GetClassInfo()->GetClassName();
}
return returnVal;
}
wxClassInfo* wxVariantDataWxObjectPtr::GetValueClassInfo()
{
wxClassInfo* returnVal=NULL;
if (m_value) returnVal = m_value->GetClassInfo();
return returnVal;
}
#if wxUSE_STD_IOSTREAM
bool wxVariantDataWxObjectPtr::Write(wxSTD ostream& str) const
{
wxString s;
Write(s);
str << (const char*) s.mb_str();
return true;
}
#endif
bool wxVariantDataWxObjectPtr::Write(wxString& str) const
{
str.Printf(wxT("%s(%ld)"), GetType().c_str(), (long) m_value);
return true;
}
#if wxUSE_STD_IOSTREAM
bool wxVariantDataWxObjectPtr::Read(wxSTD istream& WXUNUSED(str))
{
// Not implemented
return false;
}
#endif
bool wxVariantDataWxObjectPtr::Read(wxString& WXUNUSED(str))
{
// Not implemented
return false;
}
/*
* wxVariantDataDateTime
*/
#if wxUSE_DATETIME
class wxVariantDataDateTime: public wxVariantData
{
DECLARE_DYNAMIC_CLASS(wxVariantDataDateTime)
public:
wxVariantDataDateTime() { }
wxVariantDataDateTime(const wxDateTime& value) { m_value = value; }
#if wxUSE_ODBC
wxVariantDataDateTime(const TIME_STRUCT* valptr)
{ m_value = wxDateTime(valptr->hour, valptr->minute, valptr->second); }
wxVariantDataDateTime(const DATE_STRUCT* valptr)
{ m_value = wxDateTime(valptr->day, (wxDateTime::Month) (valptr->month - 1),valptr->year); }
wxVariantDataDateTime(const TIMESTAMP_STRUCT* valptr)
{ m_value = wxDateTime(valptr->day, (wxDateTime::Month) (valptr->month - 1), valptr->year,
valptr->hour, valptr->minute, valptr->second, (wxDateTime::wxDateTime_t)valptr->fraction ); }
#endif //ODBC
inline wxDateTime GetValue() const { return m_value; }
inline void SetValue(const wxDateTime& value) { m_value = value; }
virtual void Copy(wxVariantData& data);
virtual bool Eq(wxVariantData& data) const;
#if wxUSE_STD_IOSTREAM
virtual bool Write(wxSTD ostream& str) const;
#endif
virtual bool Write(wxString& str) const;
#if wxUSE_STD_IOSTREAM
virtual bool Read(wxSTD istream& str);
#endif
virtual bool Read(wxString& str);
virtual wxString GetType() const { return wxT("datetime"); };
virtual wxVariantData* Clone() { return new wxVariantDataDateTime; }
protected:
wxDateTime m_value;
};
IMPLEMENT_DYNAMIC_CLASS(wxVariantDataDateTime, wxVariantData)
void wxVariantDataDateTime::Copy(wxVariantData& data)
{
wxASSERT_MSG( (data.GetType() == wxT("datetime")), wxT("wxVariantDataDateTime::Copy: Can't copy to this type of data") );
wxVariantDataDateTime& otherData = (wxVariantDataDateTime&) data;
otherData.m_value = m_value;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?