tornavis/source/blender/editors/asset
Sergey Sharybin 793446cbdc BLI: Replace some macros with inlined functions for C++
Covers the macro ARRAY_SIZE() and STRNCPY.

The problem this change is aimed to solve it to provide cross-platform
compiler-independent safe way pf ensuring that the functions are used
correctly.

The type safety was only ensured for GCC and only for C. The C++
language and Clang compiler would not have detected issues of passing
bare pointer to neither of those macros.

Now the STRNCPY() will only accept a bounded array as the destination
argument, on any compiler.

The ARRAY_SIZE as well, but there are a bit more complications to it
in terms of transparency of the change.

In one place the ARRAY_SIZE was used on float3 type. This worked in the
old code because the type implements subscript operator, and the type
consists of 3 floats. One would argue this is somewhat hidden/implicit
behavior, which better be avoided. So an in-lined value of 3 is used now
there.

Another place is the ARRAY_SIZE used to define a bounded array of the
size which matches bounded array which is a member of a struct. While
the ARRAY_SIZE provides proper size in this case, the compiler does not
believe that the value is known at compile time and errors out with a
message that construction of variable-size arrays is not supported.

Solved by converting the field to std::array<> and adding dedicated
utility to get size of std::array at compile time. There might be a
better way of achieving the same result, or maybe the approach is
fine and just need to find a better place for such utility.

Surely, more macro from the BLI_string.h can be covered with the C++
inlined functions, but need to start somewhere.

There are also quite some changes to ensure the C linkage is not
enforced by code which includes the headers.

Pull Request: https://projects.blender.org/blender/blender/pulls/108041
2023-05-23 09:21:45 +02:00
..
intern Merge branch 'blender-v3.6-release' 2023-05-23 11:34:50 +10:00
CMakeLists.txt Fix #104305: Crash in node editor with large asset libraries 2023-03-16 15:40:31 +01:00
ED_asset_catalog.h Assets: "All" asset library 2023-01-10 15:41:58 +01:00
ED_asset_catalog.hh Assets: "All" asset library 2023-01-10 15:41:58 +01:00
ED_asset_filter.h
ED_asset_handle.h Suport relative path option per-asset library 2023-04-25 20:56:57 +02:00
ED_asset_import.h Fix #104305: Crash in node editor with large asset libraries 2023-03-16 15:40:31 +01:00
ED_asset_indexer.h BLI: Replace some macros with inlined functions for C++ 2023-05-23 09:21:45 +02:00
ED_asset_library.h Assets: "All" asset library 2023-01-10 15:41:58 +01:00
ED_asset_list.h Fix #104305: Crash in node editor with large asset libraries 2023-03-16 15:40:31 +01:00
ED_asset_list.hh Fix #104305: Crash in node editor with large asset libraries 2023-03-16 15:40:31 +01:00
ED_asset_mark_clear.h
ED_asset_temp_id_consumer.h Cleanup: remove redundant forward declarations for structs 2023-01-18 18:41:13 +11:00
ED_asset_type.h Assets: Enable collection assets (no longer experimental) 2022-04-01 16:51:29 +02:00