OSDN Git Service

inline some memory functions
authorIvailo Monev <xakepa10@gmail.com>
Sun, 17 Jan 2016 22:41:30 +0000 (00:41 +0200)
committerIvailo Monev <xakepa10@gmail.com>
Sun, 17 Jan 2016 22:41:30 +0000 (00:41 +0200)
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
src/core/global/global.cmake
src/core/global/qglobal.cpp
src/core/global/qglobal.h
src/core/global/qmalloc.cpp [deleted file]
src/shared/bootstrap.cmake

index c3271f0..6ad4f43 100644 (file)
@@ -13,7 +13,6 @@ set(CORE_SOURCES
     ${CORE_SOURCES}
     ${CMAKE_CURRENT_SOURCE_DIR}/global/qglobal.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/global/qlibraryinfo.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/global/qmalloc.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/global/qnumeric.cpp
 )
 
index 89bad7a..7814c4d 100644 (file)
@@ -2021,16 +2021,6 @@ Q_CORE_EXPORT unsigned int qt_int_sqrt(unsigned int n)
     return p;
 }
 
-#if defined(qMemCopy)
-#  undef qMemCopy
-#endif
-#if defined(qMemSet)
-#  undef qMemSet
-#endif
-
-void *qMemCopy(void *dest, const void *src, size_t n) { return memcpy(dest, src, n); }
-void *qMemSet(void *dest, int c, size_t n) { return memset(dest, c, n); }
-
 static QtMsgHandler handler = 0;                // pointer to debug handler
 
 #if defined(Q_CC_MWERKS) && defined(Q_OS_MACX)
@@ -3095,6 +3085,64 @@ bool QInternal::callFunction(InternalFunction func, void **args)
     return false;
 }
 
+void *qMallocAligned(size_t size, size_t alignment)
+{
+    return qReallocAligned(0, size, 0, alignment);
+}
+
+void *qReallocAligned(void *oldptr, size_t newsize, size_t oldsize, size_t alignment)
+{
+    // fake an aligned allocation
+    Q_UNUSED(oldsize);
+
+    void *actualptr = oldptr ? static_cast<void **>(oldptr)[-1] : 0;
+    if (alignment <= sizeof(void*)) {
+        // special, fast case
+        void **newptr = static_cast<void **>(qRealloc(actualptr, newsize + sizeof(void*)));
+        if (!newptr)
+            return 0;
+        if (newptr == actualptr) {
+            // realloc succeeded without reallocating
+            return oldptr;
+        }
+
+        *newptr = newptr;
+        return newptr + 1;
+    }
+
+    // qMalloc returns pointers aligned at least at sizeof(size_t) boundaries
+    // but usually more (8- or 16-byte boundaries).
+    // So we overallocate by alignment-sizeof(size_t) bytes, so we're guaranteed to find a
+    // somewhere within the first alignment-sizeof(size_t) that is properly aligned.
+
+    // However, we need to store the actual pointer, so we need to allocate actually size +
+    // alignment anyway.
+
+    void *real = qRealloc(actualptr, newsize + alignment);
+    if (!real)
+        return 0;
+
+    quintptr faked = reinterpret_cast<quintptr>(real) + alignment;
+    faked &= ~(alignment - 1);
+
+    void **faked_ptr = reinterpret_cast<void **>(faked);
+
+    // now save the value of the real pointer at faked-sizeof(void*)
+    // by construction, alignment > sizeof(void*) and is a power of 2, so
+    // faked-sizeof(void*) is properly aligned for a pointer
+    faked_ptr[-1] = real;
+
+    return faked_ptr;
+}
+
+void qFreeAligned(void *ptr)
+{
+    if (!ptr)
+        return;
+    void **ptr2 = static_cast<void **>(ptr);
+    free(ptr2[-1]);
+}
+
 /*!
     \macro Q_BYTE_ORDER
     \relates <QtGlobal>
index d29b125..98ccf4b 100644 (file)
@@ -44,6 +44,8 @@
 
 #include <qconfig.h>
 #include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
 
 #define QT_VERSION_STR   "4.8.7"
 /*
@@ -2227,8 +2229,7 @@ inline void qSwap(T &value1, T &value2)
     value1 = value2;
     value2 = t;
 #else
-    using std::swap;
-    swap(value1, value2);
+    std::swap(value1, value2);
 #endif
 }
 
@@ -2284,14 +2285,14 @@ Q_DECLARE_TYPEINFO(long double, Q_PRIMITIVE_TYPE);
    These functions make it possible to use standard C++ functions with
    a similar name from Qt header files (especially template classes).
 */
-Q_CORE_EXPORT void *qMalloc(size_t size);
-Q_CORE_EXPORT void qFree(void *ptr);
-Q_CORE_EXPORT void *qRealloc(void *ptr, size_t size);
+Q_CORE_EXPORT_INLINE void *qMalloc(size_t size) { return ::malloc(size); }
+Q_CORE_EXPORT_INLINE void qFree(void *ptr) { ::free(ptr); }
+Q_CORE_EXPORT_INLINE void *qRealloc(void *ptr, size_t size) { return ::realloc(ptr, size); }
+Q_CORE_EXPORT_INLINE void *qMemCopy(void *dest, const void *src, size_t n) { return memcpy(dest, src, n); }
+Q_CORE_EXPORT_INLINE void *qMemSet(void *dest, int c, size_t n) { return memset(dest, c, n); }
 Q_CORE_EXPORT void *qMallocAligned(size_t size, size_t alignment);
 Q_CORE_EXPORT void *qReallocAligned(void *ptr, size_t size, size_t oldsize, size_t alignment);
 Q_CORE_EXPORT void qFreeAligned(void *ptr);
-Q_CORE_EXPORT void *qMemCopy(void *dest, const void *src, size_t n);
-Q_CORE_EXPORT void *qMemSet(void *dest, int c, size_t n);
 
 
 /*
diff --git a/src/core/global/qmalloc.cpp b/src/core/global/qmalloc.cpp
deleted file mode 100644 (file)
index 68b2950..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://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 http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://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 2.1 or version 3 as published by the Free
-** Software Foundation and appearing in the file LICENSE.LGPLv21 and
-** LICENSE.LGPLv3 included in the packaging of this file. Please review the
-** following information to ensure the GNU Lesser General Public License
-** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** As a special exception, The Qt Company gives you certain additional
-** rights. These rights are described in The Qt Company LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.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 the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qplatformdefs.h"
-
-#include <stdlib.h>
-
-/*
-    Define the container allocation functions in a separate file, so that our
-    users can easily override them.
-*/
-
-QT_BEGIN_NAMESPACE
-
-void *qMalloc(size_t size)
-{
-    return ::malloc(size);
-}
-
-void qFree(void *ptr)
-{
-    ::free(ptr);
-}
-
-void *qRealloc(void *ptr, size_t size)
-{
-    return ::realloc(ptr, size);
-}
-
-void *qMallocAligned(size_t size, size_t alignment)
-{
-    return qReallocAligned(0, size, 0, alignment);
-}
-
-void *qReallocAligned(void *oldptr, size_t newsize, size_t oldsize, size_t alignment)
-{
-    // fake an aligned allocation
-    Q_UNUSED(oldsize);
-
-    void *actualptr = oldptr ? static_cast<void **>(oldptr)[-1] : 0;
-    if (alignment <= sizeof(void*)) {
-        // special, fast case
-        void **newptr = static_cast<void **>(qRealloc(actualptr, newsize + sizeof(void*)));
-        if (!newptr)
-            return 0;
-        if (newptr == actualptr) {
-            // realloc succeeded without reallocating
-            return oldptr;
-        }
-
-        *newptr = newptr;
-        return newptr + 1;
-    }
-
-    // qMalloc returns pointers aligned at least at sizeof(size_t) boundaries
-    // but usually more (8- or 16-byte boundaries).
-    // So we overallocate by alignment-sizeof(size_t) bytes, so we're guaranteed to find a
-    // somewhere within the first alignment-sizeof(size_t) that is properly aligned.
-
-    // However, we need to store the actual pointer, so we need to allocate actually size +
-    // alignment anyway.
-
-    void *real = qRealloc(actualptr, newsize + alignment);
-    if (!real)
-        return 0;
-
-    quintptr faked = reinterpret_cast<quintptr>(real) + alignment;
-    faked &= ~(alignment - 1);
-
-    void **faked_ptr = reinterpret_cast<void **>(faked);
-
-    // now save the value of the real pointer at faked-sizeof(void*)
-    // by construction, alignment > sizeof(void*) and is a power of 2, so
-    // faked-sizeof(void*) is properly aligned for a pointer
-    faked_ptr[-1] = real;
-
-    return faked_ptr;
-}
-
-void qFreeAligned(void *ptr)
-{
-    if (!ptr)
-        return;
-    void **ptr2 = static_cast<void **>(ptr);
-    free(ptr2[-1]);
-}
-
-QT_END_NAMESPACE
-
index ee1aa0f..6899d26 100644 (file)
@@ -49,7 +49,6 @@ set(BOOTSTRAP_SOURCES
     ${CMAKE_SOURCE_DIR}/src/core/codecs/qtsciicodec.cpp
     ${CMAKE_SOURCE_DIR}/src/core/codecs/qutfcodec.cpp
     ${CMAKE_SOURCE_DIR}/src/core/global/qglobal.cpp
-    ${CMAKE_SOURCE_DIR}/src/core/global/qmalloc.cpp
     ${CMAKE_SOURCE_DIR}/src/core/global/qnumeric.cpp
     ${CMAKE_SOURCE_DIR}/src/core/io/qabstractfileengine.cpp
     ${CMAKE_SOURCE_DIR}/src/core/io/qbuffer.cpp