55 #include <QtCore/private/qglobal_p.h>
56 #include "QtCore/qcoreevent.h"
57 #include "QtCore/qlist.h"
58 #include "QtCore/qobject.h"
59 #include "QtCore/qpointer.h"
60 #include "QtCore/qsharedpointer.h"
61 #include "QtCore/qvariant.h"
62 #include "QtCore/qproperty.h"
63 #include "QtCore/private/qproperty_p.h"
69 class QObjectConnectionListVector;
114 Q_EMIT parent->q_func()->objectNameChanged(
name, QObject::QPrivateSignal());
179 int method()
const {
Q_ASSERT(!isSlotObject);
return method_offset + method_relative; }
184 slotObj->destroyIfLastRef();
185 isSlotObject =
false;
209 ConnectionData *cd = receiver->d_func()->connections.loadRelaxed();
217 receiver->d_func()->connections.loadRelaxed()->currentSender = previous;
244 int count()
const {
return static_cast<int>(allocated); }
292 AlreadyLockedAndTemporarilyReleasingLock
297 cleanOrphanedConnectionsImpl(sender, lockPolicy);
299 void cleanOrphanedConnectionsImpl(
QObject *sender, LockPolicy lockPolicy);
325 newVector->next =
nullptr;
326 newVector->allocated =
size;
351 void deleteChildren();
353 void clearBindingStorage();
355 inline void checkForIncompatibleLibraryVersion(
int version)
const;
357 void setParent_helper(
QObject *);
358 void moveToThread_helper();
360 void _q_reregisterTimers(
void *
pointer);
362 bool isSender(
const QObject *receiver,
const char *
signal)
const;
372 bool isSignalConnected(
uint signalIdx,
bool checkDeclarative =
true)
const;
374 inline bool isDeclarativeSignalConnected(
uint signalIdx)
const;
381 template <
typename Func1,
typename Func2>
386 template <
typename Func1,
typename Func2>
391 const QObject *receiver,
void **slot,
406 if (connections.loadRelaxed())
410 connections.storeRelaxed(cd);
446 #if defined(QT_BUILD_INTERNAL)
452 qFatal(
"Cannot mix incompatible Qt library (%d.%d.%d) with this library (%d.%d.%d)",
477 template <
typename Func>
484 template <
typename Func>
487 Func &
func() noexcept {
return *
this; }
491 template <
typename Func>
495 std::negation<std::is_final<Func>>
503 using Obj = std::remove_pointer_t<decltype(std::declval<ObjPrivate *>()->q_func())>;
504 assertObjectType<Obj>(
d->q_ptr);
507 template<
typename Func,
typename Args,
typename R>
532 template <
typename Func1,
typename Func2>
540 "No Q_OBJECT in the class with the signal");
543 static_assert(
int(SignalType::ArgumentCount) >=
int(SlotType::ArgumentCount),
544 "The slot requires more arguments than the signal provides.");
546 "Signal and slot arguments are not compatible.");
548 "Return type of the slot is not compatible with the return type of the signal.");
550 const int *
types =
nullptr;
554 return QObject::connectImpl(sender,
reinterpret_cast<void **
>(&
signal),
555 receiverPrivate->q_ptr,
reinterpret_cast<void **
>(&slot),
557 typename SignalType::ReturnType>(slot),
558 type,
types, &SignalType::Object::staticMetaObject);
561 template <
typename Func1,
typename Func2>
568 "No Q_OBJECT in the class with the signal");
571 "Signal and slot arguments are not compatible.");
572 return QObject::disconnectImpl(sender,
reinterpret_cast<void **
>(&
signal),
573 receiverPrivate->q_ptr,
reinterpret_cast<void **
>(&slot),
574 &SignalType::Object::staticMetaObject);
585 :
QEvent(MetaCall), signalId_(signalId), sender_(sender)
587 , semaphore_(semaphore)
600 #if QT_CONFIG(thread)
611 const QObject *sender,
int signalId,
614 const QObject *sender,
int signalId,
620 const QObject *sender,
int signalId,
623 const QObject *sender,
int signalId,
628 inline int id()
const {
return d.method_offset_ +
d.method_relative_; }
629 inline const void *
const*
args()
const {
return d.args_; }
630 inline void **
args() {
return d.args_; }
634 virtual void placeMetaCall(
QObject *
object)
override;
637 inline void allocArgs();
648 alignas(
void *)
char prealloc_[3 *
sizeof(
void *) + 3 *
sizeof(
QMetaType)];
682 {
return metaCall(
c, _id,
a); }
688 return &
o->bindingStorage;
692 return &
o->bindingStorage;
696 return &ed->parent->bindingStorage;
700 return &ed->parent->bindingStorage;
small capitals from c petite p scientific i
[1]
static bool(* isSignalConnected)(QAbstractDeclarativeData *, const QObject *, int)
The QAtomicInt class provides platform-independent atomic operations on int.
The QAtomicPointer class is a template class that provides platform-independent atomic operations on ...
bool testAndSetRelease(Type expectedValue, Type newValue) noexcept
Type loadAcquire() const noexcept
Type loadRelaxed() const noexcept
void storeRelaxed(Type newValue) noexcept
Type fetchAndStoreRelaxed(Type newValue) noexcept
QBoolBlocker(bool &b, bool value=true)
The QEvent class is the base class of all event classes. Event objects contain event parameters.
The QExplicitlySharedDataPointer class represents a pointer to an explicitly shared object.
qsizetype count() const noexcept
The QObject class is the base class of all Qt objects.
virtual void connectNotify(const QMetaMethod &signal)
virtual void disconnectNotify(const QMetaMethod &signal)
void ensureConnectionData()
void checkForIncompatibleLibraryVersion(int version) const
QAtomicPointer< ConnectionData > connections
static QMetaObject::Connection connect(const typename QtPrivate::FunctionPointer< Func1 >::Object *sender, Func1 signal, const typename QtPrivate::FunctionPointer< Func2 >::Object *receiverPrivate, Func2 slot, Qt::ConnectionType type=Qt::AutoConnection)
static const QObjectPrivate * get(const QObject *o)
void connectNotify(const QMetaMethod &signal)
void(* StaticMetaCallFunction)(QObject *, QMetaObject::Call, int, void **)
QAtomicPointer< QtSharedPointer::ExternalRefCountData > sharedRefcount
QObject * currentChildBeingDeleted
static bool disconnect(const typename QtPrivate::FunctionPointer< Func1 >::Object *sender, Func1 signal, const typename QtPrivate::FunctionPointer< Func2 >::Object *receiverPrivate, Func2 slot)
void disconnectNotify(const QMetaMethod &signal)
QAbstractDeclarativeData * declarativeData
static QObjectPrivate * get(QObject *o)
QAtomicPointer< QThreadData > threadData
bool isDeclarativeSignalConnected(uint signalIdx) const
The QSemaphore class provides a general counting semaphore.
The QString class provides a Unicode character string.
The QVariant class acts like a union for the most common Qt data types.
QPrivateSlotObject(Func f)
@ BlockingQueuedConnection
void assertObjectType(QObjectPrivate *d)
typename std::conditional_t< std::conjunction_v< std::is_empty< Func >, std::negation< std::is_final< Func > > >, FunctionStorageEmptyBaseClassOptimization< Func >, FunctionStorageByValue< Func > > FunctionStorage
set set set set set set set macro pixldst1 abits if abits op else op endif endm macro pixldst2 abits if abits op else op endif endm macro pixldst4 abits if abits op else op endif endm macro pixldst0 abits op endm macro pixldst3 mem_operand op endm macro pixldst30 mem_operand op endm macro pixldst abits if abits elseif abits elseif abits elseif abits elseif abits pixldst0 abits else pixldst0 abits pixldst0 abits pixldst0 abits pixldst0 abits endif elseif abits else pixldst0 abits pixldst0 abits endif elseif abits else error unsupported bpp *numpix else pixst endif endm macro vuzp8 reg2 vuzp d d ®2 endm macro vzip8 reg2 vzip d d ®2 endm macro pixdeinterleave basereg basereg basereg basereg basereg endif endm macro pixinterleave basereg basereg basereg basereg basereg endif endm macro PF boost_increment endif if endif PF tst PF addne PF subne PF cmp ORIG_W if endif if endif if endif PF subge ORIG_W PF subges if endif if endif if endif endif endm macro cache_preload_simple endif if dst_r_bpp pld[DST_R, #(PREFETCH_DISTANCE_SIMPLE *dst_r_bpp/8)] endif if mask_bpp pld endif[MASK, #(PREFETCH_DISTANCE_SIMPLE *mask_bpp/8)] endif endif endm macro ensure_destination_ptr_alignment process_pixblock_tail_head if beq irp skip1 beq endif SRC MASK if dst_r_bpp DST_R else add endif PF add sub src_basereg pixdeinterleave mask_basereg pixdeinterleave dst_r_basereg process_pixblock_head pixblock_size cache_preload_simple process_pixblock_tail pixinterleave dst_w_basereg irp beq endif process_pixblock_tail_head tst beq irp if pixblock_size chunk_size tst beq pixld SRC pixld MASK if DST_R else pixld DST_R endif if
set set set set set set set macro pixldst1 abits if abits op else op endif endm macro pixldst2 abits if abits op else op endif endm macro pixldst4 abits if abits op else op endif endm macro pixldst0 abits op endm macro pixldst3 mem_operand op endm macro pixldst30 mem_operand op endm macro pixldst abits if abits elseif abits elseif abits elseif abits elseif abits pixldst0 abits else pixldst0 abits pixldst0 abits pixldst0 abits pixldst0 abits endif elseif abits else pixldst0 abits pixldst0 abits endif elseif abits else error unsupported bpp *numpix else pixst endif endm macro vuzp8 reg2 vuzp d d ®2 endm macro vzip8 reg2 vzip d d ®2 endm macro pixdeinterleave basereg basereg basereg basereg basereg endif endm macro pixinterleave basereg basereg basereg basereg basereg endif endm macro PF boost_increment endif if endif PF tst PF addne PF subne PF cmp ORIG_W if endif if endif if endif PF subge ORIG_W PF subges if endif if endif if endif endif endm macro cache_preload_simple endif if dst_r_bpp pld[DST_R, #(PREFETCH_DISTANCE_SIMPLE *dst_r_bpp/8)] endif if mask_bpp pld if[MASK, #(PREFETCH_DISTANCE_SIMPLE *mask_bpp/8)] endif endif endm macro ensure_destination_ptr_alignment process_pixblock_tail_head if beq irp skip1(dst_w_bpp<=(lowbit *8)) &&((lowbit *8)<(pixblock_size *dst_w_bpp)) .if lowbit< 16 tst DST_R
[3]
EGLOutputLayerEXT EGLint EGLAttrib value
#define Q_DISABLE_COPY_MOVE(Class)
#define QT_CONFIG(feature)
const QBindingStorage * qGetBindingStorage(const QObjectPrivate *o)
Q_CORE_EXPORT QBasicAtomicPointer< QSignalSpyCallbackSet > qt_signal_spy_callback_set
void Q_CORE_EXPORT qDeleteInEventHandler(QObject *o)
void Q_CORE_EXPORT qt_register_signal_spy_callbacks(QSignalSpyCallbackSet *callback_set)
Q_DECLARE_TYPEINFO(QObjectPrivate::ConnectionList, Q_RELOCATABLE_TYPE)
GLboolean GLboolean GLboolean b
GLsizei const GLfloat * v
[13]
GLboolean GLboolean GLboolean GLboolean a
[7]
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLsizei GLenum GLenum * types
GLsizei const void * pointer
connect(quitButton, &QPushButton::clicked, &app, &QCoreApplication::quit, Qt::QueuedConnection)
myObject disconnect()
[26]
QAtomicInteger< uint > currentConnectionId
QAtomicPointer< Connection > orphaned
int signalVectorCount() const
ConnectionList & connectionsForSignal(int signal)
void resizeSignalVector(uint size)
void cleanOrphanedConnections(QObject *sender, LockPolicy lockPolicy=NeedToLock)
QAtomicPointer< SignalVector > signalVector
QAtomicPointer< const int > argumentTypes
QAtomicPointer< QThreadData > receiverThreadData
QAtomicPointer< Connection > nextConnectionList
QAtomicPointer< QObject > receiver
Connection * prevConnectionList
QtPrivate::QSlotObjectBase * slotObj
StaticMetaCallFunction callFunction
QAtomicPointer< Connection > last
QAtomicPointer< Connection > first
static SignalVector * asSignalVector(ConnectionOrSignalVector *c)
ConnectionOrSignalVector * nextInOrphanList
static Connection * fromSignalVector(SignalVector *v)
Sender(QObject *receiver, QObject *sender, int signal)
const ConnectionList & at(int i) const
ConnectionList & at(int i)
void(* BeginCallback)(QObject *caller, int signal_or_method_index, void **argv)
BeginCallback slot_begin_callback
EndCallback slot_end_callback
EndCallback signal_end_callback
BeginCallback signal_begin_callback
void(* EndCallback)(QObject *caller, int signal_or_method_index)
static const int * types()
List_Append< List< typename L::Car >, typename List_Left< typename L::Cdr, N - 1 >::Value >::Value Value
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent