| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- // This file is part of Desktop App Toolkit,
- // a set of libraries for developing nice desktop applications.
- //
- // For license and copyright information please follow this link:
- // https://github.com/desktop-app/legal/blob/master/LEGAL
- //
- #pragma once
- #include "storage/cache/storage_cache_database.h"
- #include "base/binary_guard.h"
- namespace Storage {
- namespace Cache {
- namespace details {
- struct Settings;
- } // namespace details
- class Database;
- } // namespace Cache
- class Databases;
- class DatabasePointer {
- public:
- DatabasePointer(const DatabasePointer &other) = delete;
- DatabasePointer(DatabasePointer &&other);
- DatabasePointer &operator=(const DatabasePointer &other) = delete;
- DatabasePointer &operator=(DatabasePointer &&other);
- ~DatabasePointer();
- Cache::Database *get() const;
- Cache::Database &operator*() const;
- Cache::Database *operator->() const;
- explicit operator bool() const;
- private:
- friend class Databases;
- DatabasePointer(
- not_null<Databases*> owner,
- const std::unique_ptr<Cache::Database> &value);
- void destroy();
- Cache::Database *_value = nullptr;
- not_null<Databases*> _owner;
- };
- class Databases {
- public:
- DatabasePointer get(
- const QString &path,
- const Cache::details::Settings &settings);
- private:
- friend class DatabasePointer;
- struct Kept {
- Kept(std::unique_ptr<Cache::Database> &&database);
- std::unique_ptr<Cache::Database> database;
- base::binary_guard destroying;
- };
- void destroy(Cache::Database *database);
- std::map<QString, Kept> _map;
- };
- } // namespace Storage
|