36 if (
lib->runtime.name_map) {
51 std::optional<Library *> owner_library,
57 BLI_assert(!owner_library || *owner_library ==
nullptr);
60 const Library *library_src =
reinterpret_cast<const Library *
>(id_src);
88 if (
lib->packedfile !=
102 memset(&
lib->runtime, 0,
sizeof(
lib->runtime));
139 if (
lib->filepath != filepath) {
166 Library *best_parent_lib =
nullptr;
167 bool do_break =
false;
178 ID *from_id = item->id_pointer.from;
184 if (from_id_lib ==
lib) {
187 if (directly_used_libs.
contains(from_id_lib)) {
190 best_parent_lib = from_id_lib;
197 if (!best_parent_lib ||
200 best_parent_lib = from_id_lib;
223 if (best_parent_lib) {
224 lib->runtime.parent = best_parent_lib;
228 lib->runtime.parent =
nullptr;
229 lib->runtime.temp_index = 0;
230 directly_used_libs.
add(
lib);
241 lib_iter->runtime.temp_index = 0;
259 directly_used_libs.
add(id_iter->
lib);
269 if (directly_used_libs.
contains(lib_iter)) {
270 BLI_assert(lib_iter->runtime.temp_index == 0);
276 if (lib_iter->runtime.parent) {
277 if (lib_iter->runtime.temp_index > 0) {
281 for (
Library *parent_lib_iter = lib_iter;
283 parent_lib_iter = parent_lib_iter->runtime.parent)
285 parent_libraries.
append(parent_lib_iter);
287 int parent_temp_index = parent_libraries.
last()->runtime.temp_index +
288 int(parent_libraries.
size()) - 1;
289 for (
Library *parent_lib_iter : parent_libraries) {
291 parent_lib_iter->runtime.temp_index == parent_temp_index);
292 parent_lib_iter->runtime.temp_index = parent_temp_index--;
306 if (directly_used_libs.
contains(lib_iter)) {
307 BLI_assert(lib_iter->runtime.temp_index == 0);
311 if (lib_iter->runtime.parent) {
315 BLI_assert(lib_iter->runtime.temp_index == 0);
bool BKE_bpath_foreach_path_fixed_process(BPathForeachPathData *bpath_data, char *path, size_t path_maxncpy)
@ IDTYPE_FLAGS_NO_ANIMDATA
@ IDTYPE_FLAGS_NO_LIBLINKING
@ IDTYPE_FLAGS_NEVER_UNUSED
#define BKE_LIB_FOREACHID_PROCESS_IDSUPER(data_, id_super_, cb_flag_)
#define FOREACH_MAIN_ID_END
#define FOREACH_MAIN_LISTBASE_ID_END
#define FOREACH_MAIN_LISTBASE_ID_BEGIN(_lb, _id)
#define FOREACH_MAIN_LISTBASE_END
#define FOREACH_MAIN_LISTBASE_BEGIN(_bmain, _lb)
void BKE_main_relations_create(Main *bmain, short flag)
#define FOREACH_MAIN_ID_BEGIN(_bmain, _id)
const char * BKE_main_blendfile_path(const Main *bmain) ATTR_NONNULL()
void BKE_main_relations_free(Main *bmain)
void BKE_main_namemap_destroy(UniqueName_Map **r_name_map) ATTR_NONNULL()
PackedFile * BKE_packedfile_duplicate(const PackedFile *pf_src)
void BKE_packedfile_free(PackedFile *pf)
#define BLI_assert_unreachable()
void * BLI_ghash_lookup(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
void * BLI_findstring(const struct ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
bool BLI_path_abs(char path[FILE_MAX], const char *basepath) ATTR_NONNULL(1
bool BLI_path_is_rel(const char *path) ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT
#define STRNCPY(dst, src)
#define UNUSED_VARS_NDEBUG(...)
#define BLT_I18NCONTEXT_ID_LIBRARY
ID and Library types, which are fundamental for SDNA.
#define ID_IS_LINKED(_id)
bool contains(const Key &key) const
void append(const T &value)
const T & last(const int64_t n=0) const
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
void BKE_library_filepath_set(Main *bmain, Library *lib, const char *filepath)
void BKE_library_main_rebuild_hierarchy(Main *bmain)
static void library_runtime_reset(Library *lib)
static void rebuild_hierarchy_best_parent_find(Main *bmain, blender::Set< Library * > &directly_used_libs, Library *lib)
static void library_blend_read_data(BlendDataReader *, ID *id)
static void library_foreach_path(ID *id, BPathForeachPathData *bpath_data)
static void library_foreach_id(ID *id, LibraryForeachIDData *data)
static void library_copy_data(Main *bmain, std::optional< Library * > owner_library, ID *id_dst, const ID *id_src, int)
static void library_free_data(ID *id)
struct UniqueName_Map * name_map
struct FileData * filedata
struct PackedFile * packedfile
struct Library_Runtime runtime
MainIDRelationsEntryItem * from_ids
GHash * relations_from_pointers
MainIDRelations * relations
static DynamicLibrary lib