blender/intern/memutil
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 File headers: SPDX License migration 2022-02-11 09:14:36 +11:00
CMakeLists.txt Remove "All Rights Reserved" from Blender Foundation copyright code 2023-03-30 10:51:59 +02:00
MEM_Allocator.h Clang-Format: Allow empty functions to be single-line 2023-03-29 16:50:54 +02:00
MEM_CacheLimiter.h File headers: SPDX License migration 2022-02-11 09:14:36 +11:00
MEM_CacheLimiterC-Api.h BLI: Replace some macros with inlined functions for C++ 2023-05-23 09:21:45 +02:00
MEM_RefCounted.h Clang-Format: Allow empty functions to be single-line 2023-03-29 16:50:54 +02:00
MEM_RefCountedC-Api.h File headers: SPDX License migration 2022-02-11 09:14:36 +11:00