[Bf-blender-cvs] [8b26349d577] master: BLO: move blenloader to C++

Jacques Lucke noreply at git.blender.org
Thu Sep 15 19:13:41 CEST 2022


Commit: 8b26349d5777179808792ab123f98f5a90428754
Author: Jacques Lucke
Date:   Thu Sep 15 19:13:01 2022 +0200
Branches: master
https://developer.blender.org/rB8b26349d5777179808792ab123f98f5a90428754

BLO: move blenloader to C++

Differential Revision: https://developer.blender.org/D15965

===================================================================

M	source/blender/blenkernel/BKE_bpath.h
M	source/blender/blenkernel/BKE_icons.h
M	source/blender/blenloader/BLO_blend_validate.h
M	source/blender/blenloader/BLO_undofile.h
M	source/blender/blenloader/CMakeLists.txt
R086	source/blender/blenloader/intern/blend_validate.c	source/blender/blenloader/intern/blend_validate.cc
R092	source/blender/blenloader/intern/readblenentry.c	source/blender/blenloader/intern/readblenentry.cc
R087	source/blender/blenloader/intern/readfile.c	source/blender/blenloader/intern/readfile.cc
M	source/blender/blenloader/intern/readfile.h
R094	source/blender/blenloader/intern/readfile_tempload.c	source/blender/blenloader/intern/readfile_tempload.cc
R081	source/blender/blenloader/intern/undofile.c	source/blender/blenloader/intern/undofile.cc
R091	source/blender/blenloader/intern/writefile.c	source/blender/blenloader/intern/writefile.cc
M	source/creator/creator_intern.h

===================================================================

diff --git a/source/blender/blenkernel/BKE_bpath.h b/source/blender/blenkernel/BKE_bpath.h
index ea6049e87da..bc60b6f050e 100644
--- a/source/blender/blenkernel/BKE_bpath.h
+++ b/source/blender/blenkernel/BKE_bpath.h
@@ -12,6 +12,8 @@
 
 #pragma once
 
+#include "BLI_utildefines.h"
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -57,6 +59,7 @@ typedef enum eBPathForeachFlag {
    *  \note Only used by Image IDType currently. */
   BKE_BPATH_FOREACH_PATH_RELOAD_EDITED = (1 << 9),
 } eBPathForeachFlag;
+ENUM_OPERATORS(eBPathForeachFlag, BKE_BPATH_FOREACH_PATH_RELOAD_EDITED)
 
 struct BPathForeachPathData;
 
diff --git a/source/blender/blenkernel/BKE_icons.h b/source/blender/blenkernel/BKE_icons.h
index 8d9351806c4..10d17c7f4c8 100644
--- a/source/blender/blenkernel/BKE_icons.h
+++ b/source/blender/blenkernel/BKE_icons.h
@@ -20,6 +20,8 @@ extern "C" {
 
 #include "BLI_compiler_attrs.h"
 
+#include "DNA_ID_enums.h"
+
 typedef void (*DrawInfoFreeFP)(void *drawinfo);
 
 enum {
@@ -77,8 +79,6 @@ struct PreviewImage;
 struct StudioLight;
 struct bGPDlayer;
 
-enum eIconSizes;
-
 void BKE_icons_init(int first_dyn_id);
 
 /**
diff --git a/source/blender/blenloader/BLO_blend_validate.h b/source/blender/blenloader/BLO_blend_validate.h
index 0ce40987adc..4594f730758 100644
--- a/source/blender/blenloader/BLO_blend_validate.h
+++ b/source/blender/blenloader/BLO_blend_validate.h
@@ -12,6 +12,10 @@
 struct Main;
 struct ReportList;
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /**
  * Check (but do *not* fix) that all linked data-blocks are still valid
  * (i.e. pointing to the right library).
@@ -21,3 +25,7 @@ bool BLO_main_validate_libraries(struct Main *bmain, struct ReportList *reports)
  * * Check (and fix if needed) that shape key's 'from' pointer is valid.
  */
 bool BLO_main_validate_shapekeys(struct Main *bmain, struct ReportList *reports);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/source/blender/blenloader/BLO_undofile.h b/source/blender/blenloader/BLO_undofile.h
index 0584f95d85f..0dee167db53 100644
--- a/source/blender/blenloader/BLO_undofile.h
+++ b/source/blender/blenloader/BLO_undofile.h
@@ -61,6 +61,10 @@ typedef struct {
   bool memchunk_identical;
 } UndoReader;
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* Actually only used `writefile.c`. */
 
 void BLO_memfile_write_init(MemFileWriteData *mem_data,
@@ -101,3 +105,7 @@ extern struct Main *BLO_memfile_main_get(struct MemFile *memfile,
 extern bool BLO_memfile_write_file(struct MemFile *memfile, const char *filepath);
 
 FileReader *BLO_memfile_new_filereader(MemFile *memfile, int undo_direction);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/source/blender/blenloader/CMakeLists.txt b/source/blender/blenloader/CMakeLists.txt
index f6c43a266cd..f99fb21e994 100644
--- a/source/blender/blenloader/CMakeLists.txt
+++ b/source/blender/blenloader/CMakeLists.txt
@@ -33,11 +33,11 @@ set(INC_SYS
 
 set(SRC
   ${CMAKE_SOURCE_DIR}/release/datafiles/userdef/userdef_default_theme.c
-  intern/blend_validate.c
-  intern/readblenentry.c
-  intern/readfile.c
-  intern/readfile_tempload.c
-  intern/undofile.c
+  intern/blend_validate.cc
+  intern/readblenentry.cc
+  intern/readfile.cc
+  intern/readfile_tempload.cc
+  intern/undofile.cc
   intern/versioning_250.c
   intern/versioning_260.c
   intern/versioning_270.c
@@ -51,7 +51,7 @@ set(SRC
   intern/versioning_dna.c
   intern/versioning_legacy.c
   intern/versioning_userdef.c
-  intern/writefile.c
+  intern/writefile.cc
 
   BLO_blend_defs.h
   BLO_blend_validate.h
@@ -83,6 +83,18 @@ if(WITH_ALEMBIC)
   add_definitions(-DWITH_ALEMBIC)
 endif()
 
+if(WITH_TBB)
+  list(APPEND INC_SYS
+    ${TBB_INCLUDE_DIRS}
+  )
+  add_definitions(-DWITH_TBB)
+  if(WIN32)
+    # TBB includes Windows.h which will define min/max macros
+    # that will collide with the stl versions.
+    add_definitions(-DNOMINMAX)
+  endif()
+endif()
+
 blender_add_lib(bf_blenloader "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")
 
 # needed so writefile.c can use dna_type_offsets.h
diff --git a/source/blender/blenloader/intern/blend_validate.c b/source/blender/blenloader/intern/blend_validate.cc
similarity index 86%
rename from source/blender/blenloader/intern/blend_validate.c
rename to source/blender/blenloader/intern/blend_validate.cc
index e1527201e22..96314ab4324 100644
--- a/source/blender/blenloader/intern/blend_validate.c
+++ b/source/blender/blenloader/intern/blend_validate.cc
@@ -45,7 +45,8 @@ bool BLO_main_validate_libraries(Main *bmain, ReportList *reports)
   ListBase *lbarray[INDEX_ID_MAX];
   int i = set_listbasepointers(bmain, lbarray);
   while (i--) {
-    for (ID *id = lbarray[i]->first; id != NULL; id = id->next) {
+    for (ID *id = static_cast<ID *>(lbarray[i]->first); id != nullptr;
+         id = static_cast<ID *>(id->next)) {
       if (ID_IS_LINKED(id)) {
         is_valid = false;
         BKE_reportf(reports,
@@ -57,18 +58,19 @@ bool BLO_main_validate_libraries(Main *bmain, ReportList *reports)
     }
   }
 
-  for (Main *curmain = bmain->next; curmain != NULL; curmain = curmain->next) {
+  for (Main *curmain = bmain->next; curmain != nullptr; curmain = curmain->next) {
     Library *curlib = curmain->curlib;
-    if (curlib == NULL) {
-      BKE_report(reports, RPT_ERROR, "Library database with NULL library data-block!");
+    if (curlib == nullptr) {
+      BKE_report(reports, RPT_ERROR, "Library database with nullptr library data-block!");
       continue;
     }
 
     BKE_library_filepath_set(bmain, curlib, curlib->filepath);
-    BlendFileReadReport bf_reports = {.reports = reports};
+    BlendFileReadReport bf_reports{};
+    bf_reports.reports = reports;
     BlendHandle *bh = BLO_blendhandle_from_file(curlib->filepath_abs, &bf_reports);
 
-    if (bh == NULL) {
+    if (bh == nullptr) {
       BKE_reportf(reports,
                   RPT_ERROR,
                   "Library ID %s not found at expected path %s!",
@@ -79,8 +81,8 @@ bool BLO_main_validate_libraries(Main *bmain, ReportList *reports)
 
     i = set_listbasepointers(curmain, lbarray);
     while (i--) {
-      ID *id = lbarray[i]->first;
-      if (id == NULL) {
+      ID *id = static_cast<ID *>(lbarray[i]->first);
+      if (id == nullptr) {
         continue;
       }
 
@@ -96,12 +98,12 @@ bool BLO_main_validate_libraries(Main *bmain, ReportList *reports)
 
       int totnames = 0;
       LinkNode *names = BLO_blendhandle_get_datablock_names(bh, GS(id->name), false, &totnames);
-      for (; id != NULL; id = id->next) {
+      for (; id != nullptr; id = static_cast<ID *>(id->next)) {
         if (!ID_IS_LINKED(id)) {
           is_valid = false;
           BKE_reportf(reports,
                       RPT_ERROR,
-                      "ID %s has NULL lib pointer while being in library %s!",
+                      "ID %s has nullptr lib pointer while being in library %s!",
                       id->name,
                       curlib->filepath);
           continue;
@@ -120,7 +122,7 @@ bool BLO_main_validate_libraries(Main *bmain, ReportList *reports)
           }
         }
 
-        if (name == NULL) {
+        if (name == nullptr) {
           is_valid = false;
           BKE_reportf(reports,
                       RPT_ERROR,
@@ -163,7 +165,7 @@ bool BLO_main_validate_shapekeys(Main *bmain, ReportList *reports)
       if (!ID_IS_LINKED(id)) {
         /* We assume lib data is valid... */
         Key *shapekey = BKE_key_from_id(id);
-        if (shapekey != NULL && shapekey->from != id) {
+        if (shapekey != nullptr && shapekey->from != id) {
           is_valid = false;
           BKE_reportf(reports,
                       RPT_ERROR,
@@ -184,7 +186,7 @@ bool BLO_main_validate_shapekeys(Main *bmain, ReportList *reports)
   /* NOTE: #BKE_id_delete also locks `bmain`, so we need to do this loop outside of the lock here.
    */
   LISTBASE_FOREACH_MUTABLE (Key *, shapekey, &bmain->shapekeys) {
-    if (shapekey->from != NULL) {
+    if (shapekey->from != nullptr) {
       continue;
     }
 
diff --git a/source/blender/blenloader/intern/readblenentry.c b/source/blender/blenloader/intern/readblenentry.cc
similarity index 92%
rename from source/blender/blenloader/intern/readblenentry.c
rename to source/blender/blenloader/intern/readblenentry.cc
index 1bfa3b0e2bb..e3d6864b962 100644
--- a/source/blender/blenloader/intern/readblenentry.c
+++ b/source/blender/blenloader/intern/readblenentry.cc
@@ -70,7 +70,7 @@ void BLO_blendhandle_print_sizes(BlendHandle *bh, void *fp)
   FileData *fd = (FileData *)bh;
   BHead *bhead;
 
-  fprintf(fp, "[\n");
+  fprintf(static_cast<FILE *>(fp), "[\n");
   for (bhead = blo_bhead_first(fd); bhead; bhead = blo_bhead_next(fd, bhead)) {
     if (bhead->code == ENDB) {
       break;
@@ -90,14 +90,14 @@ void BLO_blendhandle_print_sizes(BlendHandle *bh, void *fp)
     buf[2] = buf[2] ? buf[2] : ' ';
     buf[3] = buf[3] ? buf[3] : ' ';
 
-    fprintf(fp,
+    fprintf(static_cast<FILE *>(fp),
             "['%.4s', '%s', %d, %ld ],\n",
             buf,
             name,
             bhead->nr,
             (long int)(bhead->len + sizeof(BHead)));
   }
-  fprintf(fp, "]\n");
+  fprintf(static_cast<FILE *>(fp), "]\n");
 }
 
 LinkNode *BLO_blendhandle_get_datablock_names(BlendHandle *bh,
@@ -152,7 +152,8 @@ LinkNode *BLO_blendhandle_get_datablock_info(BlendHandle *bh,
       if (skip_datablock) {
         continue;
       }
-      struct BLODataBlockInfo *info = MEM_mallocN(sizeof(*info), __func__);
+      struct BLODataBlockInfo *info = static_cast<BLODataBlockInfo *>(
+          MEM_mallocN(sizeof(*info), __func__));
 
       /* Lastly, read asset data from the following blocks. */
       if (asset_meta_data) {
@@ -199,7 +200,8 @@ static BHead *blo_blendhandle_read_preview_rects(FileData *fd,
       bhead = blo_bhead_next(fd, bhead);
       BLI_assert((preview_from_file->w[preview_index] * preview_from_file->h[preview_index] *
                   sizeof(uint)) == bhead->len);
-      result->rect[preview_index] = BLO_library_read_struct(fd, bhead, "PreviewImage Icon Rect");
+      result->rect[preview_index] = static_cast<uint *>(
+          BLO_library_read_struct(fd, bhead, "PreviewImage Icon Rect"));
     }
     else {
       /* This should not be needed, but can happen

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list