1 /****************************************************************************
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/
6 ** This file is part of the QtGui module of the Qt Toolkit.
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** GNU Lesser General Public License Usage
10 ** This file may be used under the terms of the GNU Lesser General Public
11 ** License version 2.1 as published by the Free Software Foundation and
12 ** appearing in the file LICENSE.LGPL included in the packaging of this
13 ** file. Please review the following information to ensure the GNU Lesser
14 ** General Public License version 2.1 requirements will be met:
15 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
17 ** In addition, as a special exception, Nokia gives you certain additional
18 ** rights. These rights are described in the Nokia Qt LGPL Exception
19 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
21 ** GNU General Public License Usage
22 ** Alternatively, this file may be used under the terms of the GNU General
23 ** Public License version 3.0 as published by the Free Software Foundation
24 ** and appearing in the file LICENSE.GPL included in the packaging of this
25 ** file. Please review the following information to ensure the GNU General
26 ** Public License version 3.0 requirements will be met:
27 ** http://www.gnu.org/copyleft/gpl.html.
30 ** Alternatively, this file may be used in accordance with the terms and
31 ** conditions contained in a signed written agreement between you and Nokia.
40 ****************************************************************************/
42 #ifndef QDATABUFFER_P_H
43 #define QDATABUFFER_P_H
49 // This file is not part of the Qt API. It exists for the convenience
50 // of other Qt classes. This header file may change from version to
51 // version without notice, or even be removed.
56 #include "QtCore/qbytearray.h"
62 template <typename Type> class QDataBuffer
69 buffer = (Type*) malloc(capacity * sizeof(Type));
81 inline void reset() { siz = 0; }
83 inline bool isEmpty() const { return siz==0; }
85 inline int size() const { return siz; }
86 inline Type *data() const { return buffer; }
88 inline Type &at(int i) { Q_ASSERT(i >= 0 && i < siz); return buffer[i]; }
89 inline const Type &at(int i) const { Q_ASSERT(i >= 0 && i < siz); return buffer[i]; }
90 inline Type &last() { Q_ASSERT(!isEmpty()); return buffer[siz-1]; }
91 inline const Type &last() const { Q_ASSERT(!isEmpty()); return buffer[siz-1]; }
92 inline Type &first() { Q_ASSERT(!isEmpty()); return buffer[0]; }
93 inline const Type &first() const { Q_ASSERT(!isEmpty()); return buffer[0]; }
95 inline void add(const Type &t) {
101 inline void pop_back() {
106 inline void resize(int size) {
111 inline void reserve(int size) {
112 if (size > capacity) {
115 while (capacity < size)
117 buffer = (Type*) realloc(buffer, capacity * sizeof(Type));
121 inline void shrink(int size) {
124 buffer = (Type*) realloc(buffer, capacity * sizeof(Type));
131 inline void swap(QDataBuffer<Type> &other) {
132 qSwap(capacity, other.capacity);
133 qSwap(siz, other.siz);
134 qSwap(buffer, other.buffer);
137 inline QDataBuffer &operator<<(const Type &t) { add(t); return *this; }
147 #endif // QDATABUFFER_P_H