Blender  V3.3
file_indexer.cc
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
9 #include "file_indexer.h"
10 
11 #include "MEM_guardedalloc.h"
12 
13 #include "BLI_linklist.h"
14 #include "BLI_listbase.h"
15 #include "BLI_string.h"
16 #include "BLI_utildefines.h"
17 
19 
20 static eFileIndexerResult read_index(const char *UNUSED(file_name),
21  FileIndexerEntries *UNUSED(entries),
22  int *UNUSED(r_read_entries_len),
23  void *UNUSED(user_data))
24 {
26 }
27 
28 static void update_index(const char *UNUSED(file_name),
29  FileIndexerEntries *UNUSED(entries),
30  void *UNUSED(user_data))
31 {
32 }
33 
35 {
36  FileIndexerType indexer = {nullptr};
37  indexer.read_index = read_index;
38  indexer.update_index = update_index;
39  return indexer;
40 }
41 
43  const BLODataBlockInfo *datablock_info, const int idcode)
44 {
45  FileIndexerEntry *entry = static_cast<FileIndexerEntry *>(
46  MEM_mallocN(sizeof(FileIndexerEntry), __func__));
47  entry->datablock_info = *datablock_info;
48  entry->idcode = idcode;
49  return entry;
50 }
51 
52 } // namespace blender::ed::file::indexer
53 
54 extern "C" {
55 
57  FileIndexerEntries *indexer_entries,
58  const LinkNode * /* BLODataBlockInfo */ datablock_infos,
59  const int idcode)
60 {
61  for (const LinkNode *ln = datablock_infos; ln; ln = ln->next) {
62  const BLODataBlockInfo *datablock_info = static_cast<const BLODataBlockInfo *>(ln->link);
63  FileIndexerEntry *file_indexer_entry =
65  idcode);
66  BLI_linklist_prepend(&indexer_entries->entries, file_indexer_entry);
67  }
68 }
69 
70 static void ED_file_indexer_entry_free(void *indexer_entry)
71 {
72  MEM_freeN(indexer_entry);
73 }
74 
76 {
78  indexer_entries->entries = nullptr;
79 }
80 
82 }
#define UNUSED(x)
eFileIndexerResult
@ FILE_INDEXER_NEEDS_UPDATE
Read Guarded memory(de)allocation.
void * user_data
void ED_file_indexer_entries_clear(FileIndexerEntries *indexer_entries)
Definition: file_indexer.cc:75
static void ED_file_indexer_entry_free(void *indexer_entry)
Definition: file_indexer.cc:70
void ED_file_indexer_entries_extend_from_datablock_infos(FileIndexerEntries *indexer_entries, const LinkNode *datablock_infos, const int idcode)
Definition: file_indexer.cc:56
const FileIndexerType file_indexer_noop
Definition: file_indexer.cc:81
void(* MEM_freeN)(void *vmemh)
Definition: mallocn.c:27
void *(* MEM_mallocN)(size_t len, const char *str)
Definition: mallocn.c:33
static void update_index(const char *UNUSED(file_name), FileIndexerEntries *UNUSED(entries), void *UNUSED(user_data))
Definition: file_indexer.cc:28
static FileIndexerEntry * file_indexer_entry_create_from_datablock_info(const BLODataBlockInfo *datablock_info, const int idcode)
Definition: file_indexer.cc:42
static eFileIndexerResult read_index(const char *UNUSED(file_name), FileIndexerEntries *UNUSED(entries), int *UNUSED(r_read_entries_len), void *UNUSED(user_data))
Definition: file_indexer.cc:20
constexpr FileIndexerType default_indexer()
Definition: file_indexer.cc:34
struct LinkNode * entries
struct BLODataBlockInfo datablock_info
FileIndexerUpdateIndexFunc update_index
FileIndexerReadIndexFunc read_index
struct LinkNode * next
Definition: BLI_linklist.h:23