[Bf-blender-cvs] [868a428] asset-experiments: FileBrowser: block caching: minor tweak (mostly needed in ae branch actually).
Bastien Montagne
noreply at git.blender.org
Sat Apr 4 13:18:23 CEST 2015
Commit: 868a4288abaf6ea0db1ba6314beccff425f6e14a
Author: Bastien Montagne
Date: Sat Apr 4 13:17:43 2015 +0200
Branches: asset-experiments
https://developer.blender.org/rB868a4288abaf6ea0db1ba6314beccff425f6e14a
FileBrowser: block caching: minor tweak (mostly needed in ae branch actually).
===================================================================
M source/blender/editors/space_file/filelist.c
===================================================================
diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c
index bda4477..01804fa 100644
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@ -1418,6 +1418,18 @@ int filelist_file_findpath(struct FileList *filelist, const char *filename)
return -1;
}
+/* Helper, low-level, it assumes cursor + size <= FILELIST_ENTRYCACHESIZE */
+static bool filelist_file_cache_block_do(struct FileList *filelist, const int start_index, const int size, int cursor)
+{
+ FileListEntryCache *cache = &filelist->filelist_cache;
+ FileListIntern *intern = &filelist->filelist_intern;
+
+ memcpy(&cache->block_entries[cursor], &intern->filtered[start_index],
+ sizeof(cache->block_entries[cursor]) * size);
+
+ return false;
+}
+
/* Load in cache all entries "around" given index (as much as block cache may hold). */
bool filelist_file_cache_block(struct FileList *filelist, const int index)
{
@@ -1455,8 +1467,9 @@ bool filelist_file_cache_block(struct FileList *filelist, const int index)
// printf("Full Recaching!\n");
/* New cached block does not overlap existing one, simple. */
- memcpy(cache->block_entries, &filelist->filelist_intern.filtered[start_index],
- sizeof(cache->block_entries[0]) * (end_index - start_index));
+ if (!filelist_file_cache_block_do(filelist, start_index, end_index - start_index, 0)) {
+ return false;
+ }
if (cache->previews_pool) {
filelist_cache_previews_clear(cache);
@@ -1494,11 +1507,13 @@ bool filelist_file_cache_block(struct FileList *filelist, const int index)
}
if (size2) {
- memcpy(&cache->block_entries[idx2], &filelist->filelist_intern.filtered[end_index - size2],
- sizeof(cache->block_entries[0]) * size2);
+ if (!filelist_file_cache_block_do(filelist, end_index - size2, size2, idx2)) {
+ return false;
+ }
+ }
+ if (!filelist_file_cache_block_do(filelist, end_index - size1 - size2, size1, idx1)) {
+ return false;
}
- memcpy(&cache->block_entries[idx1], &filelist->filelist_intern.filtered[end_index - size1 - size2],
- sizeof(cache->block_entries[0]) * size1);
}
cache->block_end_index = end_index;
@@ -1517,18 +1532,19 @@ bool filelist_file_cache_block(struct FileList *filelist, const int index)
size2 -= size1;
idx2 = 0;
idx1 = FILELIST_ENTRYCACHESIZE - size1;
-
}
else {
idx1 = cache->block_cursor - size1;
}
if (size2) {
- memcpy(&cache->block_entries[idx2], &filelist->filelist_intern.filtered[start_index + size1],
- sizeof(cache->block_entries[0]) * size2);
+ if (!filelist_file_cache_block_do(filelist, start_index + size1, size2, idx2)) {
+ return false;
+ }
+ }
+ if (!filelist_file_cache_block_do(filelist, start_index, size1, idx1)) {
+ return false;
}
- memcpy(&cache->block_entries[idx1], &filelist->filelist_intern.filtered[start_index],
- sizeof(cache->block_entries[0]) * size1);
cache->block_cursor = idx1;
}
More information about the Bf-blender-cvs
mailing list