diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2016-08-24 09:36:11 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-08-24 09:36:11 -0700 |
commit | 646528bc53c37950b556be825de1ba9fa5303be3 (patch) | |
tree | d1ac59acb28768ee270e31d296453bbca2b5f55f | |
parent | 7a84a0e4eaafb9ac3b7179aef613ad1627fe214c (diff) | |
download | qtlocation-mapboxgl-646528bc53c37950b556be825de1ba9fa5303be3.tar.gz |
[core] Simplify Thread::invokeSync (#6128)
-rw-r--r-- | platform/default/default_file_source.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/util/thread.hpp | 14 | ||||
-rw-r--r-- | test/util/thread_local.cpp | 6 |
3 files changed, 7 insertions, 15 deletions
diff --git a/platform/default/default_file_source.cpp b/platform/default/default_file_source.cpp index 9d369210f8..6a94fa3866 100644 --- a/platform/default/default_file_source.cpp +++ b/platform/default/default_file_source.cpp @@ -156,7 +156,7 @@ void DefaultFileSource::setAccessToken(const std::string& accessToken) { } std::string DefaultFileSource::getAccessToken() const { - return thread->invokeSync<std::string>(&Impl::getAccessToken); + return thread->invokeSync(&Impl::getAccessToken); } std::unique_ptr<AsyncRequest> DefaultFileSource::request(const Resource& resource, Callback callback) { diff --git a/src/mbgl/util/thread.hpp b/src/mbgl/util/thread.hpp index cd90e08049..31a56a4834 100644 --- a/src/mbgl/util/thread.hpp +++ b/src/mbgl/util/thread.hpp @@ -44,23 +44,15 @@ public: } // Invoke object->fn(args...) in the runloop thread, and wait for the result. - template <class R, typename Fn, class... Args> - R invokeSync(Fn fn, Args&&... args) { + template <typename Fn, class... Args> + auto invokeSync(Fn fn, Args&&... args) { + using R = std::result_of_t<Fn(Object, Args&&...)>; std::packaged_task<R ()> task(std::bind(fn, object, args...)); std::future<R> future = task.get_future(); loop->invoke(std::move(task)); return future.get(); } - // Invoke object->fn(args...) in the runloop thread, and wait for it to complete. - template <typename Fn, class... Args> - void invokeSync(Fn fn, Args&&... args) { - std::packaged_task<void ()> task(std::bind(fn, object, args...)); - std::future<void> future = task.get_future(); - loop->invoke(std::move(task)); - future.get(); - } - private: Thread(const Thread&) = delete; Thread(Thread&&) = delete; diff --git a/test/util/thread_local.cpp b/test/util/thread_local.cpp index d2ec7f70a5..4ee7042580 100644 --- a/test/util/thread_local.cpp +++ b/test/util/thread_local.cpp @@ -43,9 +43,9 @@ TEST(ThreadLocalStorage, Basic) { Thread<TestThread> thread2(context, &number2); Thread<TestThread> thread3(context, &number3); - EXPECT_EQ(number1, thread1.invokeSync<int>(&TestThread::getNumber)); - EXPECT_EQ(number2, thread2.invokeSync<int>(&TestThread::getNumber)); - EXPECT_EQ(number3, thread3.invokeSync<int>(&TestThread::getNumber)); + EXPECT_EQ(number1, thread1.invokeSync(&TestThread::getNumber)); + EXPECT_EQ(number2, thread2.invokeSync(&TestThread::getNumber)); + EXPECT_EQ(number3, thread3.invokeSync(&TestThread::getNumber)); } TEST(ThreadLocalStorage, NotSetReturnsNull) { |