mirror of
https://github.com/AleziaKurdis/overte.git
synced 2025-04-16 07:39:11 +02:00
Make Serializer::Factory stored by HFMFormatRegistry unique_ptr
This commit is contained in:
parent
30c4830bd8
commit
bf1c5f2fa5
4 changed files with 17 additions and 17 deletions
|
@ -13,7 +13,7 @@
|
|||
|
||||
namespace hfm {
|
||||
|
||||
FormatRegistry::MIMETypeID FormatRegistry::registerMIMEType(const MIMEType& mimeType, const std::shared_ptr<Serializer::Factory>& supportedFactory) {
|
||||
FormatRegistry::MIMETypeID FormatRegistry::registerMIMEType(const MIMEType& mimeType, std::unique_ptr<Serializer::Factory>& supportedFactory) {
|
||||
MIMETypeID id = _mimeTypeLibrary.registerMIMEType(mimeType);
|
||||
withWriteLock([&](){
|
||||
_supportedFormats.emplace_back(id, supportedFactory);
|
||||
|
@ -33,20 +33,20 @@ void FormatRegistry::unregisterMIMEType(const MIMETypeID& mimeTypeID) {
|
|||
_mimeTypeLibrary.unregisterMIMEType(mimeTypeID);
|
||||
}
|
||||
|
||||
std::shared_ptr<Serializer::Factory> FormatRegistry::getFactoryForMIMETypeID(FormatRegistry::MIMETypeID mimeTypeID) const {
|
||||
return resultWithReadLock<std::shared_ptr<Serializer::Factory>>([&](){
|
||||
std::shared_ptr<Serializer> FormatRegistry::getSerializerForMIMETypeID(FormatRegistry::MIMETypeID mimeTypeID) const {
|
||||
return resultWithReadLock<std::shared_ptr<Serializer>>([&](){
|
||||
for (auto it = _supportedFormats.begin(); it != _supportedFormats.end(); it++) {
|
||||
if ((*it).mimeTypeID == mimeTypeID) {
|
||||
return (*it).factory;
|
||||
return (*it).factory->get();
|
||||
}
|
||||
}
|
||||
return std::shared_ptr<Serializer::Factory>();
|
||||
return std::shared_ptr<Serializer>();
|
||||
});
|
||||
}
|
||||
|
||||
std::shared_ptr<Serializer::Factory> FormatRegistry::getFactoryForMIMEType(const hifi::ByteArray& data, const hifi::VariantHash& mapping, const hifi::URL& url, const std::string& webMediaType) const {
|
||||
std::shared_ptr<Serializer> FormatRegistry::getSerializerForMIMEType(const hifi::ByteArray& data, const hifi::VariantHash& mapping, const hifi::URL& url, const std::string& webMediaType) const {
|
||||
MIMETypeID id = _mimeTypeLibrary.findMatchingMIMEType(data, mapping, url, webMediaType);
|
||||
return getFactoryForMIMETypeID(id);
|
||||
return getSerializerForMIMETypeID(id);
|
||||
}
|
||||
|
||||
};
|
||||
|
|
|
@ -23,22 +23,22 @@ public:
|
|||
using MIMETypeID = MIMETypeLibrary::ID;
|
||||
static const MIMETypeID INVALID_MIME_TYPE_ID { MIMETypeLibrary::INVALID_ID };
|
||||
|
||||
MIMETypeID registerMIMEType(const MIMEType& mimeType, const std::shared_ptr<Serializer::Factory>& supportedFactory);
|
||||
MIMETypeID registerMIMEType(const MIMEType& mimeType, std::unique_ptr<Serializer::Factory>& supportedFactory);
|
||||
void unregisterMIMEType(const MIMETypeID& id);
|
||||
|
||||
std::shared_ptr<Serializer::Factory> getFactoryForMIMEType(const hifi::ByteArray& data, const hifi::VariantHash& mapping, const hifi::URL& url, const std::string& webMediaType) const;
|
||||
std::shared_ptr<Serializer::Factory> getFactoryForMIMETypeID(MIMETypeID id) const;
|
||||
std::shared_ptr<Serializer> getSerializerForMIMEType(const hifi::ByteArray& data, const hifi::VariantHash& mapping, const hifi::URL& url, const std::string& webMediaType) const;
|
||||
std::shared_ptr<Serializer> getSerializerForMIMETypeID(MIMETypeID id) const;
|
||||
|
||||
protected:
|
||||
MIMETypeLibrary _mimeTypeLibrary;
|
||||
class SupportedFormat {
|
||||
public:
|
||||
SupportedFormat(const MIMETypeID& mimeTypeID, const std::shared_ptr<Serializer::Factory>& factory) :
|
||||
SupportedFormat(const MIMETypeID& mimeTypeID, std::unique_ptr<Serializer::Factory>& factory) :
|
||||
mimeTypeID(mimeTypeID),
|
||||
factory(factory) {
|
||||
factory(std::move(factory)) {
|
||||
}
|
||||
MIMETypeID mimeTypeID;
|
||||
std::shared_ptr<Serializer::Factory> factory;
|
||||
std::unique_ptr<Serializer::Factory> factory;
|
||||
};
|
||||
std::vector<SupportedFormat> _supportedFormats;
|
||||
};
|
||||
|
|
|
@ -24,7 +24,7 @@ namespace hfm {
|
|||
|
||||
template<typename T>
|
||||
void SimpleFormat<T>::registerFormat(FormatRegistry& registry) {
|
||||
_mimeTypeID = registry.registerMIMEType(_mimeType, std::make_shared<SimpleFactory<T>>());
|
||||
_mimeTypeID = registry.registerMIMEType(_mimeType, std::make_unique<SimpleFactory<T>>());
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
|
|
|
@ -16,9 +16,9 @@
|
|||
|
||||
|
||||
hfm::Model::Pointer ModelLoader::load(const hifi::ByteArray& data, const hifi::VariantHash& mapping, const hifi::URL& url, const std::string& webMediaType) const {
|
||||
auto factory = DependencyManager::get<ModelFormatRegistry>()->getFactoryForMIMEType(data, mapping, url, webMediaType);
|
||||
if (!factory) {
|
||||
auto serializer = DependencyManager::get<ModelFormatRegistry>()->getSerializerForMIMEType(data, mapping, url, webMediaType);
|
||||
if (!serializer) {
|
||||
return hfm::Model::Pointer();
|
||||
}
|
||||
return factory->get()->read(data, mapping, url);
|
||||
return serializer->read(data, mapping, url);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue