X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e54c96f187f46c06bd36be8cd52b35c19884aa2b..e333075415c35d2e869ea585fa41f01a2c938897:/interface/dynarray.h?ds=sidebyside diff --git a/interface/dynarray.h b/interface/dynarray.h index d4c824ef56..fbb76b2f06 100644 --- a/interface/dynarray.h +++ b/interface/dynarray.h @@ -7,7 +7,6 @@ ///////////////////////////////////////////////////////////////////////////// /** - @class wxArrayT @wxheader{dynarray.h} This section describes the so called @e dynamic arrays. This is a C @@ -149,7 +148,7 @@ @library{wxbase} @category{FIXME} - @see @ref overview_wxcontaineroverview, wxListT(), wxVectorT() + @see @ref overview_container, wxList, wxVector */ class wxArray { @@ -192,15 +191,15 @@ public: /** wxArray::Add - + wxArray::AddAt - + wxArray::Insert - + wxArray::SetCount - + WX_APPEND_ARRAY() - + WX_PREPEND_ARRAY() */ @@ -230,9 +229,9 @@ public: never use wxBaseArray anyhow it shouldn't be a problem) and that you should not derive your own classes from the array classes. @ref wxArray::ctordef "wxArray default constructor" - + @ref wxArray::ctorcopy "wxArray copy constructors and assignment operators" - + @ref wxArray::dtor ~wxArray */ @@ -349,25 +348,25 @@ public: WX_DECLARE_OBJARRAY macros and must be fully declared before you use WX_DEFINE_OBJARRAY macro. WX_DEFINE_ARRAY() - + WX_DEFINE_EXPORTED_ARRAY() - + WX_DEFINE_USER_EXPORTED_ARRAY() - + WX_DEFINE_SORTED_ARRAY() - + WX_DEFINE_SORTED_EXPORTED_ARRAY() - + WX_DEFINE_SORTED_USER_EXPORTED_ARRAY() - + WX_DECLARE_EXPORTED_OBJARRAY() - + WX_DECLARE_USER_EXPORTED_OBJARRAY() - + WX_DEFINE_OBJARRAY() - + WX_DEFINE_EXPORTED_OBJARRAY() - + WX_DEFINE_USER_EXPORTED_OBJARRAY() To slightly complicate the matters even further, the operator - defined by default for the array iterators by these macros only makes sense if the array @@ -375,33 +374,33 @@ public: provokes warnings from some compilers and to avoid them you should use the @c _PTR versions of the macros above. For example, to define an array of pointers to @c double you should use: - + Note that the above macros are generally only useful for wxObject types. There are separate macros for declaring an array of a simple type, such as an int. The following simple types are supported: - + int - + long - + size_t - + double To create an array of a simple type, simply append the type you want in CAPS to the array definition. For example, for an integer array, you'd use one of the following variants: WX_DEFINE_ARRAY_INT() - + WX_DEFINE_EXPORTED_ARRAY_INT() - + WX_DEFINE_USER_EXPORTED_ARRAY_INT() - + WX_DEFINE_SORTED_ARRAY_INT() - + WX_DEFINE_SORTED_EXPORTED_ARRAY_INT() - + WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_INT() */ @@ -420,7 +419,7 @@ public: going to put in the array and will prevent the array code from reallocating the memory more times than needed. wxArray::Alloc - + wxArray::Shrink */ @@ -430,11 +429,11 @@ public: retrieve them - possibly using just the C array indexing [] operator which does exactly the same as wxArray::Item method. wxArray::GetCount - + wxArray::IsEmpty - + wxArray::Item - + wxArray::Last */ @@ -447,7 +446,7 @@ public: Detach() if you don't want this to happen. On the other hand, when an object is removed from a wxArray nothing happens - you should delete it manually if required: - + See also WX_CLEAR_ARRAY() macro which deletes all elements of a wxArray (supposed to contain pointers). */ @@ -459,7 +458,7 @@ public: Detach() if you don't want this to happen. On the other hand, when an object is removed from a wxArray nothing happens - you should delete it manually if required: - + See also WX_CLEAR_ARRAY() macro which deletes all elements of a wxArray (supposed to contain pointers). */ @@ -467,22 +466,22 @@ public: /** WX_CLEAR_ARRAY() - + wxArray::Empty - + wxArray::Clear - + wxArray::RemoveAt - + wxArray::Remove */ /** wxArray::Index - + wxArray::IndexForInsert - + wxArray::Sort */ @@ -493,7 +492,7 @@ public: @e count. If the array has already @a count or more items, nothing is done. Otherwise, @c count - GetCount() elements are added and initialized to the value @e defval. - + @see wxArray::GetCount */ void SetCount(size_t count); @@ -508,7 +507,7 @@ public: /** The notation CMPFUNCT should be read as if we had the following declaration: - + where @e T is the type of the array elements. I.e. it is a function returning @e int which is passed two arguments of type @e T *. Sorts the array using the specified compare function: this function should @@ -518,92 +517,6 @@ public: */ void Sort(CMPFUNC compareFunction); - /** - This macro may be used to append all elements of the @a other array to the - @e array. The two arrays must be of the same type. - */ -#define void WX_APPEND_ARRAY(wxArray& array, wxArray& other) /* implementation is private */ - - /** - 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 elements anyhow - when you call Empty(). - */ -#define void WX_CLEAR_ARRAY(wxArray& array) /* implementation is private */ - - //@{ - /** - This macro declares a new object array class named @a name and containing - the elements of type @e T. The second form is used when compiling wxWidgets as - a DLL under Windows and array needs to be visible outside the DLL. The third is - needed for exporting an array from a user DLL. - Example: - - You must use WX_DEFINE_OBJARRAY() macro to define - the array class - otherwise you would get link errors. - */ - WX_DECLARE_OBJARRAY(T, name); - WX_DECLARE_EXPORTED_OBJARRAY(T, name); - WX_DECLARE_USER_EXPORTED_OBJARRAY(T, name); - //@} - - //@{ - /** - This macro defines a new array class named @a name and containing the - elements of type @e T. The second form is used when compiling wxWidgets as - a DLL under Windows and array needs to be visible outside the DLL. The third is - needed for exporting an array from a user DLL. - Example: - - Note that wxWidgets predefines the following standard array classes: @b - wxArrayInt, - @b wxArrayLong, @b wxArrayShort, @b wxArrayDouble, @b wxArrayPtrVoid. - */ - WX_DEFINE_ARRAY(T, name); - WX_DEFINE_EXPORTED_ARRAY(T, name); - WX_DEFINE_USER_EXPORTED_ARRAY(T, name, exportspec); - //@} - - //@{ - /** - This macro defines the methods of the array class @a name not defined by the - WX_DECLARE_OBJARRAY() macro. You must include the - file wx/arrimpl.cpp before using this macro and you must have the full - declaration of the class of array elements in scope! If you forget to do the - first, the error will be caught by the compiler, but, unfortunately, many - compilers will not give any warnings if you forget to do the second - but the - objects of the class will not be copied correctly and their real destructor will - not be called. The latter two forms are merely aliases of the first to satisfy - some people's sense of symmetry when using the exported declarations. - Example of usage: - */ - WX_DEFINE_OBJARRAY(name); - WX_DEFINE_EXPORTED_OBJARRAY(name); - WX_DEFINE_USER_EXPORTED_OBJARRAY(name); - //@} - - //@{ - /** - This macro defines a new sorted array class named @a name and containing - the elements of type @e T. The second form is used when compiling wxWidgets as - a DLL under Windows and array needs to be visible outside the DLL. The third is - needed for exporting an array from a user DLL. - Example: - - You will have to initialize the objects of this class by passing a comparison - function to the array object constructor like this: - */ - WX_DEFINE_SORTED_ARRAY(T, name); - WX_DEFINE_SORTED_EXPORTED_ARRAY(T, name); - WX_DEFINE_SORTED_USER_EXPORTED_ARRAY(T, name); - //@} - - /** - This macro may be used to prepend all elements of the @a other array to the - @e array. The two arrays must be of the same type. - */ -#define void WX_PREPEND_ARRAY(wxArray& array, wxArray& other) /* implementation is private */ - //@{ /** The copy constructors and assignment operators perform a shallow array copy @@ -631,3 +544,89 @@ public: //@} }; + +/** + This macro may be used to append all elements of the @a other array to the + @e array. The two arrays must be of the same type. +*/ +#define WX_APPEND_ARRAY(wxArray& array, wxArray& other) /* implementation is private */ + +/** + 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 elements anyhow + when you call Empty(). +*/ +#define WX_CLEAR_ARRAY(wxArray& array) /* implementation is private */ + +//@{ +/** + This macro declares a new object array class named @a name and containing + the elements of type @e T. The second form is used when compiling wxWidgets as + a DLL under Windows and array needs to be visible outside the DLL. The third is + needed for exporting an array from a user DLL. + Example: + + You must use WX_DEFINE_OBJARRAY() macro to define + the array class - otherwise you would get link errors. +*/ +#define WX_DECLARE_OBJARRAY(T, name) /* implementation is private */ +#define WX_DECLARE_EXPORTED_OBJARRAY(T, name) /* implementation is private */ +#define WX_DECLARE_USER_EXPORTED_OBJARRAY(T, name) /* implementation is private */ +//@} + +//@{ +/** + This macro defines a new array class named @a name and containing the + elements of type @e T. The second form is used when compiling wxWidgets as + a DLL under Windows and array needs to be visible outside the DLL. The third is + needed for exporting an array from a user DLL. + Example: + + Note that wxWidgets predefines the following standard array classes: @b + wxArrayInt, + @b wxArrayLong, @b wxArrayShort, @b wxArrayDouble, @b wxArrayPtrVoid. +*/ +#define WX_DEFINE_ARRAY(T, name) /* implementation is private */ +#define WX_DEFINE_EXPORTED_ARRAY(T, name) /* implementation is private */ +#define WX_DEFINE_USER_EXPORTED_ARRAY(T, name, exportspec) /* implementation is private */ +//@} + +//@{ +/** + This macro defines the methods of the array class @a name not defined by the + WX_DECLARE_OBJARRAY() macro. You must include the + file wx/arrimpl.cpp before using this macro and you must have the full + declaration of the class of array elements in scope! If you forget to do the + first, the error will be caught by the compiler, but, unfortunately, many + compilers will not give any warnings if you forget to do the second - but the + objects of the class will not be copied correctly and their real destructor will + not be called. The latter two forms are merely aliases of the first to satisfy + some people's sense of symmetry when using the exported declarations. + Example of usage: +*/ +#define WX_DEFINE_OBJARRAY(name) /* implementation is private */ +#define WX_DEFINE_EXPORTED_OBJARRAY(name) /* implementation is private */ +#define WX_DEFINE_USER_EXPORTED_OBJARRAY(name) /* implementation is private */ +//@} + +//@{ +/** + This macro defines a new sorted array class named @a name and containing + the elements of type @e T. The second form is used when compiling wxWidgets as + a DLL under Windows and array needs to be visible outside the DLL. The third is + needed for exporting an array from a user DLL. + Example: + + You will have to initialize the objects of this class by passing a comparison + function to the array object constructor like this: +*/ +#define WX_DEFINE_SORTED_ARRAY(T, name) /* implementation is private */ +#define WX_DEFINE_SORTED_EXPORTED_ARRAY(T, name) /* implementation is private */ +#define WX_DEFINE_SORTED_USER_EXPORTED_ARRAY(T, name) /* implementation is private */ +//@} + +/** + This macro may be used to prepend all elements of the @a other array to the + @e array. The two arrays must be of the same type. +*/ +#define WX_PREPEND_ARRAY(wxArray& array, wxArray& other) /* implementation is private */