X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fd68cfdbfb73b76322c83bddbc39d5360a2b590d..0c05fdf3570e8066b8a9a16627562e544306a678:/include/wx/dynarray.h diff --git a/include/wx/dynarray.h b/include/wx/dynarray.h index 852ade1717..a59e853236 100644 --- a/include/wx/dynarray.h +++ b/include/wx/dynarray.h @@ -12,7 +12,7 @@ #ifndef _DYNARRAY_H #define _DYNARRAY_H -#if defined(__GNUG__) && !defined(__APPLE__) && \ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) && \ !(defined(__MINGW32__) && __GNUC__ == 3 && __GNUC_MINOR__ == 2) #pragma interface "dynarray.h" #endif @@ -212,8 +212,6 @@ protected: \ void assign(const_iterator first, const_iterator last); \ void assign(size_type n, const_reference v); \ size_type capacity() const { return m_nSize; } \ - void clear() { Clear(); } \ - bool empty() const { return IsEmpty(); } \ iterator erase(iterator first, iterator last) \ { \ size_type idx = first - begin(); \ @@ -230,17 +228,24 @@ protected: \ return begin() + idx; \ } \ void insert(iterator it, const_iterator first, const_iterator last);\ - size_type max_size() const { return INT_MAX; } \ void pop_back() { RemoveAt(size() - 1); } \ void push_back(const value_type& v) { Add(v); } \ void reserve(size_type n) { if(n > m_nSize) Realloc(n); } \ void resize(size_type n, value_type v = value_type()); \ - size_type size() const { return GetCount(); } \ \ iterator begin() { return m_pItems; } \ iterator end() { return m_pItems + m_nCount; } \ const_iterator begin() const { return m_pItems; } \ const_iterator end() const { return m_pItems + m_nCount; } \ + \ + /* the following functions may be made directly public because */ \ + /* they don't use the type of the elements at all */ \ +public: \ + void clear() { Clear(); } \ + bool empty() const { return IsEmpty(); } \ + size_type max_size() const { return INT_MAX; } \ + size_type size() const { return GetCount(); } \ + \ private: \ void Grow(size_t nIncrement = 0); \ bool Realloc(size_t nSize); \ @@ -307,13 +312,13 @@ public: \ void Sort(CMPFUNC##T fCmp) { base::Sort((CMPFUNC)fCmp); } \ } -#define _WX_DEFINE_TYPEARRAY_NO_PTR(T, name, base, classexp) \ +#define _WX_DEFINE_TYPEARRAY_PTR(T, name, base, classexp) \ _WX_DEFINE_TYPEARRAY(T, name, base, classexp) #else // if !wxUSE_STL // common declaration used by both _WX_DEFINE_TYPEARRAY and -// _WX_DEFINE_TYPEARRAY_NO_PTR +// _WX_DEFINE_TYPEARRAY_PTR #define _WX_DEFINE_TYPEARRAY_HELPER(T, name, base, classexp, ptrop) \ wxCOMPILE_TIME_ASSERT2(sizeof(T) <= sizeof(base::base_type), \ TypeTooBigToBeStoredIn##base, \ @@ -437,6 +442,9 @@ public: \ bool operator !=(const itor& it) { return m_ptr != it.m_ptr; } \ }; \ \ + name(size_type n, const_reference v) { assign(n, v); } \ + name(const_iterator first, const_iterator last) \ + { assign(first, last); } \ void assign(const_iterator first, const_iterator last) \ { base::assign((bconst_iterator)first, (bconst_iterator)last); } \ void assign(size_type n, const_reference v) \ @@ -446,8 +454,6 @@ public: \ iterator begin() { return (iterator)base::begin(); } \ const_iterator begin() const { return (const_iterator)base::begin(); }\ size_type capacity() const { return base::capacity(); } \ - void clear() { base::clear(); } \ - bool empty() const { return base::empty(); } \ iterator end() { return (iterator)base::end(); } \ const_iterator end() const { return (const_iterator)base::end(); } \ iterator erase(iterator first, iterator last) \ @@ -463,7 +469,6 @@ public: \ void insert(iterator it, const_iterator first, const_iterator last) \ { base::insert((biterator)it, (bconst_iterator)first, \ (bconst_iterator)last); } \ - size_type max_size() const { return base::max_size(); } \ void pop_back() { base::pop_back(); } \ void push_back(const_reference v) \ { base::push_back((bconst_reference)v); } \ @@ -473,7 +478,6 @@ public: \ const_reverse_iterator rend() const; \ void reserve(size_type n) { base::reserve(n); }; \ void resize(size_type n, value_type v = value_type()); \ - size_type size() const { return base::size(); } \ } #define _WX_PTROP pointer operator->() const { return m_ptr; } @@ -481,7 +485,7 @@ public: \ #define _WX_DEFINE_TYPEARRAY(T, name, base, classexp) \ _WX_DEFINE_TYPEARRAY_HELPER(T, name, base, classexp, _WX_PTROP) -#define _WX_DEFINE_TYPEARRAY_NO_PTR(T, name, base, classexp) \ +#define _WX_DEFINE_TYPEARRAY_PTR(T, name, base, classexp) \ _WX_DEFINE_TYPEARRAY_HELPER(T, name, base, classexp, _WX_PTROP_NONE) #endif // !wxUSE_STL @@ -643,28 +647,28 @@ private: \ #define WX_DEFINE_TYPEARRAY(T, name, base) \ WX_DEFINE_TYPEARRAY_WITH_DECL(T, name, base, class wxARRAY_DEFAULT_EXPORT) -#define WX_DEFINE_TYPEARRAY_NO_PTR(T, name, base) \ - WX_DEFINE_TYPEARRAY_WITH_DECL_NO_PTR(T, name, base, class wxARRAY_DEFAULT_EXPORT) +#define WX_DEFINE_TYPEARRAY_PTR(T, name, base) \ + WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, base, class wxARRAY_DEFAULT_EXPORT) #define WX_DEFINE_EXPORTED_TYPEARRAY(T, name, base) \ WX_DEFINE_TYPEARRAY_WITH_DECL(T, name, base, class WXDLLEXPORT) -#define WX_DEFINE_EXPORTED_TYPEARRAY_NO_PTR(T, name, base) \ - WX_DEFINE_TYPEARRAY_WITH_DECL_NO_PTR(T, name, base, class WXDLLEXPORT) +#define WX_DEFINE_EXPORTED_TYPEARRAY_PTR(T, name, base) \ + WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, base, class WXDLLEXPORT) #define WX_DEFINE_USER_EXPORTED_TYPEARRAY(T, name, base, expdecl) \ WX_DEFINE_TYPEARRAY_WITH_DECL(T, name, base, class expdecl) -#define WX_DEFINE_USER_EXPORTED_TYPEARRAY_NO_PTR(T, name, base, expdecl) \ - WX_DEFINE_TYPEARRAY_WITH_DECL_NO_PTR(T, name, base, class expdecl) +#define WX_DEFINE_USER_EXPORTED_TYPEARRAY_PTR(T, name, base, expdecl) \ + WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, base, class expdecl) #define WX_DEFINE_TYPEARRAY_WITH_DECL(T, name, base, classdecl) \ typedef T _wxArray##name; \ _WX_DEFINE_TYPEARRAY(_wxArray##name, name, base, classdecl) -#define WX_DEFINE_TYPEARRAY_WITH_DECL_NO_PTR(T, name, base, classdecl) \ +#define WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, base, classdecl) \ typedef T _wxArray##name; \ - _WX_DEFINE_TYPEARRAY_NO_PTR(_wxArray##name, name, base, classdecl) + _WX_DEFINE_TYPEARRAY_PTR(_wxArray##name, name, base, classdecl) // ---------------------------------------------------------------------------- // WX_DEFINE_SORTED_TYPEARRAY: this is the same as the previous macro, but it @@ -806,6 +810,7 @@ WX_DECLARE_USER_EXPORTED_BASEARRAY(const void *, wxBaseArrayPtrVoid, WX_DECLARE_USER_EXPORTED_BASEARRAY(short, wxBaseArrayShort, WXDLLIMPEXP_BASE); WX_DECLARE_USER_EXPORTED_BASEARRAY(int, wxBaseArrayInt, WXDLLIMPEXP_BASE); WX_DECLARE_USER_EXPORTED_BASEARRAY(long, wxBaseArrayLong, WXDLLIMPEXP_BASE); +WX_DECLARE_USER_EXPORTED_BASEARRAY(size_t, wxBaseArraySizeT, WXDLLIMPEXP_BASE); WX_DECLARE_USER_EXPORTED_BASEARRAY(double, wxBaseArrayDouble, WXDLLIMPEXP_BASE); // ---------------------------------------------------------------------------- @@ -814,44 +819,53 @@ WX_DECLARE_USER_EXPORTED_BASEARRAY(double, wxBaseArrayDouble, WXDLLIMPEXP_BASE); #define WX_DEFINE_ARRAY(T, name) \ WX_DEFINE_TYPEARRAY(T, name, wxBaseArrayPtrVoid) -#define WX_DEFINE_ARRAY_NO_PTR(T, name) \ - WX_DEFINE_TYPEARRAY_NO_PTR(T, name, wxBaseArrayPtrVoid) +#define WX_DEFINE_ARRAY_PTR(T, name) \ + WX_DEFINE_TYPEARRAY_PTR(T, name, wxBaseArrayPtrVoid) #define WX_DEFINE_EXPORTED_ARRAY(T, name) \ WX_DEFINE_EXPORTED_TYPEARRAY(T, name, wxBaseArrayPtrVoid) -#define WX_DEFINE_EXPORTED_ARRAY_NO_PTR(T, name) \ - WX_DEFINE_EXPORTED_TYPEARRAY_NO_PTR(T, name, wxBaseArrayPtrVoid) +#define WX_DEFINE_EXPORTED_ARRAY_PTR(T, name) \ + WX_DEFINE_EXPORTED_TYPEARRAY_PTR(T, name, wxBaseArrayPtrVoid) +#define WX_DEFINE_ARRAY_WITH_DECL_PTR(T, name, decl) \ + WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArrayPtrVoid, decl) #define WX_DEFINE_USER_EXPORTED_ARRAY(T, name, expmode) \ WX_DEFINE_TYPEARRAY_WITH_DECL(T, name, wxBaseArrayPtrVoid, expmode) -#define WX_DEFINE_USER_EXPORTED_ARRAY_NO_PTR(T, name, expmode) \ - WX_DEFINE_TYPEARRAY_WITH_DECL_NO_PTR(T, name, wxBaseArrayPtrVoid, expmode) +#define WX_DEFINE_USER_EXPORTED_ARRAY_PTR(T, name, expmode) \ + WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArrayPtrVoid, expmode) #define WX_DEFINE_ARRAY_SHORT(T, name) \ - WX_DEFINE_TYPEARRAY_NO_PTR(T, name, wxBaseArrayShort) + WX_DEFINE_TYPEARRAY_PTR(T, name, wxBaseArrayShort) #define WX_DEFINE_EXPORTED_ARRAY_SHORT(T, name) \ - WX_DEFINE_EXPORTED_TYPEARRAY_NO_PTR(T, name, wxBaseArrayShort) + WX_DEFINE_EXPORTED_TYPEARRAY_PTR(T, name, wxBaseArrayShort) #define WX_DEFINE_USER_EXPORTED_ARRAY_SHORT(T, name, expmode) \ - WX_DEFINE_TYPEARRAY_WITH_DECL_NO_PTR(T, name, wxBaseArrayShort, expmode) + WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArrayShort, expmode) #define WX_DEFINE_ARRAY_INT(T, name) \ - WX_DEFINE_TYPEARRAY_NO_PTR(T, name, wxBaseArrayInt) + WX_DEFINE_TYPEARRAY_PTR(T, name, wxBaseArrayInt) #define WX_DEFINE_EXPORTED_ARRAY_INT(T, name) \ - WX_DEFINE_EXPORTED_TYPEARRAY_NO_PTR(T, name, wxBaseArrayInt) + WX_DEFINE_EXPORTED_TYPEARRAY_PTR(T, name, wxBaseArrayInt) #define WX_DEFINE_USER_EXPORTED_ARRAY_INT(T, name, expmode) \ - WX_DEFINE_TYPEARRAY_WITH_DECL_NO_PTR(T, name, wxBaseArrayInt, expmode) + WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArrayInt, expmode) #define WX_DEFINE_ARRAY_LONG(T, name) \ - WX_DEFINE_TYPEARRAY_NO_PTR(T, name, wxBaseArrayLong) + WX_DEFINE_TYPEARRAY_PTR(T, name, wxBaseArrayLong) #define WX_DEFINE_EXPORTED_ARRAY_LONG(T, name) \ - WX_DEFINE_EXPORTED_TYPEARRAY_NO_PTR(T, name, wxBaseArrayLong) + WX_DEFINE_EXPORTED_TYPEARRAY_PTR(T, name, wxBaseArrayLong) #define WX_DEFINE_USER_EXPORTED_ARRAY_LONG(T, name, expmode) \ - WX_DEFINE_TYPEARRAY_WITH_DECL_NO_PTR(T, name, wxBaseArrayLong, expmode) + WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArrayLong, expmode) + +#define WX_DEFINE_ARRAY_SIZE_T(T, name) \ + WX_DEFINE_TYPEARRAY_PTR(T, name, wxBaseArraySizeT) +#define WX_DEFINE_EXPORTED_ARRAY_SIZE_T(T, name) \ + WX_DEFINE_EXPORTED_TYPEARRAY_PTR(T, name, wxBaseArraySizeT) +#define WX_DEFINE_USER_EXPORTED_ARRAY_SIZE_T(T, name, expmode) \ + WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArraySizeT, expmode) #define WX_DEFINE_ARRAY_DOUBLE(T, name) \ - WX_DEFINE_TYPEARRAY_NO_PTR(T, name, wxBaseArrayDouble) + WX_DEFINE_TYPEARRAY_PTR(T, name, wxBaseArrayDouble) #define WX_DEFINE_EXPORTED_ARRAY_DOUBLE(T, name) \ - WX_DEFINE_EXPORTED_TYPEARRAY_NO_PTR(T, name, wxBaseArrayDouble) + WX_DEFINE_EXPORTED_TYPEARRAY_PTR(T, name, wxBaseArrayDouble) #define WX_DEFINE_USER_EXPORTED_ARRAY_DOUBLE(T, name, expmode) \ - WX_DEFINE_TYPEARRAY_WITH_DECL_NO_PTR(T, name, wxBaseArrayDouble, expmode) + WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArrayDouble, expmode) // ---------------------------------------------------------------------------- // Convenience macros to define sorted arrays from base arrays @@ -885,6 +899,13 @@ WX_DECLARE_USER_EXPORTED_BASEARRAY(double, wxBaseArrayDouble, WXDLLIMPEXP_BASE); #define WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_LONG(T, name, expmode) \ WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY(T, name, wxBaseArrayLong, expmode) +#define WX_DEFINE_SORTED_ARRAY_SIZE_T(T, name) \ + WX_DEFINE_SORTED_TYPEARRAY(T, name, wxBaseArraySizeT) +#define WX_DEFINE_SORTED_EXPORTED_ARRAY_SIZE_T(T, name) \ + WX_DEFINE_SORTED_EXPORTED_TYPEARRAY(T, name, wxBaseArraySizeT) +#define WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_SIZE_T(T, name, expmode) \ + WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY(T, name, wxBaseArraySizeT, expmode) + // ---------------------------------------------------------------------------- // Convenience macros to define sorted arrays from base arrays // ---------------------------------------------------------------------------- @@ -925,6 +946,15 @@ WX_DECLARE_USER_EXPORTED_BASEARRAY(double, wxBaseArrayDouble, WXDLLIMPEXP_BASE); WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY_CMP(T, cmpfunc, name, \ wxBaseArrayLong, expmode) +#define WX_DEFINE_SORTED_ARRAY_CMP_SIZE_T(T, cmpfunc, name) \ + WX_DEFINE_SORTED_TYPEARRAY_CMP(T, cmpfunc, name, wxBaseArraySizeT) +#define WX_DEFINE_SORTED_EXPORTED_ARRAY_CMP_SIZE_T(T, cmpfunc, name) \ + WX_DEFINE_SORTED_EXPORTED_TYPEARRAY_CMP(T, cmpfunc, name, wxBaseArraySizeT) +#define WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_CMP_SIZE_T(T, cmpfunc, \ + name, expmode) \ + WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY_CMP(T, cmpfunc, name, \ + wxBaseArraySizeT, expmode) + // ---------------------------------------------------------------------------- // Some commonly used predefined arrays // ---------------------------------------------------------------------------- @@ -932,7 +962,7 @@ WX_DECLARE_USER_EXPORTED_BASEARRAY(double, wxBaseArrayDouble, WXDLLIMPEXP_BASE); WX_DEFINE_USER_EXPORTED_ARRAY_SHORT(short, wxArrayShort, class WXDLLIMPEXP_BASE); WX_DEFINE_USER_EXPORTED_ARRAY_INT(int, wxArrayInt, class WXDLLIMPEXP_BASE); WX_DEFINE_USER_EXPORTED_ARRAY_LONG(long, wxArrayLong, class WXDLLIMPEXP_BASE); -WX_DEFINE_USER_EXPORTED_ARRAY_NO_PTR(void *, wxArrayPtrVoid, class WXDLLIMPEXP_BASE); +WX_DEFINE_USER_EXPORTED_ARRAY_PTR(void *, wxArrayPtrVoid, class WXDLLIMPEXP_BASE); // ----------------------------------------------------------------------------- // convenience macros