]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/any.h
Return valid pointers from wxDateTime::ParseXXX() with non-wxString strings.
[wxWidgets.git] / include / wx / any.h
index 614cb09db75eeccb832363d05923e31b37426eca..6e3877253283904337e912ebe4835c86f94808f0 100644 (file)
@@ -113,6 +113,10 @@ public:
     // FIXME-VC6: remove this hack when VC6 is no longer supported
     template <typename T>
     bool CheckType(T* reserved = NULL) const;
+
+#if wxUSE_EXTENDED_RTTI
+    virtual const wxTypeInfo* GetTypeInfo() const = 0;
+#endif
 private:
 };
 
@@ -314,6 +318,12 @@ public:
     {
         return Ops::GetValue(buf);
     }
+#if wxUSE_EXTENDED_RTTI
+    virtual const wxTypeInfo* GetTypeInfo() const 
+    {
+        return wxGetTypeInfo((T*)NULL);
+    }
+#endif
 };
 
 
@@ -348,7 +358,7 @@ wxAnyValueTypeScopedPtr wxAnyValueTypeImpl<T>::sm_instance = new wxAnyValueTypeI
 // Helper macro for using same base value type implementation for multiple
 // actual C++ data types.
 //
-#define WX_ANY_DEFINE_SUB_TYPE(T, CLSTYPE) \
+#define _WX_ANY_DEFINE_SUB_TYPE(T, CLSTYPE) \
 template<> \
 class wxAnyValueTypeImpl<T> : public wxAnyValueTypeImpl##CLSTYPE \
 { \
@@ -369,9 +379,21 @@ public: \
         const UseDataType* sptr = \
             reinterpret_cast<const UseDataType*>(voidPtr); \
         return static_cast<T>(*sptr); \
+    } 
+
+#if wxUSE_EXTENDED_RTTI
+#define WX_ANY_DEFINE_SUB_TYPE(T, CLSTYPE) \
+_WX_ANY_DEFINE_SUB_TYPE(T, CLSTYPE)\
+    virtual const wxTypeInfo* GetTypeInfo() const  \
+    { \
+        return wxGetTypeInfo((T*)NULL); \
     } \
 };
-
+#else
+#define WX_ANY_DEFINE_SUB_TYPE(T, CLSTYPE) \
+_WX_ANY_DEFINE_SUB_TYPE(T, CLSTYPE)\
+};
+#endif
 
 //
 //  Integer value types
@@ -967,6 +989,12 @@ public:
         return value;
     }
 
+#if wxUSE_EXTENDED_RTTI
+    const wxTypeInfo* GetTypeInfo() const
+    {
+        return m_type->GetTypeInfo();
+    }
+#endif
     /**
         Template function that retrieves and converts the value of this
         variant to the type that T* value is.
@@ -1007,15 +1035,12 @@ private:
     // Assignment functions
     void AssignAny(const wxAny& any)
     {
-        if ( m_type != wxAnyNullValueType )
-        {
-            // Must delete value - CopyBuffer() never does that
-            m_type->DeleteValue(m_buffer);
-        }
+        // Must delete value - CopyBuffer() never does that
+        m_type->DeleteValue(m_buffer);
 
         wxAnyValueType* newType = any.m_type;
 
-        if ( m_type == wxAnyNullValueType || !newType->IsSameType(m_type) )
+        if ( !newType->IsSameType(m_type) )
             m_type = newType;
 
         newType->CopyBuffer(any.m_buffer, m_buffer);