亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? qatomic.h

?? QT 開發環境里面一個很重要的文件
?? H
字號:
/******************************************************************************** Copyright (C) 1992-2006 Trolltech ASA. All rights reserved.**** This file is part of the QtCore module of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#ifndef QATOMIC_H#define QATOMIC_H#if defined(QT_MOC) || defined(QT_BUILD_QMAKE) || defined(QT_RCC) || defined(QT_UIC)#  include <QtCore/qatomic_generic.h>#else#  include <QtCore/qatomic_arch.h>#endif#include <QtCore/qglobal.h>QT_BEGIN_HEADERQT_MODULE(Core)#ifndef Q_SPECIALIZED_QATOMIC/*    We assume that the following 8 functions have been declared by the    platform specific qatomic.h:    int q_atomic_test_and_set_int(volatile int *ptr, int expected, int newval);    int q_atomic_test_and_set_acquire_int(volatile int *ptr, int expected, int newval);    int q_atomic_test_and_set_release_int(volatile int *ptr, int expected, int newval);    int q_atomic_test_and_set_ptr(volatile void *ptr, void *expected, void *newval);    int q_atomic_increment(volatile int *ptr);    int q_atomic_decrement(volatile int *ptr);    int q_atomic_set_int(volatile int *ptr, int newval);    void *q_atomic_set_ptr(volatile void *ptr, void *newval);    If you cannot implement these functions efficiently on your    platform without great difficulty, consider defining    Q_SPECIALIZED_QATOMIC.  By doing this, you need to implement:    struct QBasicAtomic;    template <typename T> struct QBasicAtomicPointer<T>;    int q_atomic_test_and_set_ptr(volatile void *ptr, void *expected, void *newval);    void *q_atomic_set_ptr(volatile void *ptr, void *newval);*/struct QBasicAtomic {    volatile int atomic;    void init(int x = 0)    { atomic = x; }    inline bool ref()    { return q_atomic_increment(&atomic) != 0; }    inline bool deref()    { return q_atomic_decrement(&atomic) != 0; }    inline bool operator==(int x) const    { return atomic == x; }    inline bool operator!=(int x) const    { return atomic != x; }    inline bool operator!() const    { return atomic == 0; }    inline operator int() const    { return atomic; }    inline QBasicAtomic &operator=(int x)    {        (void) q_atomic_set_int(&atomic, x);        return *this;    }    inline bool testAndSet(int expected, int newval)    { return q_atomic_test_and_set_int(&atomic, expected, newval) != 0; }    inline bool testAndSetAcquire(int expected, int newval)    { return q_atomic_test_and_set_acquire_int(&atomic, expected, newval) != 0; }    inline bool testAndSetRelease(int expected, int newval)    { return q_atomic_test_and_set_release_int(&atomic, expected, newval) != 0; }    inline int exchange(int newval)    { return q_atomic_set_int(&atomic, newval); }};template <typename T>struct QBasicAtomicPointer{    volatile T *pointer;    void init(T *t = 0)    { pointer = t; }    inline bool operator==(T *t) const    { return pointer == t; }    inline bool operator!=(T *t) const    { return !operator==(t); }    inline bool operator!() const    { return operator==(0); }    inline operator T *() const    { return const_cast<T *>(pointer); }    inline T *operator->() const    { return const_cast<T *>(pointer); }    inline QBasicAtomicPointer<T> &operator=(T *t)    {        (void) q_atomic_set_ptr(&pointer, t);        return *this;    }    inline bool testAndSet(T *expected, T *newval)    { return q_atomic_test_and_set_ptr(&pointer, expected, newval); }    inline T *exchange(T * newval)    { return static_cast<T *>(q_atomic_set_ptr(&pointer, newval)); }};#define Q_ATOMIC_INIT(a) { (a) }#endif // Q_SPECIALIZED_QATOMICtemplate <typename T>inline T qAtomicSetPtr(volatile T *ptr, T newval){ return static_cast<T>(q_atomic_set_ptr(ptr, newval)); }// High-level atomic integer operationsclass QAtomic : public QBasicAtomic{public:    inline QAtomic(int x = 0)    { init(x); }    inline QAtomic(const QAtomic &copy)    { init(copy); }    inline QAtomic &operator=(int x)    {        (void) QBasicAtomic::operator=(x);        return *this;    }    inline QAtomic &operator=(const QAtomic &copy)    {        (void) QBasicAtomic::operator=(copy);        return *this;    }};// High-level atomic pointer operationstemplate <typename T>class QAtomicPointer : public QBasicAtomicPointer<T>{public:    inline QAtomicPointer(T *t = 0)    { init(t); }    inline QAtomicPointer(const QAtomicPointer<T> &copy)    { init(copy); }    inline QAtomicPointer<T> &operator=(T *t)    {        (void) QBasicAtomicPointer<T>::operator=(t);        return *this;    }    inline QAtomicPointer<T> &operator=(const QAtomicPointer<T> &copy)    {        (void) QBasicAtomicPointer<T>::operator=(copy);        return *this;    }};/*!    This is a helper for the assignment operators of implicitly    shared classes. Your assignment operator should look like this:    \code        MyClass &MyClass:operator=(const MyClass &other)        { qAtomicAssign(d, other.d); return *this; }    \endcode*/template <typename T>inline void qAtomicAssign(T *&d, T *x){    x->ref.ref();    x = qAtomicSetPtr(&d, x);    if (!x->ref.deref())        delete x;}/*! \internal    \overload*/template <typename T>inline void qAtomicAssign(QBasicAtomicPointer<T> &d, T *x){    x->ref.ref();    x = d.exchange(x);    if (!x->ref.deref())        delete x;}/*! \internal    \overload*/template <typename T>inline void qAtomicAssign(QBasicAtomicPointer<T> &d, const QBasicAtomicPointer<T> &x){ qAtomicAssign<T>(d, x); }/*! \internal    This is a helper for the detach function. Your private class needs    a copy constructor which copies the members and sets the refcount    to 1. After that, your detach function should look like this:    \code        void MyClass::detach()        { qAtomicDetach(d); }    \endcode*/template <typename T>inline void qAtomicDetach(T *&d){    if (d->ref == 1)        return;    T *x = new T(*d);    x = qAtomicSetPtr(&d, x);    if (!x->ref.deref())        delete x;}/*! \internal    \overload*/template <typename T>inline void qAtomicDetach(QBasicAtomicPointer<T> &d){    if (d->ref == 1)        return;    T *x = new T(*d);    x = d.exchange(x);    if (!x->ref.deref())        delete x;}QT_END_HEADER#endif // QATOMIC_H

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区精品久久91| 久久精品国产亚洲aⅴ| 国产一区二区在线观看免费| 欧美日韩高清影院| 麻豆国产欧美一区二区三区| 精品美女在线观看| a亚洲天堂av| 免费人成网站在线观看欧美高清| 日韩丝袜美女视频| 一本大道久久a久久综合| 午夜私人影院久久久久| 久久亚洲精品国产精品紫薇 | 日本一区二区免费在线| 99久久精品99国产精品| 青青草伊人久久| 国产精品妹子av| 欧美成人video| 日本韩国一区二区三区| 国产精品一区二区久久精品爱涩| 一色桃子久久精品亚洲| 日韩欧美123| 欧美在线免费播放| 91蜜桃网址入口| 成人福利视频网站| 日本怡春院一区二区| 亚洲人吸女人奶水| 最新欧美精品一区二区三区| 日韩精品一区二区三区视频播放 | 2023国产精品| 日韩一区二区三区三四区视频在线观看| 国产成人h网站| 国产一区二区三区四区五区入口| 天天综合网天天综合色| 亚洲黄色av一区| 午夜精品福利久久久| 亚洲国产你懂的| 亚洲18女电影在线观看| 亚洲第四色夜色| 日本午夜一本久久久综合| 亚洲一区二区高清| 午夜精品aaa| 精品无人码麻豆乱码1区2区 | 国产精品亲子乱子伦xxxx裸| 欧美成人女星排名| 国产欧美一区二区三区在线老狼| 国产三级一区二区三区| 国产精品免费看片| 综合久久久久久久| 午夜精品在线看| 蜜桃视频第一区免费观看| 国产一区二区在线观看免费| 国产91精品精华液一区二区三区 | 天天综合日日夜夜精品| 免费成人你懂的| 高清视频一区二区| 欧美性xxxxx极品少妇| 欧美α欧美αv大片| 亚洲私人黄色宅男| 在线免费不卡电影| 国产亚洲精品aa| 日韩理论电影院| 国产成人a级片| 精品三级av在线| 亚洲chinese男男1069| 99vv1com这只有精品| 久久精品一区二区| 国产美女娇喘av呻吟久久| 7777精品久久久大香线蕉| 亚洲欧洲在线观看av| 国产成人免费xxxxxxxx| 4hu四虎永久在线影院成人| 亚洲成年人网站在线观看| 欧美性猛片aaaaaaa做受| 中文字幕日韩av资源站| 久久国产精品无码网站| 日韩一区二区三区精品视频| 亚洲 欧美综合在线网络| 欧美亚洲综合另类| 性久久久久久久久| 在线不卡一区二区| 美女爽到高潮91| 精品国产乱码久久久久久久久 | 日韩一区二区精品| 蜜乳av一区二区| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | av午夜一区麻豆| 偷拍亚洲欧洲综合| 日韩欧美国产综合| 国产成人日日夜夜| 亚洲综合免费观看高清在线观看| 欧洲一区在线观看| 国产美女一区二区三区| 亚洲男人的天堂网| 欧美成人性福生活免费看| 91论坛在线播放| 国产在线精品一区二区不卡了| 中文字幕一区二区三区四区| 欧美性videosxxxxx| 国产成人免费在线| 美女视频黄免费的久久| 亚洲免费观看高清在线观看| 91精品蜜臀在线一区尤物| 99国产精品一区| 国产黄人亚洲片| 免费久久99精品国产| 亚洲精品写真福利| 中文字幕巨乱亚洲| 久久久精品国产免大香伊 | 在线不卡免费欧美| 欧美日韩视频在线观看一区二区三区 | 免费成人在线观看| 日韩和欧美一区二区三区| 一区二区在线看| 亚洲精选在线视频| 中文字幕日韩一区二区| 国产精品天干天干在观线| 精品国产乱码久久久久久老虎| 日韩一级二级三级精品视频| 欧美日韩免费在线视频| 91精品国产综合久久福利软件| 欧美午夜精品久久久| 9191精品国产综合久久久久久 | 欧美一区二区日韩| 日韩欧美国产成人一区二区| 精品理论电影在线| 日本一区二区三区视频视频| 欧美高清在线精品一区| 国产日韩欧美电影| 亚洲精品免费电影| 美女久久久精品| 风间由美一区二区三区在线观看 | 一区二区在线观看av| 亚洲成人在线网站| 国产伦理精品不卡| 91免费版pro下载短视频| 91精品国产91久久综合桃花| 欧美日韩dvd在线观看| 国产亚洲1区2区3区| 午夜一区二区三区视频| 精品一区二区三区免费观看| 99精品视频在线播放观看| 欧美高清精品3d| 国产精品国产馆在线真实露脸 | **欧美大码日韩| 久久精品国产亚洲高清剧情介绍| 99久久99久久精品国产片果冻| 欧美日韩国产系列| 亚洲精品国产成人久久av盗摄| 蜜桃视频在线观看一区二区| 色婷婷久久综合| 亚洲国产电影在线观看| 麻豆精品一区二区| 91精品视频网| 日产国产欧美视频一区精品| 日本道精品一区二区三区| 国产精品五月天| 成人免费高清视频在线观看| 国产婷婷一区二区| 国产一区 二区 三区一级| 日韩精品最新网址| 久久99精品一区二区三区| 日韩精品一区在线| 国产精品1区2区3区在线观看| 26uuu欧美日本| 国产麻豆日韩欧美久久| 国产亚洲一区二区三区| 久久精品噜噜噜成人88aⅴ| 久久久三级国产网站| 成人免费va视频| 亚洲午夜精品网| 欧美一级二级在线观看| 国产传媒日韩欧美成人| 中文字幕在线不卡国产视频| 91免费国产在线| 日本aⅴ免费视频一区二区三区| 欧美成人一区二区三区片免费| 国产精品小仙女| 日韩精品亚洲一区| 日本一区二区三区在线观看| 欧美男男青年gay1069videost| 蜜桃精品视频在线观看| 亚洲色图欧美在线| 2017欧美狠狠色| 欧美日韩小视频| 欧美亚洲一区二区在线观看| 日本女人一区二区三区| 国产精品乱码妇女bbbb| 欧美一二三在线| 欧美综合色免费| 国产成人啪免费观看软件| 亚洲乱码日产精品bd| 中文字幕精品三区| 欧美tickling网站挠脚心| 欧美电影在线免费观看| 97久久精品人人爽人人爽蜜臀| 狠狠色综合播放一区二区| 水野朝阳av一区二区三区| 经典三级一区二区| 日韩av一区二区在线影视| 亚洲一区视频在线|