X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8f2b1cfd3942412889d9f7e2fd2efe27e2d049c1..24af522c4378db219f13146f8bfe22fe790aad0f:/src/common/xti.cpp diff --git a/src/common/xti.cpp b/src/common/xti.cpp index 21aa7a1170..04e166170d 100644 --- a/src/common/xti.cpp +++ b/src/common/xti.cpp @@ -10,28 +10,24 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "xti.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ -#pragma hdrstop + #pragma hdrstop #endif +#if wxUSE_EXTENDED_RTTI + #ifndef WX_PRECOMP -#include "wx/hash.h" -#include "wx/object.h" + #include "wx/object.h" + #include "wx/list.h" + #include "wx/hash.h" #endif -#if wxUSE_EXTENDED_RTTI - #include "wx/xti.h" #include "wx/xml/xml.h" #include "wx/tokenzr.h" -#include "wx/list.h" #include #include "wx/beforestd.h" @@ -88,7 +84,7 @@ const wxChar *wxEnumData::GetEnumMemberName(int value) const if (value == m_members[i].m_value) return m_members[i].m_name; - return wxT("") ; + return wxEmptyString ; } int wxEnumData::GetEnumMemberValueByIndex( int idx ) const @@ -242,17 +238,32 @@ template<> void wxStringWriteValue(wxString &s , const wxString &data ) // built-ins // -wxBuiltInTypeInfo s_typeInfovoid( wxT_VOID , NULL , NULL , typeid(void).name() ) ; -wxBuiltInTypeInfo s_typeInfobool( wxT_BOOL , &wxToStringConverter , &wxFromStringConverter, typeid(bool).name()) ; -wxBuiltInTypeInfo s_typeInfochar( wxT_CHAR , &wxToStringConverter , &wxFromStringConverter, typeid(char).name()) ; -wxBuiltInTypeInfo s_typeInfounsignedchar( wxT_UCHAR , &wxToStringConverter< unsigned char > , &wxFromStringConverter, typeid(unsigned char).name()) ; -wxBuiltInTypeInfo s_typeInfoint( wxT_INT , &wxToStringConverter , &wxFromStringConverter, typeid(int).name()) ; -wxBuiltInTypeInfo s_typeInfounsignedint( wxT_UINT , &wxToStringConverter , &wxFromStringConverter, typeid(unsigned int).name()) ; -wxBuiltInTypeInfo s_typeInfolong( wxT_LONG , &wxToStringConverter , &wxFromStringConverter, typeid(long).name()) ; -wxBuiltInTypeInfo s_typeInfounsignedlong( wxT_ULONG , &wxToStringConverter , &wxFromStringConverter, typeid(unsigned long).name()) ; -wxBuiltInTypeInfo s_typeInfofloat( wxT_FLOAT , &wxToStringConverter , &wxFromStringConverter, typeid(float).name()) ; -wxBuiltInTypeInfo s_typeInfodouble( wxT_DOUBLE , &wxToStringConverter , &wxFromStringConverter, typeid(double).name()) ; -wxBuiltInTypeInfo s_typeInfowxString( wxT_STRING , &wxToStringConverter , &wxFromStringConverter, typeid(wxString).name()) ; +#if wxUSE_FUNC_TEMPLATE_POINTER +#define wxBUILTIN_TYPE_INFO( element , type ) \ + wxBuiltInTypeInfo s_typeInfo##type(element , &wxToStringConverter , &wxFromStringConverter , typeid(type).name()) ; +#else +#define wxBUILTIN_TYPE_INFO( element , type ) \ + void _toString##element( const wxxVariant& data , wxString &result ) { wxToStringConverter(data, result); } \ + void _fromString##element( const wxString& data , wxxVariant &result ) { wxFromStringConverter(data, result); } \ + wxBuiltInTypeInfo s_typeInfo##type(element , &_toString##element , &_fromString##element , typeid(type).name()) ; +#endif + +typedef unsigned char unsigned_char; +typedef unsigned int unsigned_int; +typedef unsigned long unsigned_long; + +wxBuiltInTypeInfo s_typeInfovoid( wxT_VOID , NULL , NULL , typeid(void).name()); +wxBUILTIN_TYPE_INFO( wxT_BOOL , bool); +wxBUILTIN_TYPE_INFO( wxT_CHAR , char); +wxBUILTIN_TYPE_INFO( wxT_UCHAR , unsigned_char); +wxBUILTIN_TYPE_INFO( wxT_INT , int); +wxBUILTIN_TYPE_INFO( wxT_UINT , unsigned_int); +wxBUILTIN_TYPE_INFO( wxT_LONG , long); +wxBUILTIN_TYPE_INFO( wxT_ULONG , unsigned_long); +wxBUILTIN_TYPE_INFO( wxT_FLOAT , float); +wxBUILTIN_TYPE_INFO( wxT_DOUBLE , double); +wxBUILTIN_TYPE_INFO( wxT_STRING , wxString); + // this are compiler induced specialization which are never used anywhere @@ -271,12 +282,12 @@ template<> void wxCollectionToVariantArray( wxArrayString const &theArray, wxxVa wxArrayCollectionToVariantArray( theArray , value ) ; } -wxTypeInfoMap *wxTypeInfo::sm_typeTable = NULL ; +wxTypeInfoMap *wxTypeInfo::ms_typeTable = NULL ; wxTypeInfo *wxTypeInfo::FindType(const wxChar *typeName) { - wxTypeInfoMap::iterator iter = sm_typeTable->find(typeName) ; - wxASSERT_MSG( iter != sm_typeTable->end() , wxT("lookup for a non-existent type-info") ) ; + wxTypeInfoMap::iterator iter = ms_typeTable->find(typeName) ; + wxASSERT_MSG( iter != ms_typeTable->end() , wxT("lookup for a non-existent type-info") ) ; return (wxTypeInfo *)iter->second; } @@ -299,18 +310,18 @@ wxTypeInfo ( wxT_DELEGATE , to , from , wxEmptyString ) { m_eventClass = eventClass ; m_eventType = eventType ; m_lastEventType = lastEventType; } void wxTypeInfo::Register() -{ - if ( sm_typeTable == NULL ) - sm_typeTable = new wxTypeInfoMap() ; +{ + if ( ms_typeTable == NULL ) + ms_typeTable = new wxTypeInfoMap() ; - if( !m_name.IsEmpty() ) - (*sm_typeTable)[m_name] = this ; + if( !m_name.empty() ) + (*ms_typeTable)[m_name] = this ; } void wxTypeInfo::Unregister() { - if( !m_name.IsEmpty() ) - sm_typeTable->erase(m_name); + if( !m_name.empty() ) + ms_typeTable->erase(m_name); } // removing header dependancy on string tokenizer @@ -459,7 +470,7 @@ wxObjectStreamingCallback wxClassInfo::GetStreamingCallback() const return retval ; } -bool wxClassInfo::BeforeWriteObject( const wxObject *obj, wxWriter *streamer , wxPersister *persister , wxxVariantArray &metadata) const +bool wxClassInfo::BeforeWriteObject( const wxObject *obj, wxWriter *streamer , wxPersister *persister , wxxVariantArray &metadata) const { wxObjectStreamingCallback sb = GetStreamingCallback() ; if ( sb ) @@ -508,13 +519,16 @@ void wxClassInfo::AddToPropertyCollection(wxObject *object, const wxChar *proper accessor->AddToPropertyCollection( object , value ) ; } -void wxClassInfo::GetProperties( wxPropertyInfoMap &map ) const +// void wxClassInfo::GetProperties( wxPropertyInfoMap &map ) const +// The map parameter (the name map that is) seems something special +// to MSVC and so we use a other name. +void wxClassInfo::GetProperties( wxPropertyInfoMap &infomap ) const { const wxPropertyInfo *pi = GetFirstProperty() ; - while( pi ) + while( pi ) { - if ( map.find( pi->GetName() ) == map.end() ) - map[pi->GetName()] = (wxPropertyInfo*) pi ; + if ( infomap.find( pi->GetName() ) == infomap.end() ) + infomap[pi->GetName()] = (wxPropertyInfo*) pi ; pi = pi->GetNext() ; } @@ -522,7 +536,7 @@ void wxClassInfo::GetProperties( wxPropertyInfoMap &map ) const const wxClassInfo** parents = GetParents() ; for ( int i = 0 ; parents[i] ; ++ i ) { - parents[i]->GetProperties( map ) ; + parents[i]->GetProperties( infomap ) ; } } @@ -592,13 +606,13 @@ wxxVariant wxDynamicObject::GetProperty (const wxChar *propertyName) const return m_data->m_properties[propertyName] ; } -void wxDynamicObject::RemoveProperty( const wxChar *propertyName ) +void wxDynamicObject::RemoveProperty( const wxChar *propertyName ) { wxASSERT_MSG(m_classInfo->FindPropertyInfoInThisClass(propertyName),wxT("Removing Unknown Property in a Dynamic Object") ) ; m_data->m_properties.erase( propertyName ) ; } -void wxDynamicObject::RenameProperty( const wxChar *oldPropertyName , const wxChar *newPropertyName ) +void wxDynamicObject::RenameProperty( const wxChar *oldPropertyName , const wxChar *newPropertyName ) { wxASSERT_MSG(m_classInfo->FindPropertyInfoInThisClass(oldPropertyName),wxT("Renaming Unknown Property in a Dynamic Object") ) ; wxxVariant value = m_data->m_properties[oldPropertyName] ; @@ -683,7 +697,7 @@ void wxDynamicClassInfo::AddHandler( const wxChar *handlerName , wxObjectEventFu } // removes an existing runtime-property -void wxDynamicClassInfo::RemoveProperty( const wxChar *propertyName ) +void wxDynamicClassInfo::RemoveProperty( const wxChar *propertyName ) { for ( wxDynamicObjectList::iterator iter = m_data->m_dynamicObjects.begin() ; iter != m_data->m_dynamicObjects.end() ; ++iter ) (*iter)->RemoveProperty( propertyName ) ; @@ -691,13 +705,13 @@ void wxDynamicClassInfo::RemoveProperty( const wxChar *propertyName ) } // removes an existing runtime-handler -void wxDynamicClassInfo::RemoveHandler( const wxChar *handlerName ) +void wxDynamicClassInfo::RemoveHandler( const wxChar *handlerName ) { delete FindHandlerInfoInThisClass(handlerName) ; } // renames an existing runtime-property -void wxDynamicClassInfo::RenameProperty( const wxChar *oldPropertyName , const wxChar *newPropertyName ) +void wxDynamicClassInfo::RenameProperty( const wxChar *oldPropertyName , const wxChar *newPropertyName ) { wxPropertyInfo* pi = FindPropertyInfoInThisClass(oldPropertyName) ; wxASSERT_MSG( pi ,wxT("not existing property") ) ; @@ -708,7 +722,7 @@ void wxDynamicClassInfo::RenameProperty( const wxChar *oldPropertyName , const w } // renames an existing runtime-handler -void wxDynamicClassInfo::RenameHandler( const wxChar *oldHandlerName , const wxChar *newHandlerName ) +void wxDynamicClassInfo::RenameHandler( const wxChar *oldHandlerName , const wxChar *newHandlerName ) { wxASSERT_MSG(FindHandlerInfoInThisClass(oldHandlerName),wxT("not existing handler") ) ; FindHandlerInfoInThisClass(oldHandlerName)->m_name = newHandlerName ; @@ -749,4 +763,5 @@ void wxGenericPropertyAccessor::GetProperty(const wxObject *object, wxxVariant& wxASSERT_MSG( dynobj , wxT("cannot call wxDynamicClassInfo::SetProperty on an object other than wxDynamicObject") ) ; value = dynobj->GetProperty( m_propertyName ) ; } -#endif + +#endif // wxUSE_EXTENDED_RTTI