diff options
author | Renato Filho <renato.filho@openbossa.org> | 2010-05-17 18:40:38 -0300 |
---|---|---|
committer | Renato Filho <renato.filho@openbossa.org> | 2010-05-17 19:55:06 -0300 |
commit | 089cce5dbbcaeb32b14fc561ce0d723dbb80d6e1 (patch) | |
tree | b1e28dbb53d2f792127e27b7ecbef02fee53c3c3 /libpyside/dynamicqmetaobject.cpp | |
parent | f976c831fd89c09e116465538f0a3888bba543e2 (diff) |
Used shared pointer on MethodData to allow copy.
Reviewer: Hugo Parente Lima <hugo.lima@openbossa.org>,
Luciano Wolf <luciano.wolf@openbossa.org>
Diffstat (limited to 'libpyside/dynamicqmetaobject.cpp')
-rw-r--r-- | libpyside/dynamicqmetaobject.cpp | 41 |
1 files changed, 29 insertions, 12 deletions
diff --git a/libpyside/dynamicqmetaobject.cpp b/libpyside/dynamicqmetaobject.cpp index facdc83e7..d4e3ca255 100644 --- a/libpyside/dynamicqmetaobject.cpp +++ b/libpyside/dynamicqmetaobject.cpp @@ -62,36 +62,49 @@ static int registerString(const QByteArray& s, QList<QByteArray>* strings) } MethodData::MethodData(const char* signature, const char* type) - : m_signature(signature), m_type(type) { + m_signature = QSharedPointer<QByteArray>(new QByteArray(signature)); + m_type = QSharedPointer<QByteArray>(new QByteArray(type)); } void MethodData::clear() { - m_signature.clear(); - m_type.clear(); + m_signature->clear(); + m_type->clear(); } bool MethodData::operator==(const MethodData& other) const { - return m_signature == other.signature(); + return *m_signature == other.signature(); } bool MethodData::operator==(const char* other) const { - return m_signature == other; + return *m_signature == other; } QByteArray MethodData::signature() const { - return m_signature; + if (!m_signature.isNull()) + return *m_signature; + else + return QByteArray(); } QByteArray MethodData::type() const { - if (m_type == "void") - return QByteArray(""); - return m_type; + if (!m_type.isNull()) { + if (*m_type == "void") + return QByteArray(); + return *m_type; + } else { + return QByteArray(); + } +} + +bool MethodData::isValid() const +{ + return m_signature->size(); } DynamicQMetaObject::DynamicQMetaObject(const char* className, const QMetaObject* metaObject) @@ -260,7 +273,7 @@ void DynamicQMetaObject::updateMetaObject() QLinkedList<MethodData>::iterator iSignal = m_signals.begin(); for(int i=0; i < MAX_SIGNALS_COUNT; i++) { QByteArray sigType; - if (iSignal != m_signals.end()) { + if (iSignal != m_signals.end() && ((*iSignal).signature().size() > 0) ) { data[index++] = registerString((*iSignal).signature(), &strings); // func name sigType = (*iSignal).type(); iSignal++; @@ -276,9 +289,13 @@ void DynamicQMetaObject::updateMetaObject() //write slots foreach(MethodData slot, m_slots) { - data[index++] = registerString(slot.signature(), &strings); // func name + if (slot.isValid()) + data[index++] = registerString(slot.signature(), &strings); // func name + else + data[index++] = NULL_INDEX; + data[index++] = NULL_INDEX; // arguments - data[index++] = (slot.type().size() > 0 ? registerString(slot.type(), &strings) : NULL_INDEX); // normalized type + data[index++] = (slot.isValid() ? registerString(slot.type(), &strings) : NULL_INDEX); // normalized type data[index++] = NULL_INDEX; // tags data[index++] = AccessPublic | MethodSlot; // flags } |