X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5d5b1c0ce0880124827d1eced2cbfdd93351d19c..a509f6bcdde06fe2845fe379086bc30462c32ffc:/include/wx/dynarray.h diff --git a/include/wx/dynarray.h b/include/wx/dynarray.h index 321c49a94d..9a00c3a7bd 100644 --- a/include/wx/dynarray.h +++ b/include/wx/dynarray.h @@ -69,10 +69,6 @@ public: /// assignment operator wxBaseArray& operator=(const wxBaseArray& src); /// not virtual, see above - /// EXCEPT for Gnu compiler to reduce warnings... -#ifdef __GNUG__ - virtual -#endif ~wxBaseArray(); //@} @@ -122,6 +118,8 @@ protected: int Index(long lItem, bool bFromEnd = FALSE) const; /// search for an item using binary search in a sorted array int Index(long lItem, CMPFUNC fnCompare) const; + /// search for a place to insert the element into a sorted array + size_t IndexForInsert(long lItem, CMPFUNC fnCompare) const; /// add new element at the end void Add(long lItem); /// add item assuming the array is sorted with fnCompare function @@ -199,7 +197,6 @@ public: \ void Insert(T Item, size_t uiIndex) \ { wxBaseArray::Insert((long)Item, uiIndex) ; } \ \ - void Remove(size_t uiIndex) { RemoveAt(uiIndex); } \ void RemoveAt(size_t uiIndex) { wxBaseArray::RemoveAt(uiIndex); } \ void Remove(T Item) \ { int iIndex = Index(Item); \ @@ -221,6 +218,10 @@ public: \ // 3) it has no Sort() method because it's always sorted // 4) Index() method is much faster (the sorted arrays use binary search // instead of linear one), but Add() is slower. +// 5) there is no Insert() method because you can't insert an item into the +// given position in a sorted array but there is IndexForInsert()/AddAt() +// pair which may be used to optimize a common operation of "insert only if +// not found" // // Summary: use this class when the speed of Index() function is important, use // the normal arrays otherwise. @@ -259,10 +260,16 @@ public: \ int Index(T Item) const \ { return wxBaseArray::Index((long)Item, (CMPFUNC)m_fnCompare); }\ \ + size_t IndexForInsert(T Item) const \ + { return wxBaseArray::IndexForInsert((long)Item, \ + (CMPFUNC)m_fnCompare); } \ + \ + void AddAt(T item, size_t index) \ + { wxBaseArray::Insert((long)item, index); } \ + \ void Add(T Item) \ { wxBaseArray::Add((long)Item, (CMPFUNC)m_fnCompare); } \ \ - void Remove(size_t uiIndex) { RemoveAt(uiIndex); } \ void RemoveAt(size_t uiIndex) { wxBaseArray::RemoveAt(uiIndex); } \ void Remove(T Item) \ { int iIndex = Index(Item); \ @@ -311,7 +318,6 @@ public: \ T* Detach(size_t uiIndex) \ { T* p = (T*)wxBaseArray::Item(uiIndex); \ wxBaseArray::RemoveAt(uiIndex); return p; } \ - void Remove(size_t uiIndex) { RemoveAt(uiIndex); } \ void RemoveAt(size_t uiIndex); \ \ void Sort(CMPFUNC##T fCmp) { wxBaseArray::Sort((CMPFUNC)fCmp); } \ @@ -428,10 +434,27 @@ private: \ typedef T _A##name; \ _WX_DEFINE_SORTED_ARRAY(_A##name, name, class WXDLLEXPORT) +#define WX_DEFINE_EXPORTED_OBJARRAY(name) WX_DEFINE_OBJARRAY(name) #define WX_DECLARE_EXPORTED_OBJARRAY(T, name) \ typedef T _L##name; \ _WX_DECLARE_OBJARRAY(_L##name, name, class WXDLLEXPORT) +// ..and likewise these macros do very same thing as the ones above them too, +// but allow the user to specify the export spec. Needed if you have a dll +// that wants to export a wxArray daubed with your own import/export goo. +#define WX_DEFINE_USER_EXPORTED_ARRAY(T, name, usergoo) \ + typedef T _A##name; \ + _WX_DEFINE_ARRAY(_A##name, name, class usergoo) + +#define WX_DEFINE_SORTED_USER_EXPORTED_ARRAY(T, name, usergoo) \ + typedef T _A##name; \ + _WX_DEFINE_SORTED_ARRAY(_A##name, name, class usergoo) + +#define WX_DEFINE_USER_EXPORTED_OBJARRAY(name) WX_DEFINE_OBJARRAY(name) +#define WX_DECLARE_USER_EXPORTED_OBJARRAY(T, name, usergoo) \ + typedef T _L##name; \ + _WX_DECLARE_OBJARRAY(_L##name, name, class usergoo) + // ---------------------------------------------------------------------------- /** @name Some commonly used predefined arrays */ // ---------------------------------------------------------------------------- @@ -448,7 +471,7 @@ WX_DEFINE_EXPORTED_ARRAY(void *, wxArrayPtrVoid); //@} // ----------------------------------------------------------------------------- -// convinience macros +// convenience macros // ----------------------------------------------------------------------------- // append all element of one array to another one