Add simple static method to retrieve the current loop

In the lines of how we do for getting information of the
current thread.
This commit is contained in:
Thiago Marcos P. Santos
2015-06-30 16:13:40 +03:00
parent 106312c0b8
commit f6b8dd4be9
7 changed files with 13 additions and 9 deletions

View File

@@ -106,7 +106,7 @@ void MapContext::setStyleURL(const std::string& url) {
base = styleURL.substr(0, pos + 1);
}
styleRequest = fs->request({ Resource::Kind::Style, styleURL }, util::RunLoop::current.get()->get(), [this, base](const Response &res) {
styleRequest = fs->request({ Resource::Kind::Style, styleURL }, util::RunLoop::getLoop(), [this, base](const Response &res) {
styleRequest = nullptr;
if (res.status == Response::Successful) {

View File

@@ -30,7 +30,7 @@ void RasterTileData::request(float pixelRatio,
state = State::loading;
FileSource* fs = util::ThreadContext::getFileSource();
req = fs->request({ Resource::Kind::Tile, url }, util::RunLoop::current.get()->get(), [url, callback, this](const Response &res) {
req = fs->request({ Resource::Kind::Tile, url }, util::RunLoop::getLoop(), [url, callback, this](const Response &res) {
req = nullptr;
if (res.status != Response::Successful) {

View File

@@ -148,7 +148,7 @@ void Source::load() {
}
FileSource* fs = util::ThreadContext::getFileSource();
req = fs->request({ Resource::Kind::Source, info.url }, util::RunLoop::current.get()->get(), [this](const Response &res) {
req = fs->request({ Resource::Kind::Source, info.url }, util::RunLoop::getLoop(), [this](const Response &res) {
req = nullptr;
if (res.status != Response::Successful) {

View File

@@ -42,7 +42,7 @@ Sprite::Sprite(const std::string& baseUrl, float pixelRatio_)
std::string jsonURL(baseUrl + (pixelRatio_ > 1 ? "@2x" : "") + ".json");
FileSource* fs = util::ThreadContext::getFileSource();
jsonRequest = fs->request({ Resource::Kind::JSON, jsonURL }, util::RunLoop::current.get()->get(), [this, jsonURL](const Response &res) {
jsonRequest = fs->request({ Resource::Kind::JSON, jsonURL }, util::RunLoop::getLoop(), [this, jsonURL](const Response &res) {
jsonRequest = nullptr;
if (res.status == Response::Successful) {
body = res.data;
@@ -56,7 +56,7 @@ Sprite::Sprite(const std::string& baseUrl, float pixelRatio_)
emitSpriteLoadedIfComplete();
});
spriteRequest = fs->request({ Resource::Kind::Image, spriteURL }, util::RunLoop::current.get()->get(), [this, spriteURL](const Response &res) {
spriteRequest = fs->request({ Resource::Kind::Image, spriteURL }, util::RunLoop::getLoop(), [this, spriteURL](const Response &res) {
spriteRequest = nullptr;
if (res.status == Response::Successful) {
image = res.data;

View File

@@ -42,7 +42,7 @@ void VectorTileData::request(float pixelRatio, const std::function<void()>& call
state = State::loading;
FileSource* fs = util::ThreadContext::getFileSource();
req = fs->request({ Resource::Kind::Tile, url }, util::RunLoop::current.get()->get(), [url, callback, this](const Response &res) {
req = fs->request({ Resource::Kind::Tile, url }, util::RunLoop::getLoop(), [url, callback, this](const Response &res) {
req = nullptr;
if (res.status != Response::Successful) {

View File

@@ -30,7 +30,7 @@ GlyphPBF::GlyphPBF(const std::string& glyphURL,
// The prepare call jumps back to the main thread.
FileSource* fs = util::ThreadContext::getFileSource();
req = fs->request({ Resource::Kind::Glyphs, url }, util::RunLoop::current.get()->get(), [&, successCallback, failureCallback](const Response &res) {
req = fs->request({ Resource::Kind::Glyphs, url }, util::RunLoop::getLoop(), [&, successCallback, failureCallback](const Response &res) {
req = nullptr;
if (res.status != Response::Successful) {

View File

@@ -19,6 +19,10 @@ public:
RunLoop(uv_loop_t*);
~RunLoop();
static uv_loop_t* getLoop() {
return current.get()->get();
}
void stop();
// Invoke fn(args...) on this RunLoop.
@@ -69,8 +73,6 @@ public:
uv_loop_t* get() { return async.get()->loop; }
static uv::tls<RunLoop> current;
private:
template <class F, class P>
class Invoker : public WorkTask {
@@ -123,6 +125,8 @@ private:
Queue queue;
std::mutex mutex;
uv::async async;
static uv::tls<RunLoop> current;
};
}