source: trunk/include/qgarray.h@ 35

Last change on this file since 35 was 2, checked in by dmik, 20 years ago

Imported xplatform parts of the official release 3.3.1 from Trolltech

  • Property svn:keywords set to Id
File size: 4.0 KB
Line 
1/****************************************************************************
2** $Id: qgarray.h 2 2005-11-16 15:49:26Z dmik $
3**
4** Definition of QGArray class
5**
6** Created : 930906
7**
8** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
9**
10** This file is part of the tools module of the Qt GUI Toolkit.
11**
12** This file may be distributed under the terms of the Q Public License
13** as defined by Trolltech AS of Norway and appearing in the file
14** LICENSE.QPL included in the packaging of this file.
15**
16** This file may be distributed and/or modified under the terms of the
17** GNU General Public License version 2 as published by the Free Software
18** Foundation and appearing in the file LICENSE.GPL included in the
19** packaging of this file.
20**
21** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
22** licenses may use this file in accordance with the Qt Commercial License
23** Agreement provided with the Software.
24**
25** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
26** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
27**
28** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
29** information about Qt Commercial License Agreements.
30** See http://www.trolltech.com/qpl/ for QPL licensing information.
31** See http://www.trolltech.com/gpl/ for GPL licensing information.
32**
33** Contact info@trolltech.com if any conditions of this licensing are
34** not clear to you.
35**
36**********************************************************************/
37
38#ifndef QGARRAY_H
39#define QGARRAY_H
40
41#ifndef QT_H
42#include "qshared.h"
43#endif // QT_H
44
45
46class Q_EXPORT QGArray // generic array
47{
48friend class QBuffer;
49public:
50 // do not use this, even though this is public
51 // ### make protected or private in Qt 4.0 beta?
52 struct array_data : public QShared { // shared array
53 array_data():data(0),len(0)
54#ifdef QT_QGARRAY_SPEED_OPTIM
55 ,maxl(0)
56#endif
57 {}
58 char *data; // actual array data
59 uint len;
60#ifdef QT_QGARRAY_SPEED_OPTIM
61 uint maxl;
62#endif
63 };
64 QGArray();
65 enum Optimization { MemOptim, SpeedOptim };
66protected:
67 QGArray( int, int ); // dummy; does not alloc
68 QGArray( int size ); // allocate 'size' bytes
69 QGArray( const QGArray &a ); // shallow copy
70 virtual ~QGArray();
71
72 QGArray &operator=( const QGArray &a ) { return assign( a ); }
73
74 virtual void detach() { duplicate(*this); }
75
76 // ### Qt 4.0: maybe provide two versions of data(), at(), etc.
77 char *data() const { return shd->data; }
78 uint nrefs() const { return shd->count; }
79 uint size() const { return shd->len; }
80 bool isEqual( const QGArray &a ) const;
81
82 bool resize( uint newsize, Optimization optim );
83 bool resize( uint newsize );
84
85 bool fill( const char *d, int len, uint sz );
86
87 QGArray &assign( const QGArray &a );
88 QGArray &assign( const char *d, uint len );
89 QGArray &duplicate( const QGArray &a );
90 QGArray &duplicate( const char *d, uint len );
91 void store( const char *d, uint len );
92
93 array_data *sharedBlock() const { return shd; }
94 void setSharedBlock( array_data *p ) { shd=(array_data*)p; }
95
96 QGArray &setRawData( const char *d, uint len );
97 void resetRawData( const char *d, uint len );
98
99 int find( const char *d, uint index, uint sz ) const;
100 int contains( const char *d, uint sz ) const;
101
102 void sort( uint sz );
103 int bsearch( const char *d, uint sz ) const;
104
105 char *at( uint index ) const;
106
107 bool setExpand( uint index, const char *d, uint sz );
108
109protected:
110 virtual array_data *newData();
111 virtual void deleteData( array_data *p );
112
113private:
114 static void msg_index( uint );
115 array_data *shd;
116};
117
118
119inline char *QGArray::at( uint index ) const
120{
121#if defined(QT_CHECK_RANGE)
122 if ( index >= size() ) {
123 msg_index( index );
124 index = 0;
125 }
126#endif
127 return &shd->data[index];
128}
129
130
131#endif // QGARRAY_H
Note: See TracBrowser for help on using the repository browser.