mirror of
https://github.com/lubosz/overte.git
synced 2025-04-24 07:13:57 +02:00
Fix shared pointer usage in storage abstraction
This commit is contained in:
parent
e94f803b84
commit
62fcd238ae
3 changed files with 20 additions and 20 deletions
|
@ -389,12 +389,14 @@ const Element& Texture::getStoredMipFormat() const {
|
|||
}
|
||||
|
||||
void Texture::assignStoredMip(uint16 level, Size size, const Byte* bytes) {
|
||||
storage::StoragePointer storage { new storage::MemoryStorage(size, bytes) };
|
||||
auto rawStoragePointer = new storage::MemoryStorage(size, bytes);
|
||||
storage::StoragePointer storage = rawStoragePointer->shared_from_this();
|
||||
assignStoredMip(level, storage);
|
||||
}
|
||||
|
||||
void Texture::assignStoredMipFace(uint16 level, uint8 face, Size size, const Byte* bytes) {
|
||||
storage::StoragePointer storage { new storage::MemoryStorage(size, bytes) };
|
||||
auto rawStoragePointer = new storage::MemoryStorage(size, bytes);
|
||||
storage::StoragePointer storage = rawStoragePointer->shared_from_this();
|
||||
assignStoredMipFace(level, face, storage);
|
||||
}
|
||||
|
||||
|
@ -973,4 +975,3 @@ Texture::ExternalUpdates Texture::getUpdates() const {
|
|||
void Texture::setStorage(std::unique_ptr<Storage>& newStorage) {
|
||||
_storage.swap(newStorage);
|
||||
}
|
||||
|
||||
|
|
|
@ -12,7 +12,10 @@
|
|||
|
||||
using namespace storage;
|
||||
|
||||
ViewStoragePointer Storage::createView(size_t viewSize, size_t offset) const {
|
||||
ViewStorage::ViewStorage(const storage::StoragePointer& owner, size_t size, const uint8_t* data)
|
||||
: _owner(owner), _size(size), _data(data) {}
|
||||
|
||||
StoragePointer Storage::createView(size_t viewSize, size_t offset) const {
|
||||
auto selfSize = size();
|
||||
if (0 == viewSize) {
|
||||
viewSize = selfSize;
|
||||
|
@ -20,14 +23,16 @@ ViewStoragePointer Storage::createView(size_t viewSize, size_t offset) const {
|
|||
if ((viewSize + offset) > selfSize) {
|
||||
throw std::runtime_error("Invalid mapping range");
|
||||
}
|
||||
return ViewStoragePointer(new ViewStorage(shared_from_this(), viewSize, data() + offset));
|
||||
auto viewPointer = new ViewStorage(shared_from_this(), viewSize, data() + offset);
|
||||
return viewPointer->shared_from_this();
|
||||
}
|
||||
|
||||
MemoryStoragePointer Storage::toMemoryStorage() const {
|
||||
return MemoryStoragePointer(new MemoryStorage(size(), data()));
|
||||
StoragePointer Storage::toMemoryStorage() const {
|
||||
auto rawPointer = new MemoryStorage(size(), data());
|
||||
return rawPointer->shared_from_this();
|
||||
}
|
||||
|
||||
FileStoragePointer Storage::toFileStorage(const QString& filename) const {
|
||||
StoragePointer Storage::toFileStorage(const QString& filename) const {
|
||||
return FileStorage::create(filename, size(), data());
|
||||
}
|
||||
|
||||
|
@ -38,7 +43,7 @@ MemoryStorage::MemoryStorage(size_t size, const uint8_t* data) {
|
|||
}
|
||||
}
|
||||
|
||||
FileStoragePointer FileStorage::create(const QString& filename, size_t size, const uint8_t* data) {
|
||||
StoragePointer FileStorage::create(const QString& filename, size_t size, const uint8_t* data) {
|
||||
QFile file(filename);
|
||||
if (!file.open(QFile::ReadWrite | QIODevice::Truncate)) {
|
||||
throw std::runtime_error("Unable to open file for writing");
|
||||
|
|
|
@ -19,12 +19,6 @@
|
|||
namespace storage {
|
||||
class Storage;
|
||||
using StoragePointer = std::shared_ptr<const Storage>;
|
||||
class MemoryStorage;
|
||||
using MemoryStoragePointer = std::shared_ptr<const MemoryStorage>;
|
||||
class FileStorage;
|
||||
using FileStoragePointer = std::shared_ptr<const FileStorage>;
|
||||
class ViewStorage;
|
||||
using ViewStoragePointer = std::shared_ptr<const ViewStorage>;
|
||||
|
||||
class Storage : public std::enable_shared_from_this<Storage> {
|
||||
public:
|
||||
|
@ -32,9 +26,9 @@ namespace storage {
|
|||
virtual const uint8_t* data() const = 0;
|
||||
virtual size_t size() const = 0;
|
||||
|
||||
ViewStoragePointer createView(size_t size = 0, size_t offset = 0) const;
|
||||
FileStoragePointer toFileStorage(const QString& filename) const;
|
||||
MemoryStoragePointer toMemoryStorage() const;
|
||||
StoragePointer createView(size_t size = 0, size_t offset = 0) const;
|
||||
StoragePointer toFileStorage(const QString& filename) const;
|
||||
StoragePointer toMemoryStorage() const;
|
||||
|
||||
// Aliases to prevent having to re-write a ton of code
|
||||
inline size_t getSize() const { return size(); }
|
||||
|
@ -53,7 +47,7 @@ namespace storage {
|
|||
|
||||
class FileStorage : public Storage {
|
||||
public:
|
||||
static FileStoragePointer create(const QString& filename, size_t size, const uint8_t* data);
|
||||
static StoragePointer create(const QString& filename, size_t size, const uint8_t* data);
|
||||
FileStorage(const QString& filename);
|
||||
~FileStorage();
|
||||
// Prevent copying
|
||||
|
@ -69,7 +63,7 @@ namespace storage {
|
|||
|
||||
class ViewStorage : public Storage {
|
||||
public:
|
||||
ViewStorage(const storage::StoragePointer& owner, size_t size, const uint8_t* data) : _owner(owner), _size(size), _data(data) {}
|
||||
ViewStorage(const storage::StoragePointer& owner, size_t size, const uint8_t* data);
|
||||
const uint8_t* data() const override { return _data; }
|
||||
size_t size() const override { return _size; }
|
||||
private:
|
||||
|
|
Loading…
Reference in a new issue