[android] fix source ownership
This commit is contained in:
committed by
Ivo van Dongen
parent
3a4a27c95f
commit
822b83ae4e
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user