X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c1dc9f8394c1488ad8e7d945e6f943f7b34554ce..353a4edc6ebdb88d0040de2f13aabfa8accf014b:/include/wx/object.h diff --git a/include/wx/object.h b/include/wx/object.h index 8e01743039..0651b16acb 100644 --- a/include/wx/object.h +++ b/include/wx/object.h @@ -25,6 +25,37 @@ class WXDLLIMPEXP_BASE wxObject; #define wxUSE_EXTENDED_RTTI 0 #endif +#define DECLARE_CLASS_INFO_ITERATORS() \ + class WXDLLIMPEXP_BASE const_iterator \ + { \ + typedef wxHashTable_Node Node; \ + public: \ + typedef const wxClassInfo* value_type; \ + typedef const value_type& const_reference; \ + typedef const_iterator itor; \ + typedef value_type* ptr_type; \ + \ + Node* m_node; \ + wxHashTable* m_table; \ + public: \ + typedef const_reference reference_type; \ + typedef ptr_type pointer_type; \ + \ + const_iterator(Node* node, wxHashTable* table) \ + : m_node(node), m_table(table) { } \ + const_iterator() : m_node(NULL), m_table(NULL) { } \ + value_type operator*() const; \ + itor& operator++(); \ + const itor operator++(int); \ + bool operator!=(const itor& it) const \ + { return it.m_node != m_node; } \ + bool operator==(const itor& it) const \ + { return it.m_node == m_node; } \ + }; \ + \ + static const_iterator begin_classinfo(); \ + static const_iterator end_classinfo(); + #if wxUSE_EXTENDED_RTTI #include "wx/xti.h" #else @@ -35,7 +66,10 @@ class WXDLLIMPEXP_BASE wxObject; class WXDLLIMPEXP_BASE wxClassInfo; class WXDLLIMPEXP_BASE wxHashTable; +class WXDLLIMPEXP_BASE wxObject; +class WXDLLIMPEXP_BASE wxPluginLibrary; class WXDLLIMPEXP_BASE wxObjectRefData; +class WXDLLIMPEXP_BASE wxHashTable_Node; // ---------------------------------------------------------------------------- // wxClassInfo @@ -45,6 +79,8 @@ typedef wxObject *(*wxObjectConstructorFn)(void); class WXDLLIMPEXP_BASE wxClassInfo { + friend class WXDLLIMPEXP_BASE wxObject; + friend WXDLLIMPEXP_BASE wxObject *wxCreateDynamicObject(const wxChar *name); public: wxClassInfo( const wxChar *className, const wxClassInfo *baseInfo1, @@ -94,12 +130,13 @@ public: ( m_baseInfo2 && m_baseInfo2->IsKindOf(info) ) ); } -public: + DECLARE_CLASS_INFO_ITERATORS() +private: const wxChar *m_className; int m_objectSize; wxObjectConstructorFn m_objectConstructor; - // Pointers to base wxClassInfos: set in InitializeClasses + // Pointers to base wxClassInfos const wxClassInfo *m_baseInfo1; const wxClassInfo *m_baseInfo2; @@ -110,20 +147,14 @@ public: static wxClassInfo *sm_first; wxClassInfo *m_next; - // FIXME: this should be private (currently used directly by way too - // many clients) static wxHashTable *sm_classTable; -private: - // InitializeClasses() helper - static wxClassInfo *GetBaseByName(const wxChar *name); - - DECLARE_NO_COPY_CLASS(wxClassInfo) - protected: // registers the class void Register(); void Unregister(); + + DECLARE_NO_COPY_CLASS(wxClassInfo) }; WXDLLIMPEXP_BASE wxObject *wxCreateDynamicObject(const wxChar *name);