~oif-team/ubuntu/natty/qt4-x11/xi2.1

« back to all changes in this revision

Viewing changes to src/script/qscriptstring.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Alessandro Ghersi
  • Date: 2009-11-02 18:30:08 UTC
  • mfrom: (1.2.2 upstream)
  • mto: (15.2.5 experimental)
  • mto: This revision was merged to the branch mainline in revision 88.
  • Revision ID: james.westby@ubuntu.com-20091102183008-b6a4gcs128mvfb3m
Tags: upstream-4.6.0~beta1
ImportĀ upstreamĀ versionĀ 4.6.0~beta1

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/****************************************************************************
2
 
**
3
 
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4
 
** Contact: Nokia Corporation (qt-info@nokia.com)
5
 
**
6
 
** This file is part of the QtScript module of the Qt Toolkit.
7
 
**
8
 
** $QT_BEGIN_LICENSE:LGPL$
9
 
** Commercial Usage
10
 
** Licensees holding valid Qt Commercial licenses may use this file in
11
 
** accordance with the Qt Commercial License Agreement provided with the
12
 
** Software or, alternatively, in accordance with the terms contained in
13
 
** a written agreement between you and Nokia.
14
 
**
15
 
** GNU Lesser General Public License Usage
16
 
** Alternatively, this file may be used under the terms of the GNU Lesser
17
 
** General Public License version 2.1 as published by the Free Software
18
 
** Foundation and appearing in the file LICENSE.LGPL included in the
19
 
** packaging of this file.  Please review the following information to
20
 
** ensure the GNU Lesser General Public License version 2.1 requirements
21
 
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
22
 
**
23
 
** In addition, as a special exception, Nokia gives you certain
24
 
** additional rights. These rights are described in the Nokia Qt LGPL
25
 
** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
26
 
** package.
27
 
**
28
 
** GNU General Public License Usage
29
 
** Alternatively, this file may be used under the terms of the GNU
30
 
** General Public License version 3.0 as published by the Free Software
31
 
** Foundation and appearing in the file LICENSE.GPL included in the
32
 
** packaging of this file.  Please review the following information to
33
 
** ensure the GNU General Public License version 3.0 requirements will be
34
 
** met: http://www.gnu.org/copyleft/gpl.html.
35
 
**
36
 
** If you are unsure which license is appropriate for your use, please
37
 
** contact the sales department at http://www.qtsoftware.com/contact.
38
 
** $QT_END_LICENSE$
39
 
**
40
 
****************************************************************************/
41
 
 
42
 
#include "qscriptstring.h"
43
 
 
44
 
#ifndef QT_NO_SCRIPT
45
 
 
46
 
#include "qscriptstring_p.h"
47
 
#include "qscriptnameid_p.h"
48
 
#include "qscriptvalue_p.h"
49
 
#include "qscriptengine_p.h"
50
 
#include "qscriptvalueimpl_p.h"
51
 
#include "qscriptcontext_p.h"
52
 
#include "qscriptmember_p.h"
53
 
#include "qscriptobject_p.h"
54
 
 
55
 
QT_BEGIN_NAMESPACE
56
 
 
57
 
/*!
58
 
  \since 4.4
59
 
  \class QScriptString
60
 
 
61
 
  \brief The QScriptString class acts as a handle to "interned" strings in a QScriptEngine.
62
 
 
63
 
  \ingroup script
64
 
  \mainclass
65
 
 
66
 
  QScriptString can be used to achieve faster (repeated)
67
 
  property getting/setting, and comparison of property names, of
68
 
  script objects.
69
 
 
70
 
  To get a QScriptString representation of a string, pass the string
71
 
  to QScriptEngine::toStringHandle(). The typical usage pattern is to
72
 
  register one or more pre-defined strings when setting up your script
73
 
  environment, then subsequently use the relevant QScriptString as
74
 
  argument to e.g. QScriptValue::property().
75
 
 
76
 
  Call the toString() function to obtain the string that a
77
 
  QScriptString represents.
78
 
*/
79
 
 
80
 
/*!
81
 
  \internal
82
 
*/
83
 
QScriptStringPrivate::QScriptStringPrivate()
84
 
    : nameId(0), engine(0), q_ptr(0)
85
 
{
86
 
    ref = 0;
87
 
}
88
 
 
89
 
/*!
90
 
  \internal
91
 
*/
92
 
QScriptStringPrivate *QScriptStringPrivate::create()
93
 
{
94
 
    return new QScriptStringPrivate();
95
 
}
96
 
 
97
 
/*!
98
 
  \internal
99
 
*/
100
 
QScriptStringPrivate *QScriptStringPrivate::get(const QScriptString &q)
101
 
{
102
 
    return const_cast<QScriptStringPrivate*>(q.d_func());
103
 
}
104
 
 
105
 
/*!
106
 
  \internal
107
 
*/
108
 
void QScriptStringPrivate::init(QScriptString &q, QScriptStringPrivate *d)
109
 
{
110
 
    Q_ASSERT(q.d_ptr == 0);
111
 
    q.d_ptr = d;
112
 
    q.d_ptr->ref.ref();
113
 
}
114
 
 
115
 
/*!
116
 
  Constructs an invalid QScriptString.
117
 
*/
118
 
QScriptString::QScriptString()
119
 
    : d_ptr(0)
120
 
{
121
 
}
122
 
 
123
 
/*!
124
 
  Constructs a new QScriptString that is a copy of \a other.
125
 
*/
126
 
QScriptString::QScriptString(const QScriptString &other)
127
 
    : d_ptr(other.d_ptr)
128
 
{
129
 
    if (d_ptr)
130
 
        d_ptr->ref.ref();
131
 
}
132
 
 
133
 
/*!
134
 
  Destroys this QScriptString.
135
 
*/
136
 
QScriptString::~QScriptString()
137
 
{
138
 
    if (d_ptr && !d_ptr->ref.deref()) {
139
 
        if (isValid()) {
140
 
            d_ptr->engine->uninternString(d_ptr);
141
 
        } else {
142
 
            // the engine has already been deleted
143
 
            delete d_ptr;
144
 
        }
145
 
        d_ptr = 0;
146
 
    }
147
 
}
148
 
 
149
 
/*!
150
 
  Assigns the \a other value to this QScriptString.
151
 
*/
152
 
QScriptString &QScriptString::operator=(const QScriptString &other)
153
 
{
154
 
    if (d_ptr == other.d_ptr)
155
 
        return *this;
156
 
    if (d_ptr && !d_ptr->ref.deref()) {
157
 
        if (isValid()) {
158
 
            d_ptr->engine->uninternString(d_ptr);
159
 
        } else {
160
 
            // the engine has already been deleted
161
 
            delete d_ptr;
162
 
        }
163
 
    }
164
 
    d_ptr = other.d_ptr;
165
 
    if (d_ptr)
166
 
        d_ptr->ref.ref();
167
 
    return *this;
168
 
}
169
 
 
170
 
/*!
171
 
  Returns true if this QScriptString is valid; otherwise
172
 
  returns false.
173
 
*/
174
 
bool QScriptString::isValid() const
175
 
{
176
 
    Q_D(const QScriptString);
177
 
    return (d && d->nameId);
178
 
}
179
 
 
180
 
/*!
181
 
  Returns true if this QScriptString is equal to \a other;
182
 
  otherwise returns false.
183
 
*/
184
 
bool QScriptString::operator==(const QScriptString &other) const
185
 
{
186
 
    Q_D(const QScriptString);
187
 
    return (d == other.d_func());
188
 
}
189
 
 
190
 
/*!
191
 
  Returns true if this QScriptString is not equal to \a other;
192
 
  otherwise returns false.
193
 
*/
194
 
bool QScriptString::operator!=(const QScriptString &other) const
195
 
{
196
 
    Q_D(const QScriptString);
197
 
    return (d != other.d_func());
198
 
}
199
 
 
200
 
/*!
201
 
  Returns the string that this QScriptString represents, or a
202
 
  null string if this QScriptString is not valid.
203
 
 
204
 
  \sa isValid()
205
 
*/
206
 
QString QScriptString::toString() const
207
 
{
208
 
    Q_D(const QScriptString);
209
 
    if (!d || !d->nameId)
210
 
        return QString();
211
 
    return d->nameId->s;
212
 
}
213
 
 
214
 
/*!
215
 
  Returns the string that this QScriptString represents, or a
216
 
  null string if this QScriptString is not valid.
217
 
 
218
 
  \sa toString()
219
 
*/
220
 
QScriptString::operator QString() const
221
 
{
222
 
    return toString();
223
 
}
224
 
 
225
 
QT_END_NAMESPACE
226
 
 
227
 
#endif // QT_NO_SCRIPT