Blender V5.0
file_indexer.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
11#include "file_indexer.hh"
12
13#include "MEM_guardedalloc.h"
14
15#include "BLI_linklist.h"
16
18
19static eFileIndexerResult read_index(const char * /*file_name*/,
20 FileIndexerEntries * /*entries*/,
21 int * /*r_read_entries_len*/,
22 void * /*user_data*/)
23{
25}
26
27static void update_index(const char * /*file_name*/,
28 FileIndexerEntries * /*entries*/,
29 void * /*user_data*/)
30{
31}
32
34{
35 FileIndexerType indexer = {nullptr};
36 indexer.read_index = read_index;
37 indexer.update_index = update_index;
38 return indexer;
39}
40
42 BLODataBlockInfo *datablock_info, const int idcode)
43{
45 entry->idcode = idcode;
46 /* Shallow copy data-block info and mark original as having its asset data ownership stolen. */
47 entry->datablock_info = *datablock_info;
48 datablock_info->free_asset_data = false;
49 return entry;
50}
51
52} // namespace blender::ed::file::indexer
53
55 FileIndexerEntries *indexer_entries,
56 LinkNode * /*BLODataBlockInfo*/ datablock_infos,
57 const int idcode)
58{
59 for (LinkNode *ln = datablock_infos; ln; ln = ln->next) {
60 BLODataBlockInfo *datablock_info = static_cast<BLODataBlockInfo *>(ln->link);
61 FileIndexerEntry *file_indexer_entry =
63 idcode);
64 BLI_linklist_prepend(&indexer_entries->entries, file_indexer_entry);
65 }
66}
67
69{
70 BLI_linklist_free(indexer_entries->entries, [](void *indexer_entry_ptr) {
71 FileIndexerEntry *indexer_entry = static_cast<FileIndexerEntry *>(indexer_entry_ptr);
72 BLO_datablock_info_free(&indexer_entry->datablock_info);
73 MEM_freeN(indexer_entry);
74 });
75
76 indexer_entries->entries = nullptr;
77}
78
eFileIndexerResult
@ FILE_INDEXER_NEEDS_UPDATE
Read Guarded memory(de)allocation.
void ED_file_indexer_entries_clear(FileIndexerEntries *indexer_entries)
void ED_file_indexer_entries_extend_from_datablock_infos(FileIndexerEntries *indexer_entries, LinkNode *datablock_infos, const int idcode)
const FileIndexerType file_indexer_noop
void * MEM_mallocN(size_t len, const char *str)
Definition mallocn.cc:128
static void update_index(const char *, FileIndexerEntries *, void *)
static FileIndexerEntry * file_indexer_entry_create_from_datablock_info(BLODataBlockInfo *datablock_info, const int idcode)
static eFileIndexerResult read_index(const char *, FileIndexerEntries *, int *, void *)
constexpr FileIndexerType default_indexer()
BLODataBlockInfo datablock_info
struct LinkNode * next