]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/dynarray.h
Make storing non-trivial data in wxThreadSpecificInfo possible.
[wxWidgets.git] / interface / wx / dynarray.h
index 4046bc52301059dd7d1023b8ade23963a981e155..9fba5c14f9cc7819fcf4fa38d9364564ab9b23d7 100644 (file)
@@ -2,8 +2,7 @@
 // Name:        dynarray.h
 // Purpose:     interface of wxArray<T>
 // Author:      wxWidgets team
-// RCS-ID:      $Id$
-// Licence:     wxWindows license
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 /**
@@ -32,7 +31,7 @@
     functions are inline, so they do not take @e any space at all.
 
     wxWidgets has three different kinds of array. All of them derive from
-    wxBaseArray class which works with untyped data and can not be used
+    wxBaseArray class which works with untyped data and cannot be used
     directly. The standard macros WX_DEFINE_ARRAY(), WX_DEFINE_SORTED_ARRAY()
     and WX_DEFINE_OBJARRAY() are used to define a new class deriving from it.
     The classes declared will be called in this documentation wxArray,
     however dumb, C++ compiler in the world.
 
     Remember to include @<wx/arrimpl.cpp@> just before each
-    WX_DEFINE_OBJARRAY() ocurrence in your code, even if you have several in
+    WX_DEFINE_OBJARRAY() occurrence in your code, even if you have several in
     the same file.
 
     Things are much simpler for wxArray and wxSortedArray however: it is enough
     @section array_predef Predefined array types
 
     wxWidgets defines the following dynamic array types:
-    - wxArrayShort
-    - wxArrayInt
-    - wxArrayDouble
-    - wxArrayLong
-    - wxArrayPtrVoid
+    - ::wxArrayShort
+    - ::wxArrayInt
+    - ::wxArrayDouble
+    - ::wxArrayLong
+    - ::wxArrayPtrVoid
 
     To use them you don't need any macro; you just need to include @c dynarray.h.
 
 
     @see @ref overview_container, wxList<T>, wxVector<T>
 */
+template <typename T>
 class wxArray<T>
 {
 public:
@@ -253,36 +253,36 @@ public:
     wxSortedArray(int (*)(T first, T second)compareFunction);
 
     /**
-        Performs a shallow array copy (i.e. doesn't copy the objects pointed to
+        Performs a shallow array copy (i.e.\ doesn't copy the objects pointed to
         even if the source array contains the items of pointer type).
     */
     wxArray(const wxArray& array);
 
     /**
-        Performs a shallow array copy (i.e. doesn't copy the objects pointed to
+        Performs a shallow array copy (i.e.\ doesn't copy the objects pointed to
         even if the source array contains the items of pointer type).
     */
     wxSortedArray(const wxSortedArray& array);
 
     /**
-        Performs a deep copy (i.e. the array element are copied too).
+        Performs a deep copy (i.e.\ the array element are copied too).
     */
     wxObjArray(const wxObjArray& array);
 
     /**
-        Performs a shallow array copy (i.e. doesn't copy the objects pointed to
+        Performs a shallow array copy (i.e.\ doesn't copy the objects pointed to
         even if the source array contains the items of pointer type).
     */
     wxArray& operator=(const wxArray& array);
 
     /**
-        Performs a shallow array copy (i.e. doesn't copy the objects pointed to
+        Performs a shallow array copy (i.e.\ doesn't copy the objects pointed to
         even if the source array contains the items of pointer type).
     */
     wxSortedArray& operator=(const wxSortedArray& array);
 
     /**
-        Performs a deep copy (i.e. the array element are copied too).
+        Performs a deep copy (i.e.\ the array element are copied too).
     */
     wxObjArray& operator=(const wxObjArray& array);
 
@@ -375,7 +375,7 @@ public:
     T& Item(size_t index) const;
 
     /**
-        Returns the last element in the array, i.e. is the same as calling
+        Returns the last element in the array, i.e.\ is the same as calling
         "Item(GetCount() - 1)". An assert failure is raised in the debug mode
         if the array is empty.
 
@@ -545,14 +545,20 @@ public:
 
         @code
         T *item = array[n];
+        array.Remove(item);
         delete item;
-        array.Remove(n);
         @endcode
 
         See also WX_CLEAR_ARRAY() macro which deletes all elements of a wxArray
         (supposed to contain pointers).
+
+        Notice that for sorted arrays this method uses binary search to find
+        the item so it doesn't necessarily remove the first matching item, but
+        the first one found by the binary search.
+
+        @see RemoveAt()
     */
-    Remove(T item);
+    void Remove(T item);
 
     /**
         Removes @a count elements starting at @a index from the array. When an
@@ -570,7 +576,7 @@ public:
         See also WX_CLEAR_ARRAY() macro which deletes all elements of a wxArray
         (supposed to contain pointers).
     */
-    RemoveAt(size_t index, size_t count = 1);
+    void RemoveAt(size_t index, size_t count = 1);
 
     //@}
 
@@ -595,15 +601,16 @@ public:
               another, identical, element is in the array.
     */
     int Index(T& item, bool searchFromEnd = false) const;
+
     /**
         This version of Index() is for wxSortedArray only.
 
-        Searches the element in the array, starting from either beginning or
-        the end depending on the value of @a searchFromEnd parameter.
+        Searches for the element in the array, using binary search.
+
         @c wxNOT_FOUND is returned if the element is not found, otherwise the
         index of the element is returned.
     */
-    const int Index(T& item) const;
+    int Index(T& item) const;
 
     /**
         Search for a place to insert @a item into the sorted array (binary
@@ -651,7 +658,7 @@ public:
 
 /**
     This macro may be used to delete all elements of the array before emptying
-    it. It can not be used with wxObjArrays - but they will delete their
+    it. It cannot be used with wxObjArrays - but they will delete their
     elements anyway when you call Empty().
 */
 #define WX_CLEAR_ARRAY(wxArray_arrayToBeCleared)
@@ -794,3 +801,13 @@ public:
 */
 #define WX_PREPEND_ARRAY(wxArray_arrayToModify, wxArray_arrayToBePrepended)
 
+//@{
+/**
+    Predefined specialization of wxArray<T> for standard types.
+*/
+typedef wxArray<int> wxArrayInt;
+typedef wxArray<long> wxArrayLong;
+typedef wxArray<short> wxArrayShort;
+typedef wxArray<double> wxArrayDouble;
+typedef wxArray<void*> wxArrayPtrVoid;
+//@}