Blender V4.3
addon.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
9#include <cstddef>
10#include <cstdlib>
11
12#include "RNA_types.hh"
13
14#include "BLI_ghash.h"
15#include "BLI_listbase.h"
16#include "BLI_string.h"
17#include "BLI_utildefines.h"
18
19#include "BKE_addon.h" /* own include */
20#include "BKE_idprop.hh"
21
22#include "DNA_listBase.h"
23#include "DNA_userdef_types.h"
24
25#include "MEM_guardedalloc.h"
26
27#include "CLG_log.h"
28
29static CLG_LogRef LOG = {"bke.addon"};
30
31/* -------------------------------------------------------------------- */
36{
37 bAddon *addon = static_cast<bAddon *>(MEM_callocN(sizeof(bAddon), "bAddon"));
38 return addon;
39}
40
41bAddon *BKE_addon_find(const ListBase *addon_list, const char *module)
42{
43 return static_cast<bAddon *>(BLI_findstring(addon_list, module, offsetof(bAddon, module)));
44}
45
46bAddon *BKE_addon_ensure(ListBase *addon_list, const char *module)
47{
48 bAddon *addon = BKE_addon_find(addon_list, module);
49 if (addon == nullptr) {
50 addon = BKE_addon_new();
51 STRNCPY(addon->module, module);
52 BLI_addtail(addon_list, addon);
53 }
54 return addon;
55}
56
57bool BKE_addon_remove_safe(ListBase *addon_list, const char *module)
58{
59 bAddon *addon = static_cast<bAddon *>(
61 if (addon) {
62 BLI_remlink(addon_list, addon);
63 BKE_addon_free(addon);
64 return true;
65 }
66 return false;
67}
68
70{
71 if (addon->prop) {
72 IDP_FreeProperty(addon->prop);
73 }
74 MEM_freeN(addon);
75}
76
79/* -------------------------------------------------------------------- */
84
85bAddonPrefType *BKE_addon_pref_type_find(const char *idname, bool quiet)
86{
87 if (idname[0]) {
88 bAddonPrefType *apt;
89
90 apt = static_cast<bAddonPrefType *>(BLI_ghash_lookup(global_addonpreftype_hash, idname));
91 if (apt) {
92 return apt;
93 }
94
95 if (!quiet) {
96 CLOG_WARN(&LOG, "search for unknown addon-pref '%s'", idname);
97 }
98 }
99 else {
100 if (!quiet) {
101 CLOG_WARN(&LOG, "search for empty addon-pref");
102 }
103 }
104
105 return nullptr;
106}
107
112
117
123
129
struct bAddonPrefType bAddonPrefType
Definition BKE_addon.h:27
void IDP_FreeProperty(IDProperty *prop)
Definition idprop.cc:1227
#define BLI_assert(a)
Definition BLI_assert.h:50
GHash * BLI_ghash_str_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
bool BLI_ghash_remove(GHash *gh, const void *key, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
Definition BLI_ghash.c:787
void * BLI_ghash_lookup(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
Definition BLI_ghash.c:731
void BLI_ghash_insert(GHash *gh, void *key, void *val)
Definition BLI_ghash.c:707
void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
Definition BLI_ghash.c:860
void * BLI_findstring(const struct ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:110
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:130
#define STRNCPY(dst, src)
Definition BLI_string.h:593
#define CLOG_WARN(clg_ref,...)
Definition CLG_log.h:181
These structs are the foundation for all linked lists in the library system.
Read Guarded memory(de)allocation.
void BKE_addon_free(bAddon *addon)
Definition addon.cc:69
void BKE_addon_pref_type_add(bAddonPrefType *apt)
Definition addon.cc:108
bAddon * BKE_addon_ensure(ListBase *addon_list, const char *module)
Definition addon.cc:46
bAddonPrefType * BKE_addon_pref_type_find(const char *idname, bool quiet)
Definition addon.cc:85
void BKE_addon_pref_type_init()
Definition addon.cc:118
bAddon * BKE_addon_find(const ListBase *addon_list, const char *module)
Definition addon.cc:41
void BKE_addon_pref_type_remove(const bAddonPrefType *apt)
Definition addon.cc:113
bool BKE_addon_remove_safe(ListBase *addon_list, const char *module)
Definition addon.cc:57
static CLG_LogRef LOG
Definition addon.cc:29
static GHash * global_addonpreftype_hash
Definition addon.cc:83
void BKE_addon_pref_type_free()
Definition addon.cc:124
bAddon * BKE_addon_new()
Definition addon.cc:35
#define offsetof(t, d)
void MEM_freeN(void *vmemh)
Definition mallocn.cc:105
void *(* MEM_callocN)(size_t len, const char *str)
Definition mallocn.cc:42
static struct PyModuleDef module
Definition python.cpp:991
char module[128]
IDProperty * prop