[android] fix source ownership

This commit is contained in:
Ivo van Dongen
2016-11-10 12:35:49 +01:00
committed by Ivo van Dongen
parent 3a4a27c95f
commit 822b83ae4e
4 changed files with 39 additions and 3 deletions

View File

@@ -35,6 +35,19 @@ namespace android {
return jni::Make<jni::String>(env, source.getID());
}
void Source::addToMap(mbgl::Map& _map) {
//Check to see if we own the source first
if (!ownedSource) {
throw std::runtime_error("Cannot add source twice");
}
//Add source to map
_map.addSource(releaseCoreSource());
//Save pointer to the map
this->map = &_map;
}
std::unique_ptr<mbgl::style::Source> Source::releaseCoreSource() {
assert(ownedSource != nullptr);
return std::move(ownedSource);

View File

@@ -32,16 +32,23 @@ public:
virtual ~Source();
void addToMap(mbgl::Map&);
virtual jni::jobject* createJavaPeer(jni::JNIEnv&) = 0;
jni::String getId(jni::JNIEnv&);
protected:
//Release the owned view and return it
std::unique_ptr<mbgl::style::Source> releaseCoreSource();
protected:
//Set on newly created sources until added to the map
std::unique_ptr<mbgl::style::Source> ownedSource;
//Raw pointer that is valid until the source is removed from the map
mbgl::style::Source& source;
//Map pointer is valid for newly created sources only after adding to the map
mbgl::Map* map;
};