Browse Source

Update:降级到C++11依赖;

chenjingyu 2 years ago
parent
commit
b34805de73
6 changed files with 84 additions and 7 deletions
  1. +2
    -0
      .gitignore
  2. +1
    -1
      CMakeLists.txt
  3. +2
    -1
      src/UtilsCtrl/ThreadPool/Queue/UAtomicPriorityQueue.h
  4. +2
    -1
      src/UtilsCtrl/ThreadPool/Queue/UAtomicQueue.h
  5. +4
    -4
      src/UtilsCtrl/UAllocator.h
  6. +73
    -0
      src/UtilsCtrl/UMemory.h

+ 2
- 0
.gitignore View File

@ -2,3 +2,5 @@
/cmake-build-release/
/.idea/
.DS_Store
build*/
.vscode/

+ 1
- 1
CMakeLists.txt View File

@ -11,7 +11,7 @@ cmake_minimum_required(VERSION 3.2.5)
project(CThreadPool VERSION 1.0.1)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD 11)
# add CThreadPool environment info
include(cmake/CThreadPool-env-include.cmake)

+ 2
- 1
src/UtilsCtrl/ThreadPool/Queue/UAtomicPriorityQueue.h View File

@ -12,6 +12,7 @@
#include <queue>
#include "UQueueObject.h"
#include "../../UMemory.h"
CGRAPH_NAMESPACE_BEGIN
@ -64,7 +65,7 @@ public:
* @return
*/
CVoid push(T&& value, int priority) {
std::unique_ptr<T> task(std::make_unique<T>(std::move(value), priority));
std::unique_ptr<T> task(make_unique<T>(std::move(value), priority));
CGRAPH_LOCK_GUARD lk(mutex_);
priority_queue_.push(std::move(task));
}

+ 2
- 1
src/UtilsCtrl/ThreadPool/Queue/UAtomicQueue.h View File

@ -15,6 +15,7 @@
#include <condition_variable>
#include "../UThreadPoolDefine.h"
#include "../../UMemory.h"
#include "UQueueObject.h"
CGRAPH_NAMESPACE_BEGIN
@ -104,7 +105,7 @@ public:
* @param value
*/
CVoid push(T&& value) {
std::unique_ptr<T> task(std::make_unique<T>(std::move(value)));
std::unique_ptr<T> task(make_unique<T>(std::move(value)));
CGRAPH_LOCK_GUARD lk(mutex_);
queue_.push(std::move(task));
cv_.notify_one();

+ 4
- 4
src/UtilsCtrl/UAllocator.h View File

@ -14,7 +14,7 @@
#endif
#include <mutex>
#include &lt;memory>;
#include &#34;UMemory.h";
CGRAPH_NAMESPACE_BEGIN
@ -31,7 +31,7 @@ public:
* @return
*/
template<typename T,
std::enable_if_t<std::is_base_of<CObject, T>::value, int> = 0>
enable_if_t<std::is_base_of<CObject, T>::value, int> = 0>
static T* safeMallocCObject() {
T* ptr = nullptr;
while (!ptr) {
@ -47,9 +47,9 @@ public:
* @return
*/
template<typename T,
std::enable_if_t<std::is_base_of<CObject, T>::value, int> = 0>
enable_if_t<std::is_base_of<CObject, T>::value, int> = 0>
static std::unique_ptr<T> makeUniqueCObject() {
return std::make_unique<T>();
return make_unique<T>();
}

+ 73
- 0
src/UtilsCtrl/UMemory.h View File

@ -0,0 +1,73 @@
/*
* @Author: chenjingyu
* @Date: 2022-10-11 01:43:58
* @LastEditTime: 2022-10-11 01:59:50
* @Description: Memory operator
* @FilePath: \CThreadPool\src\UtilsCtrl\UMemory.h
*/
#ifndef CGRAPH_UMEMORY_H
#define CGRAPH_UMEMORY_H
#include <memory.h>
#include <type_traits>
#include "../CBasic/CBasicInclude.h"
CGRAPH_NAMESPACE_BEGIN
template <bool B, typename T = void>
using enable_if_t = typename std::enable_if<B, T>::type;
template <typename T>
std::unique_ptr<T> WrapUnique(T* ptr) {
static_assert(!std::is_array<T>::value, "array types are unsupported");
static_assert(std::is_object<T>::value, "non-object types are unsupported");
return std::unique_ptr<T>(ptr);
}
namespace memory_internal {
// Traits to select proper overload and return type for `absl::make_unique<>`.
template <typename T>
struct MakeUniqueResult {
using scalar = std::unique_ptr<T>;
};
template <typename T>
struct MakeUniqueResult<T[]> {
using array = std::unique_ptr<T[]>;
};
template <typename T, size_t N>
struct MakeUniqueResult<T[N]> {
using invalid = void;
};
} // namespace memory_internal
// gcc 4.8 has __cplusplus at 201301 but the libstdc++ shipped with it doesn't
// define make_unique. Other supported compilers either just define __cplusplus
// as 201103 but have make_unique (msvc), or have make_unique whenever
// __cplusplus > 201103 (clang).
#if (__cplusplus > 201103L || defined(_MSC_VER)) && \
!(defined(__GLIBCXX__) && !defined(__cpp_lib_make_unique))
using std::make_unique;
#else
template <typename T, typename... Args>
typename memory_internal::MakeUniqueResult<T>::scalar make_unique(
Args&&... args) {
return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}
template <typename T>
typename memory_internal::MakeUniqueResult<T>::array make_unique(size_t n) {
return std::unique_ptr<T>(new typename absl::remove_extent_t<T>[n]());
}
template <typename T, typename... Args>
typename memory_internal::MakeUniqueResult<T>::invalid make_unique(
Args&&... /* args */) = delete;
#endif
CGRAPH_NAMESPACE_END
#endif // CGRAPH_UMEMORY_H

Loading…
Cancel
Save