From b88573e29b1a7e5201dab7d894df41bb5ebe6c37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Mon, 2 May 2016 19:42:27 +0200 Subject: Collate conversion functions for Core Foundation/Foundation types Makes it easier to apply similar changes across all related functions, and to implement functions for new types by having the previous approaches available in one place. Change-Id: I3f0590d67d0e6deb1c6c856ab1de96b55b6af058 Reviewed-by: Jake Petroules --- src/corelib/io/io.pri | 1 - src/corelib/io/qurl_mac.mm | 97 ------ src/corelib/kernel/kernel.pri | 3 +- src/corelib/kernel/qcore_foundation.mm | 421 +++++++++++++++++++++++ src/corelib/plugin/plugin.pri | 4 - src/corelib/plugin/quuid_darwin.mm | 104 ------ src/corelib/tools/qbytearray_mac.mm | 177 ---------- src/corelib/tools/qdatetime_mac.mm | 103 ------ src/corelib/tools/qstring_mac.mm | 112 ------ src/corelib/tools/tools.pri | 3 - src/tools/bootstrap/bootstrap.pro | 2 +- tests/auto/corelib/tools/qstring/tst_qstring.cpp | 2 +- 12 files changed, 425 insertions(+), 604 deletions(-) delete mode 100644 src/corelib/io/qurl_mac.mm create mode 100644 src/corelib/kernel/qcore_foundation.mm delete mode 100644 src/corelib/plugin/quuid_darwin.mm delete mode 100644 src/corelib/tools/qbytearray_mac.mm delete mode 100644 src/corelib/tools/qdatetime_mac.mm delete mode 100644 src/corelib/tools/qstring_mac.mm diff --git a/src/corelib/io/io.pri b/src/corelib/io/io.pri index 0b3a28944c..eb9471b502 100644 --- a/src/corelib/io/io.pri +++ b/src/corelib/io/io.pri @@ -143,7 +143,6 @@ win32 { } !nacl:mac: { SOURCES += io/qsettings_mac.cpp - OBJECTIVE_SOURCES += io/qurl_mac.mm } freebsd: LIBS_PRIVATE += -lutil # qlockfile_unix.cpp requires this mac { diff --git a/src/corelib/io/qurl_mac.mm b/src/corelib/io/qurl_mac.mm deleted file mode 100644 index 89c1b50b31..0000000000 --- a/src/corelib/io/qurl_mac.mm +++ /dev/null @@ -1,97 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtCore module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qurl.h" - -#ifdef Q_OS_MAC -#include -#endif - -QT_BEGIN_NAMESPACE - -/*! \fn QUrl QUrl::fromCFURL(CFURLRef url) - \since 5.2 - - Constructs a QUrl containing a copy of the CFURL \a url. -*/ -QUrl QUrl::fromCFURL(CFURLRef url) -{ - return QUrl(QString::fromCFString(CFURLGetString(url))); -} - -/*! \fn CFURLRef QUrl::toCFURL() const - \since 5.2 - - Creates a CFURL from a QUrl. The caller owns the CFURL and is - responsible for releasing it. -*/ -CFURLRef QUrl::toCFURL() const -{ - CFURLRef url = 0; - CFStringRef str = toString(FullyEncoded).toCFString(); - if (str) { - url = CFURLCreateWithString(0, str, 0); - CFRelease(str); - } - return url; -} - -/*! - \fn QUrl QUrl::fromNSURL(const NSURL *url) - \since 5.2 - - Constructs a QUrl containing a copy of the NSURL \a url. -*/ -QUrl QUrl::fromNSURL(const NSURL *url) -{ - return QUrl(QString::fromNSString([url absoluteString])); -} - -/*! - \fn NSURL* QUrl::toNSURL() const - \since 5.2 - - Creates a NSURL from a QUrl. The NSURL is autoreleased. -*/ -NSURL *QUrl::toNSURL() const -{ - return [NSURL URLWithString:toString(FullyEncoded).toNSString()]; -} - -QT_END_NAMESPACE diff --git a/src/corelib/kernel/kernel.pri b/src/corelib/kernel/kernel.pri index 60252a51ed..991b73812a 100644 --- a/src/corelib/kernel/kernel.pri +++ b/src/corelib/kernel/kernel.pri @@ -101,7 +101,8 @@ mac { SOURCES += \ kernel/qcfsocketnotifier.cpp \ kernel/qcoreapplication_mac.cpp \ - kernel/qcore_mac.cpp + kernel/qcore_mac.cpp \ + kernel/qcore_foundation.mm OBJECTIVE_SOURCES += \ kernel/qcore_mac_objc.mm \ diff --git a/src/corelib/kernel/qcore_foundation.mm b/src/corelib/kernel/qcore_foundation.mm new file mode 100644 index 0000000000..9a18b253d7 --- /dev/null +++ b/src/corelib/kernel/qcore_foundation.mm @@ -0,0 +1,421 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2014 Samuel Gaist +** Copyright (C) 2014 Petroules Corporation. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include +#include + +#import + +QT_BEGIN_NAMESPACE + +/*! \fn QByteArray QByteArray::fromCFData(CFDataRef data) + \since 5.3 + + Constructs a new QByteArray containing a copy of the CFData \a data. + + \sa fromRawCFData(), fromRawData(), toRawCFData(), toCFData() +*/ +QByteArray QByteArray::fromCFData(CFDataRef data) +{ + if (!data) + return QByteArray(); + + return QByteArray(reinterpret_cast(CFDataGetBytePtr(data)), CFDataGetLength(data)); +} + +/*! \fn QByteArray QByteArray::fromRawCFData(CFDataRef data) + \since 5.3 + + Constructs a QByteArray that uses the bytes of the CFData \a data. + + The \a data's bytes are not copied. + + The caller guarantees that the CFData will not be deleted + or modified as long as this QByteArray object exists. + + \sa fromCFData(), fromRawData(), toRawCFData(), toCFData() +*/ +QByteArray QByteArray::fromRawCFData(CFDataRef data) +{ + if (!data) + return QByteArray(); + + return QByteArray::fromRawData(reinterpret_cast(CFDataGetBytePtr(data)), CFDataGetLength(data)); +} + +/*! \fn CFDataRef QByteArray::toCFData() const + \since 5.3 + + Creates a CFData from a QByteArray. The caller owns the CFData object + and is responsible for releasing it. + + \sa toRawCFData(), fromCFData(), fromRawCFData(), fromRawData() +*/ +CFDataRef QByteArray::toCFData() const +{ + return CFDataCreate(kCFAllocatorDefault, reinterpret_cast(data()), length()); +} + +/*! \fn CFDataRef QByteArray::toRawCFData() const + \since 5.3 + + Constructs a CFData that uses the bytes of the QByteArray. + + The QByteArray's bytes are not copied. + + The caller guarantees that the QByteArray will not be deleted + or modified as long as this CFData object exists. + + \sa toCFData(), fromRawCFData(), fromCFData(), fromRawData() +*/ + +CFDataRef QByteArray::toRawCFData() const +{ + return CFDataCreateWithBytesNoCopy(kCFAllocatorDefault, reinterpret_cast(data()), + length(), kCFAllocatorNull); +} + +/*! \fn QByteArray QByteArray::fromNSData(const NSData *data) + \since 5.3 + + Constructs a new QByteArray containing a copy of the NSData \a data. + + \sa fromRawNSData(), fromRawData(), toNSData(), toRawNSData() +*/ +QByteArray QByteArray::fromNSData(const NSData *data) +{ + if (!data) + return QByteArray(); + return QByteArray(reinterpret_cast([data bytes]), [data length]); +} + +/*! \fn QByteArray QByteArray::fromRawNSData(const NSData *data) + \since 5.3 + + Constructs a QByteArray that uses the bytes of the NSData \a data. + + The \a data's bytes are not copied. + + The caller guarantees that the NSData will not be deleted + or modified as long as this QByteArray object exists. + + \sa fromNSData(), fromRawData(), toRawNSData(), toNSData() +*/ +QByteArray QByteArray::fromRawNSData(const NSData *data) +{ + if (!data) + return QByteArray(); + return QByteArray::fromRawData(reinterpret_cast([data bytes]), [data length]); +} + +/*! \fn NSData QByteArray::toNSData() const + \since 5.3 + + Creates a NSData from a QByteArray. The NSData object is autoreleased. + + \sa fromNSData(), fromRawNSData(), fromRawData(), toRawNSData() +*/ +NSData *QByteArray::toNSData() const +{ + return [NSData dataWithBytes:constData() length:size()]; +} + +/*! \fn NSData QByteArray::toRawNSData() const + \since 5.3 + + Constructs a NSData that uses the bytes of the QByteArray. + + The QByteArray's bytes are not copied. + + The caller guarantees that the QByteArray will not be deleted + or modified as long as this NSData object exists. + + \sa fromRawNSData(), fromNSData(), fromRawData(), toNSData() +*/ +NSData *QByteArray::toRawNSData() const +{ + // const_cast is fine here because NSData is immutable thus will never modify bytes we're giving it + return [NSData dataWithBytesNoCopy:const_cast(constData()) length:size() freeWhenDone:NO]; +} + +// ---------------------------------------------------------------------------- + +/*! \fn QString QString::fromCFString(CFStringRef string) + \since 5.2 + + Constructs a new QString containing a copy of the \a string CFString. + + \note this function is only available on OS X and iOS. +*/ +QString QString::fromCFString(CFStringRef string) +{ + if (!string) + return QString(); + CFIndex length = CFStringGetLength(string); + + // Fast path: CFStringGetCharactersPtr does not copy but may + // return null for any and no reason. + const UniChar *chars = CFStringGetCharactersPtr(string); + if (chars) + return QString(reinterpret_cast(chars), length); + + QString ret(length, Qt::Uninitialized); + CFStringGetCharacters(string, CFRangeMake(0, length), reinterpret_cast(ret.data())); + return ret; +} + +/*! \fn CFStringRef QString::toCFString() const + \since 5.2 + + Creates a CFString from a QString. The caller owns the CFString and is + responsible for releasing it. + + \note this function is only available on OS X and iOS. +*/ +CFStringRef QString::toCFString() const +{ + return CFStringCreateWithCharacters(0, reinterpret_cast(unicode()), length()); +} + +/*! \fn QString QString::fromNSString(const NSString *string) + \since 5.2 + + Constructs a new QString containing a copy of the \a string NSString. + + \note this function is only available on OS X and iOS. +*/ +QString QString::fromNSString(const NSString *string) +{ + if (!string) + return QString(); + QString qstring; + qstring.resize([string length]); + [string getCharacters: reinterpret_cast(qstring.data()) range: NSMakeRange(0, [string length])]; + return qstring; +} + +/*! \fn NSString QString::toNSString() const + \since 5.2 + + Creates a NSString from a QString. The NSString is autoreleased. + + \note this function is only available on OS X and iOS. +*/ +NSString *QString::toNSString() const +{ + return [NSString stringWithCharacters: reinterpret_cast(unicode()) length: length()]; +} + +// ---------------------------------------------------------------------------- + +/*! \fn QUuid QUuid::fromCFUUID(CFUUIDRef uuid) + \since 5.7 + + Constructs a new QUuid containing a copy of the \a uuid CFUUID. + + \note this function is only available on Apple platforms. +*/ +QUuid QUuid::fromCFUUID(CFUUIDRef uuid) +{ + if (!uuid) + return QUuid(); + const CFUUIDBytes bytes = CFUUIDGetUUIDBytes(uuid); + return QUuid::fromRfc4122(QByteArray::fromRawData(reinterpret_cast(&bytes), sizeof(bytes))); +} + +/*! \fn CFUUIDRef QUuid::toCFUUID() const + \since 5.7 + + Creates a CFUUID from a QUuid. The caller owns the CFUUID and is + responsible for releasing it. + + \note this function is only available on Apple platforms. +*/ +CFUUIDRef QUuid::toCFUUID() const +{ + const QByteArray bytes = toRfc4122(); + return CFUUIDCreateFromUUIDBytes(0, *reinterpret_cast(bytes.constData())); +} + +/*! \fn QUuid QUuid::fromNSUUID(const NSUUID *uuid) + \since 5.7 + + Constructs a new QUuid containing a copy of the \a uuid NSUUID. + + \note this function is only available on Apple platforms. +*/ +QUuid QUuid::fromNSUUID(const NSUUID *uuid) +{ + if (!uuid) + return QUuid(); + uuid_t bytes; + [uuid getUUIDBytes:bytes]; + return QUuid::fromRfc4122(QByteArray::fromRawData(reinterpret_cast(bytes), sizeof(bytes))); +} + +/*! \fn NSUUID QUuid::toNSUUID() const + \since 5.7 + + Creates a NSUUID from a QUuid. The NSUUID is autoreleased. + + \note this function is only available on Apple platforms. +*/ +NSUUID *QUuid::toNSUUID() const +{ + const QByteArray bytes = toRfc4122(); + return [[[NSUUID alloc] initWithUUIDBytes:*reinterpret_cast(bytes.constData())] autorelease]; +} + +// ---------------------------------------------------------------------------- + + +/*! \fn QUrl QUrl::fromCFURL(CFURLRef url) + \since 5.2 + + Constructs a QUrl containing a copy of the CFURL \a url. +*/ +QUrl QUrl::fromCFURL(CFURLRef url) +{ + return QUrl(QString::fromCFString(CFURLGetString(url))); +} + +/*! \fn CFURLRef QUrl::toCFURL() const + \since 5.2 + + Creates a CFURL from a QUrl. The caller owns the CFURL and is + responsible for releasing it. +*/ +CFURLRef QUrl::toCFURL() const +{ + CFURLRef url = 0; + CFStringRef str = toString(FullyEncoded).toCFString(); + if (str) { + url = CFURLCreateWithString(0, str, 0); + CFRelease(str); + } + return url; +} + +/*! + \fn QUrl QUrl::fromNSURL(const NSURL *url) + \since 5.2 + + Constructs a QUrl containing a copy of the NSURL \a url. +*/ +QUrl QUrl::fromNSURL(const NSURL *url) +{ + return QUrl(QString::fromNSString([url absoluteString])); +} + +/*! + \fn NSURL* QUrl::toNSURL() const + \since 5.2 + + Creates a NSURL from a QUrl. The NSURL is autoreleased. +*/ +NSURL *QUrl::toNSURL() const +{ + return [NSURL URLWithString:toString(FullyEncoded).toNSString()]; +} + +// ---------------------------------------------------------------------------- + + +/*! \fn QDateTime QDateTime::fromCFDate(CFDateRef date) + \since 5.5 + + Constructs a new QDateTime containing a copy of the CFDate \a date. + + \sa toCFDate() +*/ +QDateTime QDateTime::fromCFDate(CFDateRef date) +{ + if (!date) + return QDateTime(); + return QDateTime::fromMSecsSinceEpoch(static_cast((CFDateGetAbsoluteTime(date) + + kCFAbsoluteTimeIntervalSince1970) * 1000)); +} + +/*! \fn CFDateRef QDateTime::toCFDate() const + \since 5.5 + + Creates a CFDate from a QDateTime. The caller owns the CFDate object + and is responsible for releasing it. + + \sa fromCFDate() +*/ +CFDateRef QDateTime::toCFDate() const +{ + return CFDateCreate(kCFAllocatorDefault, (static_cast(toMSecsSinceEpoch()) + / 1000) - kCFAbsoluteTimeIntervalSince1970); +} + +/*! \fn QDateTime QDateTime::fromNSDate(const NSDate *date) + \since 5.5 + + Constructs a new QDateTime containing a copy of the NSDate \a date. + + \sa toNSDate() +*/ +QDateTime QDateTime::fromNSDate(const NSDate *date) +{ + if (!date) + return QDateTime(); + return QDateTime::fromMSecsSinceEpoch(static_cast([date timeIntervalSince1970] * 1000)); +} + +/*! \fn NSDate QDateTime::toNSDate() const + \since 5.5 + + Creates an NSDate from a QDateTime. The NSDate object is autoreleased. + + \sa fromNSDate() +*/ +NSDate *QDateTime::toNSDate() const +{ + return [NSDate + dateWithTimeIntervalSince1970:static_cast(toMSecsSinceEpoch()) / 1000]; +} + +QT_END_NAMESPACE diff --git a/src/corelib/plugin/plugin.pri b/src/corelib/plugin/plugin.pri index 544dd41742..473480eb55 100644 --- a/src/corelib/plugin/plugin.pri +++ b/src/corelib/plugin/plugin.pri @@ -35,8 +35,4 @@ integrity { SOURCES += plugin/qlibrary_unix.cpp } -darwin { - OBJECTIVE_SOURCES += plugin/quuid_darwin.mm -} - !no-libdl: LIBS_PRIVATE += $$QMAKE_LIBS_DYNLOAD diff --git a/src/corelib/plugin/quuid_darwin.mm b/src/corelib/plugin/quuid_darwin.mm deleted file mode 100644 index aa67e0b7dc..0000000000 --- a/src/corelib/plugin/quuid_darwin.mm +++ /dev/null @@ -1,104 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtCore module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "quuid.h" - -#import - -QT_BEGIN_NAMESPACE - -/*! \fn QUuid QUuid::fromCFUUID(CFUUIDRef uuid) - \since 5.7 - - Constructs a new QUuid containing a copy of the \a uuid CFUUID. - - \note this function is only available on Apple platforms. -*/ -QUuid QUuid::fromCFUUID(CFUUIDRef uuid) -{ - if (!uuid) - return QUuid(); - const CFUUIDBytes bytes = CFUUIDGetUUIDBytes(uuid); - return QUuid::fromRfc4122(QByteArray::fromRawData(reinterpret_cast(&bytes), sizeof(bytes))); -} - -/*! \fn CFUUIDRef QUuid::toCFUUID() const - \since 5.7 - - Creates a CFUUID from a QUuid. The caller owns the CFUUID and is - responsible for releasing it. - - \note this function is only available on Apple platforms. -*/ -CFUUIDRef QUuid::toCFUUID() const -{ - const QByteArray bytes = toRfc4122(); - return CFUUIDCreateFromUUIDBytes(0, *reinterpret_cast(bytes.constData())); -} - -/*! \fn QUuid QUuid::fromNSUUID(const NSUUID *uuid) - \since 5.7 - - Constructs a new QUuid containing a copy of the \a uuid NSUUID. - - \note this function is only available on Apple platforms. -*/ -QUuid QUuid::fromNSUUID(const NSUUID *uuid) -{ - if (!uuid) - return QUuid(); - uuid_t bytes; - [uuid getUUIDBytes:bytes]; - return QUuid::fromRfc4122(QByteArray::fromRawData(reinterpret_cast(bytes), sizeof(bytes))); -} - -/*! \fn NSUUID QUuid::toNSUUID() const - \since 5.7 - - Creates a NSUUID from a QUuid. The NSUUID is autoreleased. - - \note this function is only available on Apple platforms. -*/ -NSUUID *QUuid::toNSUUID() const -{ - const QByteArray bytes = toRfc4122(); - return [[[NSUUID alloc] initWithUUIDBytes:*reinterpret_cast(bytes.constData())] autorelease]; -} - -QT_END_NAMESPACE diff --git a/src/corelib/tools/qbytearray_mac.mm b/src/corelib/tools/qbytearray_mac.mm deleted file mode 100644 index aada473f92..0000000000 --- a/src/corelib/tools/qbytearray_mac.mm +++ /dev/null @@ -1,177 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2014 Samuel Gaist -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtCore module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qbytearray.h" - -#import - -QT_BEGIN_NAMESPACE - -/*! \fn QByteArray QByteArray::fromCFData(CFDataRef data) - \since 5.3 - - Constructs a new QByteArray containing a copy of the CFData \a data. - - \sa fromRawCFData(), fromRawData(), toRawCFData(), toCFData() -*/ -QByteArray QByteArray::fromCFData(CFDataRef data) -{ - if (!data) - return QByteArray(); - - return QByteArray(reinterpret_cast(CFDataGetBytePtr(data)), CFDataGetLength(data)); -} - -/*! \fn QByteArray QByteArray::fromRawCFData(CFDataRef data) - \since 5.3 - - Constructs a QByteArray that uses the bytes of the CFData \a data. - - The \a data's bytes are not copied. - - The caller guarantees that the CFData will not be deleted - or modified as long as this QByteArray object exists. - - \sa fromCFData(), fromRawData(), toRawCFData(), toCFData() -*/ -QByteArray QByteArray::fromRawCFData(CFDataRef data) -{ - if (!data) - return QByteArray(); - - return QByteArray::fromRawData(reinterpret_cast(CFDataGetBytePtr(data)), CFDataGetLength(data)); -} - -/*! \fn CFDataRef QByteArray::toCFData() const - \since 5.3 - - Creates a CFData from a QByteArray. The caller owns the CFData object - and is responsible for releasing it. - - \sa toRawCFData(), fromCFData(), fromRawCFData(), fromRawData() -*/ -CFDataRef QByteArray::toCFData() const -{ - return CFDataCreate(kCFAllocatorDefault, reinterpret_cast(data()), length()); -} - -/*! \fn CFDataRef QByteArray::toRawCFData() const - \since 5.3 - - Constructs a CFData that uses the bytes of the QByteArray. - - The QByteArray's bytes are not copied. - - The caller guarantees that the QByteArray will not be deleted - or modified as long as this CFData object exists. - - \sa toCFData(), fromRawCFData(), fromCFData(), fromRawData() -*/ - -CFDataRef QByteArray::toRawCFData() const -{ - return CFDataCreateWithBytesNoCopy(kCFAllocatorDefault, reinterpret_cast(data()), - length(), kCFAllocatorNull); -} - -/*! \fn QByteArray QByteArray::fromNSData(const NSData *data) - \since 5.3 - - Constructs a new QByteArray containing a copy of the NSData \a data. - - \sa fromRawNSData(), fromRawData(), toNSData(), toRawNSData() -*/ -QByteArray QByteArray::fromNSData(const NSData *data) -{ - if (!data) - return QByteArray(); - return QByteArray(reinterpret_cast([data bytes]), [data length]); -} - -/*! \fn QByteArray QByteArray::fromRawNSData(const NSData *data) - \since 5.3 - - Constructs a QByteArray that uses the bytes of the NSData \a data. - - The \a data's bytes are not copied. - - The caller guarantees that the NSData will not be deleted - or modified as long as this QByteArray object exists. - - \sa fromNSData(), fromRawData(), toRawNSData(), toNSData() -*/ -QByteArray QByteArray::fromRawNSData(const NSData *data) -{ - if (!data) - return QByteArray(); - return QByteArray::fromRawData(reinterpret_cast([data bytes]), [data length]); -} - -/*! \fn NSData QByteArray::toNSData() const - \since 5.3 - - Creates a NSData from a QByteArray. The NSData object is autoreleased. - - \sa fromNSData(), fromRawNSData(), fromRawData(), toRawNSData() -*/ -NSData *QByteArray::toNSData() const -{ - return [NSData dataWithBytes:constData() length:size()]; -} - -/*! \fn NSData QByteArray::toRawNSData() const - \since 5.3 - - Constructs a NSData that uses the bytes of the QByteArray. - - The QByteArray's bytes are not copied. - - The caller guarantees that the QByteArray will not be deleted - or modified as long as this NSData object exists. - - \sa fromRawNSData(), fromNSData(), fromRawData(), toNSData() -*/ -NSData *QByteArray::toRawNSData() const -{ - // const_cast is fine here because NSData is immutable thus will never modify bytes we're giving it - return [NSData dataWithBytesNoCopy:const_cast(constData()) length:size() freeWhenDone:NO]; -} - -QT_END_NAMESPACE diff --git a/src/corelib/tools/qdatetime_mac.mm b/src/corelib/tools/qdatetime_mac.mm deleted file mode 100644 index c03c57d9f1..0000000000 --- a/src/corelib/tools/qdatetime_mac.mm +++ /dev/null @@ -1,103 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Copyright (C) 2014 Petroules Corporation. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtCore module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qdatetime.h" - -#import - -QT_BEGIN_NAMESPACE - -/*! \fn QDateTime QDateTime::fromCFDate(CFDateRef date) - \since 5.5 - - Constructs a new QDateTime containing a copy of the CFDate \a date. - - \sa toCFDate() -*/ -QDateTime QDateTime::fromCFDate(CFDateRef date) -{ - if (!date) - return QDateTime(); - return QDateTime::fromMSecsSinceEpoch(static_cast((CFDateGetAbsoluteTime(date) - + kCFAbsoluteTimeIntervalSince1970) * 1000)); -} - -/*! \fn CFDateRef QDateTime::toCFDate() const - \since 5.5 - - Creates a CFDate from a QDateTime. The caller owns the CFDate object - and is responsible for releasing it. - - \sa fromCFDate() -*/ -CFDateRef QDateTime::toCFDate() const -{ - return CFDateCreate(kCFAllocatorDefault, (static_cast(toMSecsSinceEpoch()) - / 1000) - kCFAbsoluteTimeIntervalSince1970); -} - -/*! \fn QDateTime QDateTime::fromNSDate(const NSDate *date) - \since 5.5 - - Constructs a new QDateTime containing a copy of the NSDate \a date. - - \sa toNSDate() -*/ -QDateTime QDateTime::fromNSDate(const NSDate *date) -{ - if (!date) - return QDateTime(); - return QDateTime::fromMSecsSinceEpoch(static_cast([date timeIntervalSince1970] * 1000)); -} - -/*! \fn NSDate QDateTime::toNSDate() const - \since 5.5 - - Creates an NSDate from a QDateTime. The NSDate object is autoreleased. - - \sa fromNSDate() -*/ -NSDate *QDateTime::toNSDate() const -{ - return [NSDate - dateWithTimeIntervalSince1970:static_cast(toMSecsSinceEpoch()) / 1000]; -} - -QT_END_NAMESPACE diff --git a/src/corelib/tools/qstring_mac.mm b/src/corelib/tools/qstring_mac.mm deleted file mode 100644 index 81cbb91e6c..0000000000 --- a/src/corelib/tools/qstring_mac.mm +++ /dev/null @@ -1,112 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtCore module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qstring.h" - -#import - -QT_BEGIN_NAMESPACE - -/*! \fn QString QString::fromCFString(CFStringRef string) - \since 5.2 - - Constructs a new QString containing a copy of the \a string CFString. - - \note this function is only available on OS X and iOS. -*/ -QString QString::fromCFString(CFStringRef string) -{ - if (!string) - return QString(); - CFIndex length = CFStringGetLength(string); - - // Fast path: CFStringGetCharactersPtr does not copy but may - // return null for any and no reason. - const UniChar *chars = CFStringGetCharactersPtr(string); - if (chars) - return QString(reinterpret_cast(chars), length); - - QString ret(length, Qt::Uninitialized); - CFStringGetCharacters(string, CFRangeMake(0, length), reinterpret_cast(ret.data())); - return ret; -} - -/*! \fn CFStringRef QString::toCFString() const - \since 5.2 - - Creates a CFString from a QString. The caller owns the CFString and is - responsible for releasing it. - - \note this function is only available on OS X and iOS. -*/ -CFStringRef QString::toCFString() const -{ - return CFStringCreateWithCharacters(0, reinterpret_cast(unicode()), length()); -} - -/*! \fn QString QString::fromNSString(const NSString *string) - \since 5.2 - - Constructs a new QString containing a copy of the \a string NSString. - - \note this function is only available on OS X and iOS. -*/ -QString QString::fromNSString(const NSString *string) -{ - if (!string) - return QString(); - QString qstring; - qstring.resize([string length]); - [string getCharacters: reinterpret_cast(qstring.data()) range: NSMakeRange(0, [string length])]; - return qstring; -} - -/*! \fn NSString QString::toNSString() const - \since 5.2 - - Creates a NSString from a QString. The NSString is autoreleased. - - \note this function is only available on OS X and iOS. -*/ -NSString *QString::toNSString() const -{ - return [NSString stringWithCharacters: reinterpret_cast(unicode()) length: length()]; -} - -QT_END_NAMESPACE diff --git a/src/corelib/tools/tools.pri b/src/corelib/tools/tools.pri index 07200b1249..de86a60616 100644 --- a/src/corelib/tools/tools.pri +++ b/src/corelib/tools/tools.pri @@ -133,9 +133,6 @@ false: SOURCES += $$NO_PCH_SOURCES # Hack for QtCreator SOURCES += tools/qelapsedtimer_mac.cpp OBJECTIVE_SOURCES += tools/qlocale_mac.mm \ tools/qtimezoneprivate_mac.mm \ - tools/qstring_mac.mm \ - tools/qbytearray_mac.mm \ - tools/qdatetime_mac.mm } else:android { SOURCES += tools/qelapsedtimer_unix.cpp tools/qlocale_unix.cpp tools/qtimezoneprivate_android.cpp diff --git a/src/tools/bootstrap/bootstrap.pro b/src/tools/bootstrap/bootstrap.pro index 1bf7a47efb..2eb8837b4c 100644 --- a/src/tools/bootstrap/bootstrap.pro +++ b/src/tools/bootstrap/bootstrap.pro @@ -123,7 +123,7 @@ mac { macx { OBJECTIVE_SOURCES += \ - ../../corelib/tools/qstring_mac.mm \ + ../../corelib/kernel/qcore_foundation.mm \ ../../corelib/io/qstandardpaths_mac.mm } else:unix { SOURCES += \ diff --git a/tests/auto/corelib/tools/qstring/tst_qstring.cpp b/tests/auto/corelib/tools/qstring/tst_qstring.cpp index 9dc564a361..641ca0d25e 100644 --- a/tests/auto/corelib/tools/qstring/tst_qstring.cpp +++ b/tests/auto/corelib/tools/qstring/tst_qstring.cpp @@ -1192,7 +1192,7 @@ void tst_QString::macTypes() #ifndef Q_OS_MAC QSKIP("This is a Mac-only test"); #else - extern void tst_QString_macTypes(); // in qstring_mac.mm + extern void tst_QString_macTypes(); // in qcore_foundation.mm tst_QString_macTypes(); #endif } -- cgit v1.2.3