Refactor: Make asset catalog class members constant
Some of these members are not expected to change throughout the lifetime of the class instances, so make them constant and only set them via the constructor. Making them immutable this way helps making clear which data needs extra attention for thread safety.
This commit is contained in:
parent
d5bd5415ec
commit
5bc9434893
|
@ -40,17 +40,17 @@ using OwningAssetCatalogMap = Map<CatalogID, std::unique_ptr<AssetCatalog>>;
|
|||
* directory hierarchy). */
|
||||
class AssetCatalogService {
|
||||
std::unique_ptr<AssetCatalogCollection> catalog_collection_;
|
||||
|
||||
/**
|
||||
* Cached catalog tree storage. Lazy-created by #AssetCatalogService::catalog_tree().
|
||||
*/
|
||||
std::unique_ptr<AssetCatalogTree> catalog_tree_;
|
||||
std::mutex catalog_tree_mutex_;
|
||||
|
||||
CatalogFilePath asset_library_root_;
|
||||
|
||||
Vector<std::unique_ptr<AssetCatalogCollection>> undo_snapshots_;
|
||||
Vector<std::unique_ptr<AssetCatalogCollection>> redo_snapshots_;
|
||||
|
||||
const CatalogFilePath asset_library_root_;
|
||||
const bool is_read_only_ = false;
|
||||
|
||||
public:
|
||||
|
@ -59,9 +59,8 @@ class AssetCatalogService {
|
|||
struct read_only_tag {};
|
||||
|
||||
public:
|
||||
AssetCatalogService();
|
||||
explicit AssetCatalogService(const CatalogFilePath &asset_library_root = {});
|
||||
explicit AssetCatalogService(read_only_tag);
|
||||
explicit AssetCatalogService(const CatalogFilePath &asset_library_root);
|
||||
|
||||
/**
|
||||
* Set tag indicating that some catalog modifications are unsaved, which could
|
||||
|
|
|
@ -33,8 +33,9 @@ namespace blender::asset_system {
|
|||
|
||||
const CatalogFilePath AssetCatalogService::DEFAULT_CATALOG_FILENAME = "blender_assets.cats.txt";
|
||||
|
||||
AssetCatalogService::AssetCatalogService()
|
||||
: catalog_collection_(std::make_unique<AssetCatalogCollection>())
|
||||
AssetCatalogService::AssetCatalogService(const CatalogFilePath &asset_library_root)
|
||||
: catalog_collection_(std::make_unique<AssetCatalogCollection>()),
|
||||
asset_library_root_(asset_library_root)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -43,12 +44,6 @@ AssetCatalogService::AssetCatalogService(read_only_tag) : AssetCatalogService()
|
|||
const_cast<bool &>(is_read_only_) = true;
|
||||
}
|
||||
|
||||
AssetCatalogService::AssetCatalogService(const CatalogFilePath &asset_library_root)
|
||||
: AssetCatalogService()
|
||||
{
|
||||
asset_library_root_ = asset_library_root;
|
||||
}
|
||||
|
||||
void AssetCatalogService::tag_has_unsaved_changes(AssetCatalog *edited_catalog)
|
||||
{
|
||||
BLI_assert(!is_read_only_);
|
||||
|
@ -372,8 +367,7 @@ void AssetCatalogService::load_single_file(const CatalogFilePath &catalog_defini
|
|||
std::unique_ptr<AssetCatalogDefinitionFile> AssetCatalogService::parse_catalog_file(
|
||||
const CatalogFilePath &catalog_definition_file_path)
|
||||
{
|
||||
auto cdf = std::make_unique<AssetCatalogDefinitionFile>();
|
||||
cdf->file_path = catalog_definition_file_path;
|
||||
auto cdf = std::make_unique<AssetCatalogDefinitionFile>(catalog_definition_file_path);
|
||||
|
||||
/* TODO(Sybren): this might have to move to a higher level when supporting multiple CDFs. */
|
||||
Set<AssetCatalogPath> seen_paths;
|
||||
|
@ -556,8 +550,7 @@ CatalogFilePath AssetCatalogService::find_suitable_cdf_path_for_writing(
|
|||
std::unique_ptr<AssetCatalogDefinitionFile> AssetCatalogService::construct_cdf_in_memory(
|
||||
const CatalogFilePath &file_path) const
|
||||
{
|
||||
auto cdf = std::make_unique<AssetCatalogDefinitionFile>();
|
||||
cdf->file_path = file_path;
|
||||
auto cdf = std::make_unique<AssetCatalogDefinitionFile>(file_path);
|
||||
|
||||
for (auto &catalog : catalog_collection_->catalogs_.values()) {
|
||||
cdf->add_new(catalog.get());
|
||||
|
|
|
@ -151,6 +151,11 @@ std::unique_ptr<AssetCatalog> AssetCatalogDefinitionFile::parse_catalog_line(con
|
|||
return std::make_unique<AssetCatalog>(catalog_id, catalog_path.cleanup(), simple_name);
|
||||
}
|
||||
|
||||
AssetCatalogDefinitionFile::AssetCatalogDefinitionFile(const CatalogFilePath &file_path)
|
||||
: file_path(file_path)
|
||||
{
|
||||
}
|
||||
|
||||
bool AssetCatalogDefinitionFile::write_to_disk() const
|
||||
{
|
||||
BLI_assert_msg(!this->file_path.empty(), "Writing to CDF requires its file path to be known");
|
||||
|
|
|
@ -37,10 +37,10 @@ class AssetCatalogDefinitionFile {
|
|||
const static std::string VERSION_MARKER;
|
||||
const static std::string HEADER;
|
||||
|
||||
CatalogFilePath file_path;
|
||||
const CatalogFilePath file_path;
|
||||
|
||||
public:
|
||||
AssetCatalogDefinitionFile() = default;
|
||||
AssetCatalogDefinitionFile(const CatalogFilePath &file_path);
|
||||
|
||||
/**
|
||||
* Write the catalog definitions to the same file they were read from.
|
||||
|
|
|
@ -1116,9 +1116,9 @@ class TestableAssetCatalogCollection : public AssetCatalogCollection {
|
|||
{
|
||||
return catalog_definition_file_.get();
|
||||
}
|
||||
AssetCatalogDefinitionFile *allocate_catalog_definition_file()
|
||||
AssetCatalogDefinitionFile *allocate_catalog_definition_file(StringRef file_path)
|
||||
{
|
||||
catalog_definition_file_ = std::make_unique<AssetCatalogDefinitionFile>();
|
||||
catalog_definition_file_ = std::make_unique<AssetCatalogDefinitionFile>(file_path);
|
||||
return get_catalog_definition_file();
|
||||
}
|
||||
};
|
||||
|
@ -1185,8 +1185,8 @@ TEST_F(AssetCatalogTest, cat_collection_deep_copy__nonempty_cdf)
|
|||
catcoll.get_catalogs().add_new(cat2->catalog_id, std::move(cat2));
|
||||
catcoll.get_deleted_catalogs().add_new(cat3->catalog_id, std::move(cat3));
|
||||
|
||||
AssetCatalogDefinitionFile *cdf = catcoll.allocate_catalog_definition_file();
|
||||
cdf->file_path = "path/to/somewhere.cats.txt";
|
||||
AssetCatalogDefinitionFile *cdf = catcoll.allocate_catalog_definition_file(
|
||||
"path/to/somewhere.cats.txt");
|
||||
cdf->add_new(cat1_ptr);
|
||||
cdf->add_new(cat2_ptr);
|
||||
cdf->add_new(cat3_ptr);
|
||||
|
|
Loading…
Reference in New Issue