[Bf-blender-cvs] [6c47849] asset-engine: Refactor load_pre helper to work from both DirEntries and uuids...
Bastien Montagne
noreply at git.blender.org
Thu Apr 28 22:39:48 CEST 2016
Commit: 6c478490eaa71d0e641e6f319ee41b846dcf1f0c
Author: Bastien Montagne
Date: Thu Apr 28 22:39:12 2016 +0200
Branches: asset-engine
https://developer.blender.org/rB6c478490eaa71d0e641e6f319ee41b846dcf1f0c
Refactor load_pre helper to work from both DirEntries and uuids...
===================================================================
M source/blender/blenkernel/BKE_asset.h
M source/blender/blenkernel/intern/asset.c
M source/blender/editors/space_file/filelist.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_asset.h b/source/blender/blenkernel/BKE_asset.h
index bc07eb7..4a5ed58 100644
--- a/source/blender/blenkernel/BKE_asset.h
+++ b/source/blender/blenkernel/BKE_asset.h
@@ -204,7 +204,8 @@ AssetEngine *BKE_asset_engine_create(AssetEngineType *type, struct ReportList *r
AssetEngine *BKE_asset_engine_copy(AssetEngine *engine);
void BKE_asset_engine_free(AssetEngine *engine);
-AssetUUIDList *BKE_asset_engine_load_pre(AssetEngine *engine, struct FileDirEntryArr *r_entries);
+struct AssetUUIDList *BKE_asset_engine_entries_load_pre(AssetEngine *engine, struct FileDirEntryArr *r_entries);
+struct FileDirEntryArr *BKE_asset_engine_uuids_load_pre(AssetEngine *engine, struct AssetUUIDList *r_uuids);
/* File listing utils... */
diff --git a/source/blender/blenkernel/intern/asset.c b/source/blender/blenkernel/intern/asset.c
index 8a345d3..71f457b 100644
--- a/source/blender/blenkernel/intern/asset.c
+++ b/source/blender/blenkernel/intern/asset.c
@@ -176,65 +176,81 @@ void BKE_asset_engine_free(AssetEngine *engine)
/* API helpers. */
-AssetUUIDList *BKE_asset_engine_load_pre(AssetEngine *engine, FileDirEntryArr *r_entries)
+static void asset_engine_load_pre(AssetEngine *engine, AssetUUIDList *r_uuids, FileDirEntryArr *r_entries)
{
- AssetUUIDList *uuids = MEM_mallocN(sizeof(*uuids), __func__);
FileDirEntry *en;
- const int nbr_entries = r_entries->nbr_entries;
- int i;
+ AssetUUID *uuid;
+ const int nbr_entries = r_entries->nbr_entries ? r_entries->nbr_entries : r_uuids->nbr_uuids;
- uuids->uuids = MEM_mallocN(sizeof(*uuids->uuids) * nbr_entries, __func__);
- uuids->nbr_uuids = nbr_entries;
- uuids->asset_engine_version = engine->type->version;
+ if (r_entries->nbr_entries) {
+ BLI_assert(r_uuids->uuids == NULL);
+ r_uuids->uuids = MEM_mallocN(sizeof(*r_uuids->uuids) * nbr_entries, __func__);
+ r_uuids->nbr_uuids = nbr_entries;
+ r_uuids->asset_engine_version = engine->type->version;
- for (i = 0, en = r_entries->entries.first; en; i++, en = en->next) {
- FileDirEntryVariant *var = BLI_findlink(&en->variants, en->act_variant);
- AssetUUID *uuid = &uuids->uuids[i];
+ for (en = r_entries->entries.first, uuid = r_uuids->uuids; en; en = en->next, uuid++) {
+ FileDirEntryVariant *var = BLI_findlink(&en->variants, en->act_variant);
- memcpy(uuid->uuid_asset, en->uuid, sizeof(uuid->uuid_asset));
+ memcpy(uuid->uuid_asset, en->uuid, sizeof(uuid->uuid_asset));
- BLI_assert(var);
- memcpy(uuid->uuid_variant, var->uuid, sizeof(uuid->uuid_variant));
+ BLI_assert(var);
+ memcpy(uuid->uuid_variant, var->uuid, sizeof(uuid->uuid_variant));
- memcpy(uuid->uuid_revision, en->entry->uuid, sizeof(uuid->uuid_revision));
+ memcpy(uuid->uuid_revision, en->entry->uuid, sizeof(uuid->uuid_revision));
+ }
}
- if (engine->type->load_pre) {
- BKE_filedir_entryarr_clear(r_entries);
+ BKE_filedir_entryarr_clear(r_entries);
- if (!engine->type->load_pre(engine, uuids, r_entries)) {
- /* If load_pre returns false (i.e. fails), clear all paths! */
- /* TODO: report!!! */
- BKE_filedir_entryarr_clear(r_entries);
+ if (!engine->type->load_pre(engine, r_uuids, r_entries)) {
+ /* If load_pre returns false (i.e. fails), clear all paths! */
+ /* TODO: report!!! */
+ BKE_filedir_entryarr_clear(r_entries);
- MEM_freeN(uuids->uuids);
- MEM_freeN(uuids);
- return NULL;
- }
+ MEM_freeN(r_uuids->uuids);
+ r_uuids->nbr_uuids = 0;
+ return;
+ }
- /* load_pre may change things, we have to rebuild our uuids list from returned entries. */
- r_entries->nbr_entries = uuids->nbr_uuids = BLI_listbase_count(&r_entries->entries);
- uuids->uuids = MEM_reallocN(uuids->uuids, sizeof(*uuids->uuids) * uuids->nbr_uuids);
- for (i = 0, en = r_entries->entries.first; en; i++, en = en->next) {
- FileDirEntryVariant *var;
- FileDirEntryRevision *rev;
- AssetUUID *uuid = &uuids->uuids[i];
+ /* load_pre may change things, we have to rebuild our uuids list from returned entries. */
+ r_entries->nbr_entries = r_uuids->nbr_uuids = BLI_listbase_count(&r_entries->entries);
+ r_uuids->uuids = MEM_reallocN(r_uuids->uuids, sizeof(*r_uuids->uuids) * r_uuids->nbr_uuids);
+ for (en = r_entries->entries.first, uuid = r_uuids->uuids; en; en = en->next, uuid++) {
+ FileDirEntryVariant *var;
+ FileDirEntryRevision *rev;
- memcpy(uuid->uuid_asset, en->uuid, sizeof(uuid->uuid_asset));
+ memcpy(uuid->uuid_asset, en->uuid, sizeof(uuid->uuid_asset));
- var = BLI_findlink(&en->variants, en->act_variant);
- BLI_assert(var);
- memcpy(uuid->uuid_variant, var->uuid, sizeof(uuid->uuid_variant));
+ var = BLI_findlink(&en->variants, en->act_variant);
+ BLI_assert(var);
+ memcpy(uuid->uuid_variant, var->uuid, sizeof(uuid->uuid_variant));
- rev = BLI_findlink(&var->revisions, var->act_revision);
- BLI_assert(rev);
- memcpy(uuid->uuid_revision, rev->uuid, sizeof(uuid->uuid_revision));
- }
+ rev = BLI_findlink(&var->revisions, var->act_revision);
+ BLI_assert(rev);
+ memcpy(uuid->uuid_revision, rev->uuid, sizeof(uuid->uuid_revision));
}
+}
+
+/** Call load_pre for given entries, and return new uuids/entries. */
+AssetUUIDList *BKE_asset_engine_entries_load_pre(AssetEngine *engine, FileDirEntryArr *r_entries)
+{
+ AssetUUIDList *uuids = MEM_callocN(sizeof(*uuids), __func__);
+
+ asset_engine_load_pre(engine, uuids, r_entries);
return uuids;
}
+/** Call load_pre for given uuids, and return new uuids/entries. */
+FileDirEntryArr *BKE_asset_engine_uuids_load_pre(AssetEngine *engine, AssetUUIDList *r_uuids)
+{
+ FileDirEntryArr *entries = MEM_callocN(sizeof(*entries), __func__);
+
+ asset_engine_load_pre(engine, r_uuids, entries);
+
+ return entries;
+}
+
/* FileDirxxx handling. */
void BKE_filedir_revision_free(FileDirEntryRevision *rev)
diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c
index 98fc516..b065ed2 100644
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@ -2353,7 +2353,7 @@ FileDirEntryArr *filelist_selection_get(
if (use_ae && filelist->ae) {
/* This will 'rewrite' selection list, returned paths are expected to be valid! */
- *r_uuids = BKE_asset_engine_load_pre(filelist->ae, selection);
+ *r_uuids = BKE_asset_engine_entries_load_pre(filelist->ae, selection);
}
else {
*r_uuids = NULL;
More information about the Bf-blender-cvs
mailing list