nareshmlx/opencv-pr huggingface dataset:
**File:** modules/core/src/persistence.cpp
**Change Type:** modified
**Context:** PR #13011: completely new C++ persistence implementation - replaced the old persistence (CvMemStorage, CvSeq-based) with the new C++ implementation. T...
**Review Line:** 1294

**Code Changes:**
```diff
+        // name has been copied automatically
+        if( named )
+            ptr += 4;
+        // set raw_size(collection)==4, nelems(collection)==1
+        writeInt(ptr, 4);
+        writeInt(ptr + 4, 0);
+
+        if( add_first_scalar )
+            addNode(node, std::string(), node_type,
+                    node_type == FileNode::INT ? (const void*)&ival :
+                    node_type == FileNode::REAL ? (const void*)&fval :
```

Review comment:
Naming mess with ``` void write( const String& key, double value ) ``` What is target of this "write"?
**File:** modules/core/src/persistence.cpp
**Change Type:** modified
**Context:** PR #13011: completely new C++ persistence implementation - replaced the old persistence (CvMemStorage, CvSeq-based) with the new C++ implementation. T...
**Review Line:** 1321

**Code Changes:**
```diff
+        {
+            size_t blockIdx = node.blockIdx;
+            size_t ofs = node.ofs;
+            CV_Assert( blockIdx == fs_data_ptrs.size()-1 );
+            CV_Assert( ofs <= fs_data_blksz[blockIdx] );
+            //CV_Assert( freeSpaceOfs <= ofs + sz );
+
+            ptr = fs_data_ptrs[blockIdx] + ofs;
+            blockEnd = fs_data_ptrs[blockIdx] + fs_data_blksz[blockIdx];
+
+            if( ptr + sz <= blockEnd )
```

Review comment:
Why is it commented?
**File:** modules/core/include/opencv2/core/persistence.hpp
**Change Type:** modified
**Context:** PR #13011: completely new C++ persistence implementation - replaced the old persistence (CvMemStorage, CvSeq-based) with the new C++ implementation. T...
**Review Line:** 569

**Code Changes:**
```diff
-    const CvFileNode* operator* () const;
+    static bool isMap(int flags);
+    static bool isSeq(int flags);
+    static bool isCollection(int flags);
+    static bool isEmptyCollection(int flags);
+    static bool isFlow(int flags);
+
+    uchar* ptr();
+    const uchar* ptr() const;
 
     //! returns iterator pointing to the first node element
```

Review comment:
Do we really need this in public API?
**File:** modules/core/include/opencv2/core/persistence.hpp
**Change Type:** modified
**Context:** PR #13011: completely new C++ persistence implementation - replaced the old persistence (CvMemStorage, CvSeq-based) with the new C++ implementation. T...
**Review Line:** 555

**Code Changes:**
```diff
-    CV_WRAP String name() const;
+    CV_WRAP std::string name() const;
     //! returns the number of elements in the node, if it is a sequence or mapping, or 1 otherwise.
     CV_WRAP size_t size() const;
+    //! returns raw size of the FileNode in bytes
+    CV_WRAP size_t rawSize() const;
     //! returns the node content as an integer. If the node stores floating-point number, it is rounded.
     operator int() const;
     //! returns the node content as float
@@ -583,10 +562,14 @@ class CV_EXPORTS_W_SIMPLE FileNode
     //! returns the node content as text string
```

Review comment:
What is general use case of this method?
**File:** modules/core/include/opencv2/core/persistence.hpp
**Change Type:** modified
**Context:** PR #13011: completely new C++ persistence implementation - replaced the old persistence (CvMemStorage, CvSeq-based) with the new C++ implementation. T...
**Review Line:** 587

**Code Changes:**
```diff
+     @param vec Pointer to the destination array.
+     @param len Number of elements to read. If it is greater than number of remaining elements then all
+     of them will be read.
      */
-    void readRaw( const String& fmt, uchar* vec, size_t len ) const;
+    void readRaw( const String& fmt, void* vec, size_t len ) const;
 
-    //! reads the registered object and returns pointer to it
-    void* readObj() const;
+    /** Internal method used when reading FileStorage.
+     Sets the type (int, real or string) and value of the previously created node.
```

Review comment:
> len Number of elements to read Where is size of one element? Where is buffer size limit?
**File:** modules/core/include/opencv2/core/persistence.hpp
**Change Type:** modified
**Context:** PR #13011: completely new C++ persistence implementation - replaced the old persistence (CvMemStorage, CvSeq-based) with the new C++ implementation. T...
**Review Line:** 592

**Code Changes:**
```diff
-    //! reads the registered object and returns pointer to it
-    void* readObj() const;
+    /** Internal method used when reading FileStorage.
+     Sets the type (int, real or string) and value of the previously created node.
+     */
+    void setValue( int type, const void* value, int len=-1 );
 
     //! Simplified reading API to use with bindings.
     CV_WRAP double real() const;
@@ -613,37 +598,41 @@ class CV_EXPORTS_W_SIMPLE FileNode
     //! Simplified reading API to use with bindings.
```

Review comment:
Internal method in public API
**File:** modules/core/include/opencv2/core/persistence.hpp
**Change Type:** modified
**Context:** PR #13011: completely new C++ persistence implementation - replaced the old persistence (CvMemStorage, CvSeq-based) with the new C++ implementation. T...
**Review Line:** 572

**Code Changes:**
```diff
+    static bool isCollection(int flags);
+    static bool isEmptyCollection(int flags);
+    static bool isFlow(int flags);
+
+    uchar* ptr();
+    const uchar* ptr() const;
 
     //! returns iterator pointing to the first node element
     FileNodeIterator begin() const;
@@ -595,16 +578,18 @@ class CV_EXPORTS_W_SIMPLE FileNode
 
```

Review comment:
use cases? documentation?
**File:** modules/core/include/opencv2/core/persistence.hpp
**Change Type:** modified
**Context:** PR #13011: completely new C++ persistence implementation - replaced the old persistence (CvMemStorage, CvSeq-based) with the new C++ implementation. T...
**Review Line:** 659

**Code Changes:**
```diff
+     @param maxCount Number of elements to read. If it is greater than number of remaining elements then
+     all of them will be read.
      */
-    FileNodeIterator& readRaw( const String& fmt, uchar* vec,
+    FileNodeIterator& readRaw( const String& fmt, void* vec,
                                size_t maxCount=(size_t)INT_MAX );
 
-    struct SeqReader
-    {
-      int          header_size;
-      void*        seq;        /* sequence, beign read; CvSeq      */
```

Review comment:
Non safe/secure API - missing buffer size limit.
**File:** modules/core/include/opencv2/core/types_c.h
**Change Type:** modified
**Context:** PR #13011: completely new C++ persistence implementation - replaced the old persistence (CvMemStorage, CvSeq-based) with the new C++ implementation. T...
**Review Line:** 1961

**Code Changes:**
```diff
@@ -1957,6 +1957,8 @@ CvSeqReader;
 *             Data structures for persistence (a.k.a serialization) functionality        *
 \****************************************************************************************/
 
+#if 0
+
 /** "black box" file storage */
 typedef struct CvFileStorage CvFileStorage;
 
@@ -2109,28 +2111,7 @@ typedef struct CvTypeInfo
     CvCloneFunc clone; /**< creates a copy of the object */
```

Review comment:
It is better to remove dead code completely. For history purposes use git.
**File:** modules/core/src/persistence.cpp
**Change Type:** modified
**Context:** PR #13011: completely new C++ persistence implementation - replaced the old persistence (CvMemStorage, CvSeq-based) with the new C++ implementation. T...
**Review Line:** 14

**Code Changes:**
```diff
+
+namespace cv
+{
+
+namespace fs
+{
+
+int strcasecmp(const char* s1, const char* s2)
+{
+    const char* dummy="";
+    if(!s1) s1=dummy;
```

Review comment:
It is not the "filesystem"?
**File:** modules/core/src/persistence.cpp
**Change Type:** modified
**Context:** PR #13011: completely new C++ persistence implementation - replaced the old persistence (CvMemStorage, CvSeq-based) with the new C++ implementation. T...
**Review Line:** 2191

**Code Changes:**
```diff
+
+FileNode::operator std::string() const
+{
+    const uchar* p = ptr();
+    if( !p || (*p & TYPE_MASK) != STRING )
+        return std::string();
+    p += (*p & NAMED) ? 5 : 1;
+    size_t sz = (size_t)(unsigned)readInt(p);
+    return std::string((const char*)(p + 4), sz - 1);
+}
+
```

Review comment:
Why not `CV_Error()` ?
**File:** modules/core/src/persistence.cpp
**Change Type:** modified
**Context:** PR #13011: completely new C++ persistence implementation - replaced the old persistence (CvMemStorage, CvSeq-based) with the new C++ implementation. T...
**Review Line:** 2192

**Code Changes:**
```diff
+FileNode::operator std::string() const
+{
+    const uchar* p = ptr();
+    if( !p || (*p & TYPE_MASK) != STRING )
+        return std::string();
+    p += (*p & NAMED) ? 5 : 1;
+    size_t sz = (size_t)(unsigned)readInt(p);
+    return std::string((const char*)(p + 4), sz - 1);
+}
+
+double FileNode::real() const  { return double(*this); }
```

Review comment:
> 5 > 1 Avoid magic numbers.
**File:** modules/core/include/opencv2/core/persistence.hpp
**Change Type:** modified
**Context:** PR #13011: completely new C++ persistence implementation - replaced the old persistence (CvMemStorage, CvSeq-based) with the new C++ implementation. T...
**Review Line:** 584

**Code Changes:**
```diff
-    @param len Number of elements to read. If it is greater than number of remaining elements then all
-    of them will be read.
+     Usually it is more convenient to use operator `>>` instead of this method.
+     @param fmt Specification of each array element. See @ref format_spec "format specification"
+     @param vec Pointer to the destination array.
+     @param len Number of elements to read. If it is greater than number of remaining elements then all
+     of them will be read.
      */
-    void readRaw( const String& fmt, uchar* vec, size_t len ) const;
+    void readRaw( const String& fmt, void* vec, size_t len ) const;
 
```

Review comment:
[Here](https://github.com/opencv/opencv/pull/13011/files#diff-c7235291e5a45c069f3e3119cb2f3c62R673) it is used as buffer size.
**File:** modules/features2d/test/test_matchers_algorithmic.cpp
**Change Type:** modified
**Context:** PR #13011: completely new C++ persistence implementation - replaced the old persistence (CvMemStorage, CvSeq-based) with the new C++ implementation. T...
**Review Line:** 569

**Code Changes:**
```diff
+    "format: 3\n"
+    "indexParams:\n"
+    "   -\n"
+    "      name: algorithm\n"
+    "      type: 9\n"  // FLANN_INDEX_TYPE_ALGORITHM
+    "      value: 6\n"// this line is changed!
+    "   -\n"
+    "      name: trees\n"
+    "      type: 4\n"
+    "      value: 4\n"
+    "searchParams:\n"
```

Review comment:
> this line is changed! Do we still need this? Where is it from? It is [not a part of my drop CV_USRTYPE1 patch](https://github.com/opencv/opencv/pull/12570/files#diff-8c749f23d91c69655bc50a51eec4ca0dR79).
**File:** modules/objdetect/src/cascadedetect_convert.cpp
**Change Type:** modified
**Context:** PR #13011: completely new C++ persistence implementation - replaced the old persistence (CvMemStorage, CvSeq-based) with the new C++ implementation. T...
**Review Line:** 267

**Code Changes:**
```diff
+    FileStorage newfs(newcascade, FileStorage::WRITE);
+    if( !oldfs.isOpened() || !newfs.isOpened() )
+        return false;
+    FileNode oldroot = oldfs.getFirstTopLevelNode();
+
+    bool ok = haar_cvt::convert(oldroot, newfs);
     if( !ok && newcascade.size() > 0 )
         remove(newcascade.c_str());
     return ok;
```

Review comment:
IMHO, This conversion code should be placed near traincascade app.
**File:** modules/features2d/test/test_matchers_algorithmic.cpp
**Change Type:** modified
**Context:** PR #13011: completely new C++ persistence implementation - replaced the old persistence (CvMemStorage, CvSeq-based) with the new C++ implementation. T...
**Review Line:** 569

**Code Changes:**
```diff
+    "format: 3\n"
+    "indexParams:\n"
+    "   -\n"
+    "      name: algorithm\n"
+    "      type: 9\n"  // FLANN_INDEX_TYPE_ALGORITHM
+    "      value: 6\n"// this line is changed!
+    "   -\n"
+    "      name: trees\n"
+    "      type: 4\n"
+    "      value: 4\n"
+    "searchParams:\n"
```

Review comment:
I basically copied 1:1 one of java tests that, since I did not want to debug java tests. If we remove FLANN sometimes (not in OpenCV 4.0, I guess), this test can be removed as well.
**File:** modules/objdetect/src/cascadedetect_convert.cpp
**Change Type:** modified
**Context:** PR #13011: completely new C++ persistence implementation - replaced the old persistence (CvMemStorage, CvSeq-based) with the new C++ implementation. T...
**Review Line:** 267

**Code Changes:**
```diff
+    FileStorage newfs(newcascade, FileStorage::WRITE);
+    if( !oldfs.isOpened() || !newfs.isOpened() )
+        return false;
+    FileNode oldroot = oldfs.getFirstTopLevelNode();
+
+    bool ok = haar_cvt::convert(oldroot, newfs);
     if( !ok && newcascade.size() > 0 )
         remove(newcascade.c_str());
     return ok;
```

Review comment:
disagree. Support of the old-style XML haar detector formats does not take much code, it's one little function. And it let me not to convert the old XML cascades in the test data to the new format, but rather read and use them as-is. Let's retain it in objdetect. But it definitely makes sense to remove completely the old C-API Haar/LBP detector code from objdetect before 4.0. I'll prepare the corresponding PR shortly.
**File:** modules/core/include/opencv2/core/persistence.hpp
**Change Type:** modified
**Context:** PR #13011: completely new C++ persistence implementation - replaced the old persistence (CvMemStorage, CvSeq-based) with the new C++ implementation. T...
**Review Line:** 584

**Code Changes:**
```diff
-    @param len Number of elements to read. If it is greater than number of remaining elements then all
-    of them will be read.
+     Usually it is more convenient to use operator `>>` instead of this method.
+     @param fmt Specification of each array element. See @ref format_spec "format specification"
+     @param vec Pointer to the destination array.
+     @param len Number of elements to read. If it is greater than number of remaining elements then all
+     of them will be read.
      */
-    void readRaw( const String& fmt, uchar* vec, size_t len ) const;
+    void readRaw( const String& fmt, void* vec, size_t len ) const;
 
```

Review comment:
yes, the description is wrong; it confused me too. it's always used as the buffer size. We need to fix it.
**File:** modules/core/src/persistence.cpp
**Change Type:** modified
**Context:** PR #13011: completely new C++ persistence implementation - replaced the old persistence (CvMemStorage, CvSeq-based) with the new C++ implementation. T...
**Review Line:** 1148

**Code Changes:**
```diff
+    }
+
+    void writeRawDataBase64(const void* /*data*/, int /*len*/, const char* /*dt*/ )
+    {
+
+    }
+
+    String releaseAndGetString();
+
+    FileNode getFirstTopLevelNode() const
+    {
```

Review comment:
unfortunately, I did not get enough patience and time to implement base64 encoding; did just decoding. will be added later.
**File:** modules/core/src/persistence.cpp
**Change Type:** modified
**Context:** PR #13011: completely new C++ persistence implementation - replaced the old persistence (CvMemStorage, CvSeq-based) with the new C++ implementation. T...
**Review Line:** 982

**Code Changes:**
```diff
+
+        FStructData& current_struct = write_stack.back();
+        if( fmt == FileStorage::FORMAT_JSON && !FileNode::isFlow(current_struct.flags) && write_stack.size() > 1 )
+            current_struct.indent = write_stack[write_stack.size() - 2].indent;
+
+        emitter->endWriteStruct(current_struct);
+
+        write_stack.pop_back();
+        if( !write_stack.empty() )
+            write_stack.back().flags &= ~FileNode::EMPTY;
+    }
```

Review comment:
ideally yes, but that's where theory meets practice
**File:** modules/core/src/persistence.cpp
**Change Type:** modified
**Context:** PR #13011: completely new C++ persistence implementation - replaced the old persistence (CvMemStorage, CvSeq-based) with the new C++ implementation. T...
**Review Line:** 1294

**Code Changes:**
```diff
+        // name has been copied automatically
+        if( named )
+            ptr += 4;
+        // set raw_size(collection)==4, nelems(collection)==1
+        writeInt(ptr, 4);
+        writeInt(ptr + 4, 0);
+
+        if( add_first_scalar )
+            addNode(node, std::string(), node_type,
+                    node_type == FileNode::INT ? (const void*)&ival :
+                    node_type == FileNode::REAL ? (const void*)&fval :
```

Review comment:
agree; should probably rename `writeInt` to `storeInt`; it's used only during parsing file storage
**File:** apps/CMakeLists.txt
**Change Type:** modified
**Context:** PR #13011: completely new C++ persistence implementation - replaced the old persistence (CvMemStorage, CvSeq-based) with the new C++ implementation. T...
**Review Line:** 52

**Code Changes:**
```diff
   endif()
 endmacro()
 
-ocv_add_app(traincascade)
-ocv_add_app(createsamples)
+#ocv_add_app(traincascade)
+#ocv_add_app(createsamples)
 ocv_add_app(annotation)
 ocv_add_app(visualisation)
 ocv_add_app(interactive-calibration)
```

Review comment:
Why are createsamples and traincascade not included in this build?
**File:** modules/core/include/opencv2/core/hal/intrin_cpp.hpp
**Change Type:** modified
**Context:** PR #12064: core: Remove raw intrinsics from arithmetic operations - ```` force_builders=Custom,armv7,armv8,linux,Linux AVX2 docker_image:Custom=powerp...
**Review Line:** 770

**Code Changes:**
```diff
 }
 
+/** @brief Saturating absolute difference
+
+Returns \f$ saturate(|a - b|) \f$ .
+For 8-, 16-bit signed integer source types. */
+template<typename _Tp, int n>
+inline v_reg<_Tp, n> v_absdiffs(const v_reg<_Tp, n>& a, const v_reg<_Tp, n>& b)
+{
+    v_reg<_Tp, n> c;
+    for( int i = 0; i < n; i++)
```

Review comment:
Could you please add tests for new common functions (test_intrin.cpp)?
**File:** modules/core/src/arithm.cpp
**Change Type:** modified
**Context:** PR #12064: core: Remove raw intrinsics from arithmetic operations - ```` force_builders=Custom,armv7,armv8,linux,Linux AVX2 docker_image:Custom=powerp...
**Review Line:** 2144

**Code Changes:**
```diff
@@ -2134,1014 +2134,4 @@ cvMaxS( const void* srcarr1, double value, void* dstarr )
     cv::max( src1, value, dst );
 }
 
-
-
-namespace cv { namespace hal {
-
-//=======================================
-
-#if (ARITHM_USE_IPP == 1)
-static inline void fixSteps(int width, int height, size_t elemSize, size_t& step1, size_t& step2, size_t& step)
-{
-    if( height == 1 )
-        step1 = step2 = step = width*elemSize;
```

Review comment:
This massive code migration to another file "arithm.dispatch.cpp" is not required. "dispatch.cpp" file is not required to enable "dispatched" optimizations. Please move this part of code back (with added changes).
**File:** modules/core/include/opencv2/core/hal/intrin_cpp.hpp
**Change Type:** modified
**Context:** PR #12064: core: Remove raw intrinsics from arithmetic operations - ```` force_builders=Custom,armv7,armv8,linux,Linux AVX2 docker_image:Custom=powerp...
**Review Line:** 770

**Code Changes:**
```diff
 }
 
+/** @brief Saturating absolute difference
+
+Returns \f$ saturate(|a - b|) \f$ .
+For 8-, 16-bit signed integer source types. */
+template<typename _Tp, int n>
+inline v_reg<_Tp, n> v_absdiffs(const v_reg<_Tp, n>& a, const v_reg<_Tp, n>& b)
+{
+    v_reg<_Tp, n> c;
+    for( int i = 0; i < n; i++)
```

Review comment:
done but I had to remove absdiff[s](signed int) and reuse absdiff(signed int) by recasting it to handle overflow which gives the same result as removed code for all archs.
**File:** modules/imgcodecs/include/opencv2/imgcodecs.hpp
**Change Type:** modified
**Context:** PR #13060: removed C API in the following modules: photo, video, imgcodecs, videoio - n/t ``` force_builders=Custom docker_image:Custom=fedora:28 ```
**Review Line:** 60

**Code Changes:**
```diff
 
+/* duplicate of "ImreadModes" enumeration for better compatibility with OpenCV 3.x */
+enum
+{
+/* 8bit, color or not */
+    CV_LOAD_IMAGE_UNCHANGED  =-1,
+/* 8bit, gray */
+    CV_LOAD_IMAGE_GRAYSCALE  =0,
+/* ?, color */
+    CV_LOAD_IMAGE_COLOR      =1,
+/* any depth, ? */
```

Review comment:
Can we keep them in other header files? For example, `imgcodecs/c_api_compatibility.hpp` or current `imgcodecs.h` (under `__cplusplus`). Main purpose of this to avoid using of these deprecated symbols: - in OpenCV code itself - in bindings parsers - don't bloat documentation
**File:** cmake/OpenCVDetectVulkan.cmake
**Change Type:** added
**Context:** PR #12703: dnn: Add a Vulkan based backend - This commit adds a new backend "DNN_BACKEND_VKCOM" and a new target "DNN_TARGET_VULKAN". VKCOM means vulk...

**Code Changes:**
```diff
@@ -0,0 +1,20 @@
+set(VULKAN_INCLUDE_DIRS "${OpenCV_SOURCE_DIR}/3rdparty/include" CACHE PATH "Vulkan include directory")
+set(VULKAN_LIBRARIES "")
+
+try_compile(VALID_VULKAN
+      "${OpenCV_BINARY_DIR}"
+      "${OpenCV_SOURCE_DIR}/cmake/checks/vulkan.cpp"
+      CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${VULKAN_INCLUDE_DIRS}"
+      OUTPUT_VARIABLE TRY_OUT
+      )
```

Review comment:
Please move 3rdparty headers (original from Khronos) into "<opencv>/3rdparty/include/vkcom".
**File:** cmake/OpenCVDetectVulkan.cmake
**Change Type:** added
**Context:** PR #12703: dnn: Add a Vulkan based backend - This commit adds a new backend "DNN_BACKEND_VKCOM" and a new target "DNN_TARGET_VULKAN". VKCOM means vulk...

**Code Changes:**
```diff
@@ -0,0 +1,20 @@
+set(VULKAN_INCLUDE_DIRS "${OpenCV_SOURCE_DIR}/3rdparty/include" CACHE PATH "Vulkan include directory")
+set(VULKAN_LIBRARIES "")
+
+try_compile(VALID_VULKAN
+      "${OpenCV_BINARY_DIR}"
+      "${OpenCV_SOURCE_DIR}/cmake/checks/vulkan.cpp"
+      CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${VULKAN_INCLUDE_DIRS}"
+      OUTPUT_VARIABLE TRY_OUT
+      )
```

Review comment:
Perhaps we should not add this globally. In `dnn/CMakeLists.txt`: ``` if(HAVE_VULKAN) add_definitions(-DVK_NO_PROTOTYPES) include_directories(${VULKAN_INCLUDE_DIRS}) endif() ```
**File:** modules/dnn/src/vkcom/shader/concat_spv.cpp
**Change Type:** added
**Context:** PR #12703: dnn: Add a Vulkan based backend - This commit adds a new backend "DNN_BACKEND_VKCOM" and a new target "DNN_TARGET_VULKAN". VKCOM means vulk...

**Code Changes:**
```diff
@@ -0,0 +1,83 @@
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html.
+//
+// Copyright (C) 2018, Intel Corporation, all rights reserved.
+// Third party copyrights are property of their respective owners.
+
+#include "../../precomp.hpp"
+
```

Review comment:
Please fix copyright year.
**File:** modules/dnn/src/vkcom/vulkan/function_list.inl
**Change Type:** added
**Context:** PR #12703: dnn: Add a Vulkan based backend - This commit adds a new backend "DNN_BACKEND_VKCOM" and a new target "DNN_TARGET_VULKAN". VKCOM means vulk...
**Review Line:** 1

**Code Changes:**
```diff
@@ -0,0 +1,301 @@
+#ifndef VK_ENTRY
+#define VK_ENTRY(func)
+#endif
+
+#ifndef VK_GLOBAL_LEVEL_FUNC
+#define VK_GLOBAL_LEVEL_FUNC(func)
```

Review comment:
Please add `.hpp` extension (to make happy code editors): function_list.inl.hpp