diff options
Diffstat (limited to 'doc/tqmemarray.doc')
| -rw-r--r-- | doc/tqmemarray.doc | 590 | 
1 files changed, 590 insertions, 0 deletions
diff --git a/doc/tqmemarray.doc b/doc/tqmemarray.doc new file mode 100644 index 000000000..04c11a86f --- /dev/null +++ b/doc/tqmemarray.doc @@ -0,0 +1,590 @@ +/**************************************************************************** +** +** TQMemArray class documentation +** +** Copyright (C) 1992-2008 Trolltech ASA.  All rights reserved. +** +** This file is part of the TQt GUI Toolkit. +** +** This file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free +** Software Foundation and appearing in the files LICENSE.GPL2 +** and LICENSE.GPL3 included in the packaging of this file. +** Alternatively you may (at your option) use any later version +** of the GNU General Public License if such license has been +** publicly approved by Trolltech ASA (or its successors, if any) +** and the KDE Free TQt Foundation. +** +** Please review the following information to ensure GNU General +** Public Licensing requirements will be met: +** http://trolltech.com/products/qt/licenses/licensing/opensource/. +** If you are unsure which license is appropriate for your use, please +** review the following information: +** http://trolltech.com/products/qt/licenses/licensing/licensingoverview +** or contact the sales department at sales@trolltech.com. +** +** This file may be used under the terms of the Q Public License as +** defined by Trolltech ASA and appearing in the file LICENSE.QPL +** included in the packaging of this file.  Licensees holding valid Qt +** Commercial licenses may use this file in accordance with the Qt +** Commercial License Agreement provided with the Software. +** +** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted +** herein. +** +**********************************************************************/ + + +/***************************************************************************** +  TQMemArray documentation + *****************************************************************************/ + +/*! +    \class TQMemArray tqmemarray.h +    \reentrant +    \brief The TQMemArray class is a template class that provides arrays of simple types. + +    \ingroup tools + +    TQMemArray is implemented as a template class. Define a template +    instance TQMemArray\<X\> to create an array that contains X items. + +    TQMemArray stores the array elements directly in the array. It can +    only deal with simple types (i.e. C++ types, structs, and classes +    that have no constructors, destructors, or virtual functions). +    TQMemArray uses bitwise operations to copy and compare array +    elements.  + +    The TQPtrVector collection class is also a kind of array. Like most +    \link collection.html collection classes\endlink, it uses pointers +    to the contained items. + +    TQMemArray uses \link shclass.html explicit sharing\endlink with a +    reference count. If more than one array shares common data and one +    of the arrays is modified, all the arrays are modified. + +    The benefit of sharing is that a program does not need to duplicate +    data when it is not required, which results in lower memory use +    and less copying of data. + +    An alternative to TQMemArray is TQValueVector. The TQValueVector class +    also provides an array of objects, but can deal with objects that +    have constructors (specifically a copy constructor and a default +    constructor). TQValueVector provides an STL-compatible syntax and is +    \link shclass.html implicitly shared\endlink. + +    Example: +    \code +    #include <tqmemarray.h> +    #include <stdio.h> + +    TQMemArray<int> fib( int num ) // returns fibonacci array +    { +	Q_ASSERT( num > 2 ); +	TQMemArray<int> f( num ); // array of ints + +	f[0] = f[1] = 1; +	for ( int i = 2; i < num; i++ ) +	    f[i] = f[i-1] + f[i-2]; + +	return f; +    } + +    int main() +    { +	TQMemArray<int> a = fib( 6 ); // get first 6 fibonaccis +	for ( int i = 0; i < a.size(); i++ ) +	    tqDebug( "%d: %d", i, a[i] ); + +	tqDebug( "1 is found %d times", a.contains(1) ); +	tqDebug( "5 is found at index %d", a.find(5) ); + +	return 0; +    } +    \endcode + +    Program output: +    \code +    0: 1 +    1: 1 +    2: 2 +    3: 3 +    4: 5 +    5: 8 +    1 is found 2 times +    5 is found at index 4 +    \endcode + +    Note concerning the use of TQMemArray for manipulating structs or +    classes: Compilers will often pad the size of structs of odd sizes +    up to the nearest word boundary. This will then be the size +    TQMemArray will use for its bitwise element comparisons. Because +    the remaining bytes will typically be uninitialized, this can +    cause find() etc. to fail to find the element. Example: + +    \code +    // MyStruct may be padded to 4 or 8 bytes +    struct MyStruct +    { +	short i; // 2 bytes +	char c;  // 1 byte +    }; + +    TQMemArray<MyStruct> a(1); +    a[0].i = 5; +    a[0].c = 't'; + +    MyStruct x; +    x.i = '5'; +    x.c = 't'; +    int i = a.find( x ); // may return -1 if the pad bytes differ +    \endcode + +    To work around this, make sure that you use a struct where +    sizeof() returns the same as the sum of the sizes of the members +    either by changing the types of the struct members or by adding +    dummy members. + +    TQMemArray data can be traversed by iterators (see begin() and +    end()). The number of items is returned by count(). The array can +    be resized with resize() and filled using fill(). + +    You can make a shallow copy of the array with assign() (or +    operator=()) and a deep copy with duplicate(). + +    Search for values in the array with find() and contains(). For +    sorted arrays (see sort()) you can search using bsearch(). + +    You can set the data directly using setRawData() and +    resetRawData(), although this requires care. + +    \sa \link shclass.html Shared Classes\endlink +*/ + +/*! \enum TQMemArray::Iterator +    A TQMemArray iterator. +    \sa begin() end() +*/ +/*! \enum TQMemArray::ConstIterator +    A const TQMemArray iterator. +    \sa begin() end() +*/ +/*! \enum TQMemArray::ValueType +    \internal +*/ + +/*! +    \fn TQMemArray::TQMemArray() + +    Constructs a null array. + +    \sa isNull() +*/ + +/*! +    \fn TQMemArray::TQMemArray( int size ) + +    Constructs an array with room for \a size elements. Makes a null +    array if \a size == 0. + +    The elements are left uninitialized. + +    \sa resize(), isNull() +*/ + +/*! +    \fn TQMemArray::TQMemArray( const TQMemArray<type> &a ) + +    Constructs a shallow copy of \a a. + +    \sa assign() +*/ + +/*! +    \fn TQMemArray::TQMemArray( int, int ) + +    Constructs an array \e{without allocating} array space. The +    arguments should be (0, 0). Use at your own risk. +*/ + +/*! +    \fn TQMemArray::~TQMemArray() + +    Dereferences the array data and deletes it if this was the last +    reference. +*/ + +/*! +    \fn TQMemArray<type> &TQMemArray::operator=( const TQMemArray<type> &a ) + +    Assigns a shallow copy of \a a to this array and returns a +    reference to this array. + +    Equivalent to assign( a ). +*/ + +/*! +    \fn type *TQMemArray::data() const + +    Returns a pointer to the actual array data. + +    The array is a null array if data() == 0 (null pointer). + +    \sa isNull() +*/ + +/*! +    \fn uint TQMemArray::nrefs() const + +    Returns the reference count for the shared array data. This +    reference count is always greater than zero. +*/ + +/*! +    \fn uint TQMemArray::size() const + +    Returns the size of the array (maximum number of elements). + +    The array is a null array if size() == 0. + +    \sa isNull(), resize() +*/ + +/*! +    \fn uint TQMemArray::count() const + +    Returns the same as size(). + +    \sa size() +*/ + +/*! +    \fn bool TQMemArray::isEmpty() const + +    Returns TRUE if the array is empty; otherwise returns FALSE. + +    isEmpty() is equivalent to isNull() for TQMemArray (unlike +    TQString). +*/ + +/*! +    \fn bool TQMemArray::isNull() const + +    Returns TRUE if the array is null; otherwise returns FALSE. + +    A null array has size() == 0 and data() == 0. +*/ + +/*! +    \fn bool TQMemArray::resize( uint size, Optimization optim ) + +    Resizes (expands or shrinks) the array to \a size elements. The +    array becomes a null array if \a size == 0. + +    Returns TRUE if successful, or FALSE if the memory cannot be +    allocated. + +    New elements are not initialized. + +    \a optim is either \c QGArray::MemOptim (the default) or +    \c QGArray::SpeedOptim. + +    <b>Note:</b> By default, \c SpeedOptim is not available for general +    use since it is only available if TQt is built in a particular +    configuration. + +    \sa size() +*/ + +/*! +    \fn bool TQMemArray::resize( uint size ) + +    \overload + +    Resizes (expands or shrinks) the array to \a size elements. The +    array becomes a null array if \a size == 0. + +    Returns TRUE if successful, i.e. if the memory can be allocated; +    otherwise returns FALSE. + +    New elements are not initialized. + +    \sa size() +*/ + +/*! +    \fn bool TQMemArray::truncate( uint pos ) + +    Truncates the array at position \a pos. + +    Returns TRUE if successful, i.e. if the memory can be allocated; +    otherwise returns FALSE. + +    Equivalent to resize(\a pos). + +    \sa resize() +*/ + +/*! +    \fn bool TQMemArray::fill( const type &v, int size ) + +    Fills the array with the value \a v. If \a size is specified as +    different from -1, then the array will be resized before being +    filled. + +    Returns TRUE if successful, i.e. if \a size is -1, or \a size is +    != -1 and the memory can be allocated; otherwise returns FALSE. + +    \sa resize() +*/ + +/*! +    \fn void TQMemArray::detach() + +    Detaches this array from shared array data; i.e. it makes a +    private, deep copy of the data. + +    Copying will be performed only if the \link nrefs() reference +    count\endlink is greater than one. + +    \sa copy() +*/ + +/*! +    \fn TQMemArray<type> TQMemArray::copy() const + +    Returns a deep copy of this array. + +    \sa detach(), duplicate() +*/ + +/*! +    \fn TQMemArray<type> &TQMemArray::assign( const TQMemArray<type> &a ) + +    Shallow copy. Dereferences the current array and references the +    data contained in \a a instead. Returns a reference to this array. + +    \sa operator=() +*/ + +/*! +    \fn TQMemArray<type> &TQMemArray::assign( const type *data, uint size ) + +    \overload + +    Shallow copy. Dereferences the current array and references the +    array data \a data, which contains \a size elements. Returns a +    reference to this array. + +    Do not delete \a data later; TQMemArray will call free() on it +    at the right time. +*/ + +/*! +    \fn TQMemArray<type> &TQMemArray::duplicate( const TQMemArray<type> &a ) + +    Deep copy. Dereferences the current array and obtains a copy of +    the data contained in \a a instead. Returns a reference to this +    array. + +    \sa copy() +*/ + +/*! +    \fn TQMemArray<type> &TQMemArray::duplicate( const type *data, uint size ) + +    \overload + +    Deep copy. Dereferences the current array and obtains a copy of +    the array data \a data instead. Returns a reference to this array. +    The size of the array is given by \a size. + +    \sa copy() +*/ + +/*! +    \fn TQMemArray<type> &TQMemArray::setRawData( const type *data, uint size ) + +    Sets raw data and returns a reference to the array. + +    Dereferences the current array and sets the new array data to \a +    data and the new array size to \a size. Do not attempt to resize +    or re-assign the array data when raw data has been set. Call +    resetRawData(\a data, \a size) to reset the array. + +    Setting raw data is useful because it sets TQMemArray data without +    allocating memory or copying data. + +    Example I (intended use): +    \code +    static char bindata[] = { 231, 1, 44, ... }; +    TQByteArray	a; +    a.setRawData( bindata, sizeof(bindata) );	// a points to bindata +    QDataStream s( a, IO_ReadOnly );		// open on a's data +    s >> <something>;				// read raw bindata +    a.resetRawData( bindata, sizeof(bindata) ); // finished +    \endcode + +    Example II (you don't want to do this): +    \code +    static char bindata[] = { 231, 1, 44, ... }; +    TQByteArray	a, b; +    a.setRawData( bindata, sizeof(bindata) );	// a points to bindata +    a.resize( 8 );				// will crash +    b = a;					// will crash +    a[2] = 123;					// might crash +    // forget to resetRawData: will crash +    \endcode + +    \warning If you do not call resetRawData(), TQMemArray will attempt +    to deallocate or reallocate the raw data, which might not be too +    good. Be careful. + +    \sa resetRawData() +*/ + +/*! +    \fn void TQMemArray::resetRawData( const type *data, uint size ) + +    Removes internal references to the raw data that was set using +    setRawData(). This means that TQMemArray no longer has access to +    the \a data, so you are free to manipulate \a data as you wish. +    You can now use the TQMemArray without affecting the original \a +    data, for example by calling setRawData() with a pointer to some +    other data. + +    The arguments must be the \a data and length, \a size, that were +    passed to setRawData(). This is for consistency checking. + +    \sa setRawData() +*/ + +/*! +    \fn int TQMemArray::find( const type &v, uint index ) const + +    Finds the first occurrence of \a v, starting at position \a index. + +    Returns the position of \a v, or -1 if \a v could not be found. + +    \sa contains() +*/ + +/*! +    \fn int TQMemArray::contains( const type &v ) const + +    Returns the number of times \a v occurs in the array. + +    \sa find() +*/ + +/*! +    \fn void TQMemArray::sort() + +    Sorts the array elements in ascending order, using bitwise +    comparison (memcmp()). + +    \sa bsearch() +*/ + +/*! +    \fn int TQMemArray::bsearch( const type &v ) const + +    In a sorted array (as sorted by sort()), finds the first +    occurrence of \a v by using a binary search. For a sorted +    array this is generally much faster than find(), which does +    a linear search. + +    Returns the position of \a v, or -1 if \a v could not be found. + +    \sa sort(), find() +*/ + +/*! +    \fn type &TQMemArray::operator[]( int index ) const + +    Returns a reference to the element at position \a index in the +    array. + +    This can be used to both read and set an element. Equivalent to +    at(). + +    \sa at() +*/ + +/*! +    \fn type &TQMemArray::at( uint index ) const + +    Returns a reference to the element at position \a index in the array. + +    This can be used to both read and set an element. + +    \sa operator[]() +*/ + +/*! +    \fn TQMemArray::operator const type *() const + +    Cast operator. Returns a pointer to the array. + +    \sa data() +*/ + +/*! +    \fn bool TQMemArray::operator==( const TQMemArray<type> &a ) const + +    Returns TRUE if this array is equal to \a a; otherwise returns +    FALSE. + +    The two arrays are compared bitwise. + +    \sa operator!=() +*/ + +/*! +    \fn bool TQMemArray::operator!=( const TQMemArray<type> &a ) const + +    Returns TRUE if this array is different from \a a; otherwise +    returns FALSE. + +    The two arrays are compared bitwise. + +    \sa operator==() +*/ + +/*! +    \fn Iterator TQMemArray::begin() + +    Returns an iterator pointing at the beginning of this array. This +    iterator can be used in the same way as the iterators of +    TQValueList and TQMap, for example. +*/ + +/*! +    \fn Iterator TQMemArray::end() + +    Returns an iterator pointing behind the last element of this +    array. This iterator can be used in the same way as the iterators +    of TQValueList and TQMap, for example. +*/ + +/*! +    \fn ConstIterator TQMemArray::begin() const + +    \overload + +    Returns a const iterator pointing at the beginning of this array. +    This iterator can be used in the same way as the iterators of +    TQValueList and TQMap, for example. +*/ + +/*! +    \fn ConstIterator TQMemArray::end() const + +    \overload + +    Returns a const iterator pointing behind the last element of this +    array. This iterator can be used in the same way as the iterators +    of TQValueList and TQMap, for example.  +*/  | 
