Prepared version 2.1.0 final. Rebuilt binaries. Updated CHANGELOG.md. Rebuilt Doxygen dovcumentation (with new Doxygen version).
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 17ee507..f627499 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# 2.1.0 (2018-09-10)

+

+Minor bugfixes.

+

 # 2.1.0-beta.1 (2018-08-27)

 

 Major release after many months of development in "development" branch and features branches. Many new features added, some bugs fixed. API stays backward-compatible.

diff --git a/bin/VmaReplay_Release_vs2015.exe b/bin/VmaReplay_Release_vs2015.exe
index 31f08ee..accd843 100644
--- a/bin/VmaReplay_Release_vs2015.exe
+++ b/bin/VmaReplay_Release_vs2015.exe
Binary files differ
diff --git a/bin/VulkanSample_Release_vs2015.exe b/bin/VulkanSample_Release_vs2015.exe
index 4d40827..4ef360b 100644
--- a/bin/VulkanSample_Release_vs2015.exe
+++ b/bin/VulkanSample_Release_vs2015.exe
Binary files differ
diff --git a/docs/html/allocation_annotation.html b/docs/html/allocation_annotation.html
index e9cd214..dc60c81 100644
--- a/docs/html/allocation_annotation.html
+++ b/docs/html/allocation_annotation.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Allocation names and user data</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -82,7 +85,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/annotated.html b/docs/html/annotated.html
index 37ef74d..5cca84d 100644
--- a/docs/html/annotated.html
+++ b/docs/html/annotated.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Class List</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 </div><!-- top -->
 <!-- window showing the filter options -->
@@ -86,7 +89,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/choosing_memory_type.html b/docs/html/choosing_memory_type.html
index b713e77..0c78cf2 100644
--- a/docs/html/choosing_memory_type.html
+++ b/docs/html/choosing_memory_type.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Choosing memory type</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -97,7 +100,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/classes.html b/docs/html/classes.html
index 099f7e3..d922236 100644
--- a/docs/html/classes.html
+++ b/docs/html/classes.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Class Index</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 </div><!-- top -->
 <!-- window showing the filter options -->
@@ -77,7 +80,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/configuration.html b/docs/html/configuration.html
index 42ac113..14930b9 100644
--- a/docs/html/configuration.html
+++ b/docs/html/configuration.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Configuration</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -88,7 +91,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/custom_memory_pools.html b/docs/html/custom_memory_pools.html
index 35197c6..89132d1 100644
--- a/docs/html/custom_memory_pools.html
+++ b/docs/html/custom_memory_pools.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Custom memory pools</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -144,7 +147,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/debugging_memory_usage.html b/docs/html/debugging_memory_usage.html
index 83e8d35..0163a92 100644
--- a/docs/html/debugging_memory_usage.html
+++ b/docs/html/debugging_memory_usage.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Debugging incorrect memory usage</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -101,7 +104,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/defragmentation.html b/docs/html/defragmentation.html
index 6df573c..41bf4ca 100644
--- a/docs/html/defragmentation.html
+++ b/docs/html/defragmentation.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Defragmentation</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -74,7 +77,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/doxygen.css b/docs/html/doxygen.css
index 4f1ab91..266c8b3 100644
--- a/docs/html/doxygen.css
+++ b/docs/html/doxygen.css
@@ -1,4 +1,4 @@
-/* The standard CSS for doxygen 1.8.13 */
+/* The standard CSS for doxygen 1.8.14 */
 
 body, table, div, p, dl {
 	font: 400 14px/22px Roboto,sans-serif;
diff --git a/docs/html/dynsections.js b/docs/html/dynsections.js
index 85e1836..c1ce122 100644
--- a/docs/html/dynsections.js
+++ b/docs/html/dynsections.js
@@ -1,3 +1,26 @@
+/*
+ @licstart  The following is the entire license notice for the
+ JavaScript code in this file.
+
+ Copyright (C) 1997-2017 by Dimitri van Heesch
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ @licend  The above is the entire license notice
+ for the JavaScript code in this file
+ */
 function toggleVisibility(linkObj)
 {
  var base = $(linkObj).attr('id');
@@ -15,7 +38,7 @@
    summary.hide();
    $(linkObj).removeClass('closed').addClass('opened');
    $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
- } 
+ }
  return false;
 }
 
@@ -37,7 +60,7 @@
       $(this).show();
     } else if (l==level+1) {
       i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
-      a.html('&#9658;');
+      a.html('&#9654;');
       $(this).show();
     } else {
       $(this).hide();
@@ -64,7 +87,7 @@
     // replace down arrow by right arrow for current row
     var currentRowSpans = currentRow.find("span");
     currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
-    currentRowSpans.filter(".arrow").html('&#9658;');
+    currentRowSpans.filter(".arrow").html('&#9654;');
     rows.filter("[id^=row_"+id+"]").hide(); // hide all children
   } else { // we are SHOWING
     // replace right arrow by down arrow for current row
@@ -74,7 +97,7 @@
     // replace down arrows by right arrows for child rows
     var childRowsSpans = childRows.find("span");
     childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
-    childRowsSpans.filter(".arrow").html('&#9658;');
+    childRowsSpans.filter(".arrow").html('&#9654;');
     childRows.show(); //show all children
   }
   updateStripes();
@@ -94,4 +117,4 @@
     $(img).attr('src',src.substring(0,src.length-10)+'open.png');
   }
 }
-
+/* @license-end */
diff --git a/docs/html/files.html b/docs/html/files.html
index 0847322..5d066b1 100644
--- a/docs/html/files.html
+++ b/docs/html/files.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: File List</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 </div><!-- top -->
 <!-- window showing the filter options -->
@@ -72,7 +75,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/functions.html b/docs/html/functions.html
index efb1f35..508e7c6 100644
--- a/docs/html/functions.html
+++ b/docs/html/functions.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Class Members</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 </div><!-- top -->
 <!-- window showing the filter options -->
@@ -314,7 +317,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/functions_vars.html b/docs/html/functions_vars.html
index bb5c24c..6e0c81b 100644
--- a/docs/html/functions_vars.html
+++ b/docs/html/functions_vars.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Class Members - Variables</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 </div><!-- top -->
 <!-- window showing the filter options -->
@@ -314,7 +317,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/general_considerations.html b/docs/html/general_considerations.html
index f631ac8..85a057b 100644
--- a/docs/html/general_considerations.html
+++ b/docs/html/general_considerations.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: General considerations</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -107,6 +110,7 @@
 Features not supported</h1>
 <p>Features deliberately excluded from the scope of this library:</p>
 <ul>
+<li>Sparse resources.</li>
 <li>Data transfer - issuing commands that transfer data between buffers or images, any usage of <code>VkCommandList</code> or <code>VkQueue</code> and related synchronization is responsibility of the user.</li>
 <li>Allocations for imported/exported external memory. They tend to require explicit memory type index and dedicated allocation anyway, so they don't interact with main features of this library. Such special purpose allocations should be made manually, using <code>vkCreateBuffer()</code> and <code>vkAllocateMemory()</code>.</li>
 <li>Support for any programming languages other than C/C++. Bindings to other languages are welcomed as external projects. </li>
@@ -116,7 +120,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/globals.html b/docs/html/globals.html
index 73bdc76..9a820a8 100644
--- a/docs/html/globals.html
+++ b/docs/html/globals.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: File Members</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 </div><!-- top -->
 <!-- window showing the filter options -->
@@ -60,6 +63,13 @@
 <div class="contents">
 <div class="textblock">Here is a list of all file members with links to the files they belong to:</div>
 
+<h3><a id="index_n"></a>- n -</h3><ul>
+<li>NOMINMAX
+: <a class="el" href="vk__mem__alloc_8h.html#a9f918755b601cf4bffca775992e6fb90">vk_mem_alloc.h</a>
+</li>
+</ul>
+
+
 <h3><a id="index_p"></a>- p -</h3><ul>
 <li>PFN_vmaAllocateDeviceMemoryFunction
 : <a class="el" href="vk__mem__alloc_8h.html#ab6a6477cda1ce775b30bde96d766203b">vk_mem_alloc.h</a>
@@ -276,7 +286,7 @@
 : <a class="el" href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069">vk_mem_alloc.h</a>
 </li>
 <li>VmaMemoryUsage
-: <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc">vk_mem_alloc.h</a>
+: <a class="el" href="vk__mem__alloc_8h.html#ad63b2113c0bfdbeade1cb498f5a8580d">vk_mem_alloc.h</a>
 </li>
 <li>VmaPoolCreateFlagBits
 : <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7">vk_mem_alloc.h</a>
@@ -326,7 +336,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/globals_defs.html b/docs/html/globals_defs.html
index ca5de3f..1224f07 100644
--- a/docs/html/globals_defs.html
+++ b/docs/html/globals_defs.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: File Members</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 </div><!-- top -->
 <!-- window showing the filter options -->
@@ -59,6 +62,9 @@
 
 <div class="contents">
 &#160;<ul>
+<li>NOMINMAX
+: <a class="el" href="vk__mem__alloc_8h.html#a9f918755b601cf4bffca775992e6fb90">vk_mem_alloc.h</a>
+</li>
 <li>VMA_DEDICATED_ALLOCATION
 : <a class="el" href="vk__mem__alloc_8h.html#af7b860e63b96d11e44ae8587ba06bbf4">vk_mem_alloc.h</a>
 </li>
@@ -74,7 +80,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/globals_enum.html b/docs/html/globals_enum.html
index d295ccd..ba9dcc7 100644
--- a/docs/html/globals_enum.html
+++ b/docs/html/globals_enum.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: File Members</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 </div><!-- top -->
 <!-- window showing the filter options -->
@@ -80,7 +83,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/globals_eval.html b/docs/html/globals_eval.html
index 38d7955..78c213a 100644
--- a/docs/html/globals_eval.html
+++ b/docs/html/globals_eval.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: File Members</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 </div><!-- top -->
 <!-- window showing the filter options -->
@@ -131,7 +134,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/globals_func.html b/docs/html/globals_func.html
index a31da7d..bcad79b 100644
--- a/docs/html/globals_func.html
+++ b/docs/html/globals_func.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: File Members</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 </div><!-- top -->
 <!-- window showing the filter options -->
@@ -178,7 +181,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/globals_type.html b/docs/html/globals_type.html
index 68106a1..e0c4903 100644
--- a/docs/html/globals_type.html
+++ b/docs/html/globals_type.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: File Members</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 </div><!-- top -->
 <!-- window showing the filter options -->
@@ -134,7 +137,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/index.html b/docs/html/index.html
index 298454e..01b0a08 100644
--- a/docs/html/index.html
+++ b/docs/html/index.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Vulkan Memory Allocator</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 </div><!-- top -->
 <!-- window showing the filter options -->
@@ -154,7 +157,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/jquery.js b/docs/html/jquery.js
index f5343ed..2771c74 100644
--- a/docs/html/jquery.js
+++ b/docs/html/jquery.js
@@ -1,3 +1,31 @@
+/*
+ @licstart  The following is the entire license notice for the
+ JavaScript code in this file.
+
+ Copyright (C) 1997-2017 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend  The above is the entire license notice
+ for the JavaScript code in this file
+ */
 /*!
  * jQuery JavaScript Library v1.7.1
  * http://jquery.com/
@@ -53,7 +81,7 @@
 (function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g<l.length;g++){var j=c.trim(l[g]),e="ui-resizable-"+j;var h=c('<div class="ui-resizable-handle '+e+'"></div>');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(h<e.maxWidth){e.maxWidth=h}if(k<e.maxHeight){e.maxHeight=k}}this._vBoundaries=e},_updateCache:function(e){var f=this.options;this.offset=this.helper.offset();if(a(e.left)){this.position.left=e.left}if(a(e.top)){this.position.top=e.top}if(a(e.height)){this.size.height=e.height}if(a(e.width)){this.size.width=e.width}},_updateRatio:function(h,g){var i=this.options,j=this.position,f=this.size,e=this.axis;if(a(h.height)){h.width=(h.height*this.aspectRatio)}else{if(a(h.width)){h.height=(h.width/this.aspectRatio)}}if(e=="sw"){h.left=j.left+(f.width-h.width);h.top=null}if(e=="nw"){h.top=j.top+(f.height-h.height);h.left=j.left+(f.width-h.width)}return h},_respectSize:function(l,g){var j=this.helper,i=this._vBoundaries,r=this._aspectRatio||g.shiftKey,q=this.axis,t=a(l.width)&&i.maxWidth&&(i.maxWidth<l.width),m=a(l.height)&&i.maxHeight&&(i.maxHeight<l.height),h=a(l.width)&&i.minWidth&&(i.minWidth>l.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f<this._proportionallyResizeElements.length;f++){var h=this._proportionallyResizeElements[f];if(!this.borderDif){var e=[h.css("borderTopWidth"),h.css("borderRightWidth"),h.css("borderBottomWidth"),h.css("borderLeftWidth")],j=[h.css("paddingTop"),h.css("paddingRight"),h.css("paddingBottom"),h.css("paddingLeft")];this.borderDif=c.map(e,function(l,n){var m=parseInt(l,10)||0,o=parseInt(j[n],10)||0;return m+o})}if(c.browser.msie&&!(!(c(g).is(":hidden")||c(g).parents(":hidden").length))){continue}h.css({height:(g.height()-this.borderDif[0]-this.borderDif[2])||0,width:(g.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var f=this.element,i=this.options;this.elementOffset=f.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*!
  * jQuery hashchange event - v1.3 - 7/21/2010
  * http://benalman.com/projects/jquery-hashchange-plugin/
- * 
+ *
  * Copyright (c) 2010 "Cowboy" Ben Alman
  * Dual licensed under the MIT and GPL licenses.
  * http://benalman.com/about/license/
@@ -84,4 +112,4 @@
  *
  * Licensed MIT
  */
-(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{if(typeof module==="object"&&typeof module.exports==="object"){module.exports=a(require("jquery"))}else{a(jQuery)}}}(function(a){var b=[],e=!!window.createPopup,f=false,d="ontouchstart" in window,h=false,g=window.requestAnimationFrame||function(l){return setTimeout(l,1000/60)},c=window.cancelAnimationFrame||function(l){clearTimeout(l)};function k(m){var n=".smartmenus_mouse";if(!h&&!m){var o=true,l=null;a(document).bind(i([["mousemove",function(s){var t={x:s.pageX,y:s.pageY,timeStamp:new Date().getTime()};if(l){var q=Math.abs(l.x-t.x),p=Math.abs(l.y-t.y);if((q>0||p>0)&&q<=2&&p<=2&&t.timeStamp-l.timeStamp<=300){f=true;if(o){var r=a(s.target).closest("a");if(r.is("a")){a.each(b,function(){if(a.contains(this.$root[0],r[0])){this.itemEnter({currentTarget:r[0]});return false}})}o=false}}}l=t}],[d?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut",function(p){if(j(p.originalEvent)){f=false}}]],n));h=true}else{if(h&&m){a(document).unbind(n);h=false}}}function j(l){return !/^(4|mouse)$/.test(l.pointerType)}function i(l,n){if(!n){n=""}var m={};a.each(l,function(o,p){m[p[0].split(" ").join(n+" ")+n]=p[1]});return m}a.SmartMenus=function(m,l){this.$root=a(m);this.opts=l;this.rootId="";this.accessIdPrefix="";this.$subArrow=null;this.activatedItems=[];this.visibleSubMenus=[];this.showTimeout=0;this.hideTimeout=0;this.scrollTimeout=0;this.clickActivated=false;this.focusActivated=false;this.zIndexInc=0;this.idInc=0;this.$firstLink=null;this.$firstSub=null;this.disabled=false;this.$disableOverlay=null;this.$touchScrollingSub=null;this.cssTransforms3d="perspective" in m.style||"webkitPerspective" in m.style;this.wasCollapsible=false;this.init()};a.extend(a.SmartMenus,{hideAll:function(){a.each(b,function(){this.menuHideAll()})},destroy:function(){while(b.length){b[0].destroy()}k(true)},prototype:{init:function(n){var l=this;if(!n){b.push(this);this.rootId=(new Date().getTime()+Math.random()+"").replace(/\D/g,"");this.accessIdPrefix="sm-"+this.rootId+"-";if(this.$root.hasClass("sm-rtl")){this.opts.rightToLeftSubMenus=true}var r=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).bind(i([["mouseover focusin",a.proxy(this.rootOver,this)],["mouseout focusout",a.proxy(this.rootOut,this)],["keydown",a.proxy(this.rootKeyDown,this)]],r)).delegate("a",i([["mouseenter",a.proxy(this.itemEnter,this)],["mouseleave",a.proxy(this.itemLeave,this)],["mousedown",a.proxy(this.itemDown,this)],["focus",a.proxy(this.itemFocus,this)],["blur",a.proxy(this.itemBlur,this)],["click",a.proxy(this.itemClick,this)]],r));r+=this.rootId;if(this.opts.hideOnClick){a(document).bind(i([["touchstart",a.proxy(this.docTouchStart,this)],["touchmove",a.proxy(this.docTouchMove,this)],["touchend",a.proxy(this.docTouchEnd,this)],["click",a.proxy(this.docClick,this)]],r))}a(window).bind(i([["resize orientationchange",a.proxy(this.winResize,this)]],r));if(this.opts.subIndicators){this.$subArrow=a("<span/>").addClass("sub-arrow");if(this.opts.subIndicatorsText){this.$subArrow.html(this.opts.subIndicatorsText)}}k()}this.$firstSub=this.$root.find("ul").each(function(){l.menuInit(a(this))}).eq(0);this.$firstLink=this.$root.find("a").eq(0);if(this.opts.markCurrentItem){var p=/(index|default)\.[^#\?\/]*/i,m=/#.*/,q=window.location.href.replace(p,""),o=q.replace(m,"");this.$root.find("a").each(function(){var s=this.href.replace(p,""),t=a(this);if(s==q||s==o){t.addClass("current");if(l.opts.markCurrentTree){t.parentsUntil("[data-smartmenus-id]","ul").each(function(){a(this).dataSM("parent-a").addClass("current")})}}})}this.wasCollapsible=this.isCollapsible()},destroy:function(m){if(!m){var n=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").unbind(n).undelegate(n);n+=this.rootId;a(document).unbind(n);a(window).unbind(n);if(this.opts.subIndicators){this.$subArrow=null}}this.menuHideAll();var l=this;this.$root.find("ul").each(function(){var o=a(this);if(o.dataSM("scroll-arrows")){o.dataSM("scroll-arrows").remove()}if(o.dataSM("shown-before")){if(l.opts.subMenusMinWidth||l.opts.subMenusMaxWidth){o.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap")}if(o.dataSM("scroll-arrows")){o.dataSM("scroll-arrows").remove()}o.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})}if((o.attr("id")||"").indexOf(l.accessIdPrefix)==0){o.removeAttr("id")}}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("ie-shim").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded");this.$root.find("a.has-submenu").each(function(){var o=a(this);if(o.attr("id").indexOf(l.accessIdPrefix)==0){o.removeAttr("id")}}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub");if(this.opts.subIndicators){this.$root.find("span.sub-arrow").remove()}if(this.opts.markCurrentItem){this.$root.find("a.current").removeClass("current")}if(!m){this.$root=null;this.$firstLink=null;this.$firstSub=null;if(this.$disableOverlay){this.$disableOverlay.remove();this.$disableOverlay=null}b.splice(a.inArray(this,b),1)}},disable:function(l){if(!this.disabled){this.menuHideAll();if(!l&&!this.opts.isPopup&&this.$root.is(":visible")){var m=this.$root.offset();this.$disableOverlay=a('<div class="sm-jquery-disable-overlay"/>').css({position:"absolute",top:m.top,left:m.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(true),opacity:0}).appendTo(document.body)}this.disabled=true}},docClick:function(l){if(this.$touchScrollingSub){this.$touchScrollingSub=null;return}if(this.visibleSubMenus.length&&!a.contains(this.$root[0],l.target)||a(l.target).is("a")){this.menuHideAll()}},docTouchEnd:function(m){if(!this.lastTouch){return}if(this.visibleSubMenus.length&&(this.lastTouch.x2===undefined||this.lastTouch.x1==this.lastTouch.x2)&&(this.lastTouch.y2===undefined||this.lastTouch.y1==this.lastTouch.y2)&&(!this.lastTouch.target||!a.contains(this.$root[0],this.lastTouch.target))){if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}var l=this;this.hideTimeout=setTimeout(function(){l.menuHideAll()},350)}this.lastTouch=null},docTouchMove:function(m){if(!this.lastTouch){return}var l=m.originalEvent.touches[0];this.lastTouch.x2=l.pageX;this.lastTouch.y2=l.pageY},docTouchStart:function(m){var l=m.originalEvent.touches[0];this.lastTouch={x1:l.pageX,y1:l.pageY,target:l.target}},enable:function(){if(this.disabled){if(this.$disableOverlay){this.$disableOverlay.remove();this.$disableOverlay=null}this.disabled=false}},getClosestMenu:function(m){var l=a(m).closest("ul");while(l.dataSM("in-mega")){l=l.parent().closest("ul")}return l[0]||null},getHeight:function(l){return this.getOffset(l,true)},getOffset:function(n,l){var m;if(n.css("display")=="none"){m={position:n[0].style.position,visibility:n[0].style.visibility};n.css({position:"absolute",visibility:"hidden"}).show()}var o=n[0].getBoundingClientRect&&n[0].getBoundingClientRect(),p=o&&(l?o.height||o.bottom-o.top:o.width||o.right-o.left);if(!p&&p!==0){p=l?n[0].offsetHeight:n[0].offsetWidth}if(m){n.hide().css(m)}return p},getStartZIndex:function(l){var m=parseInt(this[l?"$root":"$firstSub"].css("z-index"));if(!l&&isNaN(m)){m=parseInt(this.$root.css("z-index"))}return !isNaN(m)?m:1},getTouchPoint:function(l){return l.touches&&l.touches[0]||l.changedTouches&&l.changedTouches[0]||l},getViewport:function(l){var m=l?"Height":"Width",o=document.documentElement["client"+m],n=window["inner"+m];if(n){o=Math.min(o,n)}return o},getViewportHeight:function(){return this.getViewport(true)},getViewportWidth:function(){return this.getViewport()},getWidth:function(l){return this.getOffset(l)},handleEvents:function(){return !this.disabled&&this.isCSSOn()},handleItemEvents:function(l){return this.handleEvents()&&!this.isLinkInMegaMenu(l)},isCollapsible:function(){return this.$firstSub.css("position")=="static"},isCSSOn:function(){return this.$firstLink.css("display")=="block"},isFixed:function(){var l=this.$root.css("position")=="fixed";if(!l){this.$root.parentsUntil("body").each(function(){if(a(this).css("position")=="fixed"){l=true;return false}})}return l},isLinkInMegaMenu:function(l){return a(this.getClosestMenu(l[0])).hasClass("mega-menu")},isTouchMode:function(){return !f||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(p,l){var n=p.closest("ul"),q=n.dataSM("level");if(q>1&&(!this.activatedItems[q-2]||this.activatedItems[q-2][0]!=n.dataSM("parent-a")[0])){var m=this;a(n.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(n).each(function(){m.itemActivate(a(this).dataSM("parent-a"))})}if(!this.isCollapsible()||l){this.menuHideSubMenus(!this.activatedItems[q-1]||this.activatedItems[q-1][0]!=p[0]?q-1:q)}this.activatedItems[q-1]=p;if(this.$root.triggerHandler("activate.smapi",p[0])===false){return}var o=p.dataSM("sub");if(o&&(this.isTouchMode()||(!this.opts.showOnClick||this.clickActivated))){this.menuShow(o)}},itemBlur:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}this.$root.triggerHandler("blur.smapi",l[0])},itemClick:function(o){var n=a(o.currentTarget);if(!this.handleItemEvents(n)){return}if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==n.closest("ul")[0]){this.$touchScrollingSub=null;o.stopPropagation();return false}if(this.$root.triggerHandler("click.smapi",n[0])===false){return false}var p=a(o.target).is("span.sub-arrow"),m=n.dataSM("sub"),l=m?m.dataSM("level")==2:false;if(m&&!m.is(":visible")){if(this.opts.showOnClick&&l){this.clickActivated=true}this.itemActivate(n);if(m.is(":visible")){this.focusActivated=true;return false}}else{if(this.isCollapsible()&&p){this.itemActivate(n);this.menuHide(m);return false}}if(this.opts.showOnClick&&l||n.hasClass("disabled")||this.$root.triggerHandler("select.smapi",n[0])===false){return false}},itemDown:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}l.dataSM("mousedown",true)},itemEnter:function(n){var m=a(n.currentTarget);if(!this.handleItemEvents(m)){return}if(!this.isTouchMode()){if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}var l=this;this.showTimeout=setTimeout(function(){l.itemActivate(m)},this.opts.showOnClick&&m.closest("ul").dataSM("level")==1?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",m[0])},itemFocus:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}if(this.focusActivated&&(!this.isTouchMode()||!l.dataSM("mousedown"))&&(!this.activatedItems.length||this.activatedItems[this.activatedItems.length-1][0]!=l[0])){this.itemActivate(l,true)}this.$root.triggerHandler("focus.smapi",l[0])},itemLeave:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}if(!this.isTouchMode()){l[0].blur();if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}}l.removeDataSM("mousedown");this.$root.triggerHandler("mouseleave.smapi",l[0])},menuHide:function(m){if(this.$root.triggerHandler("beforehide.smapi",m[0])===false){return}m.stop(true,true);if(m.css("display")!="none"){var l=function(){m.css("z-index","")};if(this.isCollapsible()){if(this.opts.collapsibleHideFunction){this.opts.collapsibleHideFunction.call(this,m,l)}else{m.hide(this.opts.collapsibleHideDuration,l)}}else{if(this.opts.hideFunction){this.opts.hideFunction.call(this,m,l)}else{m.hide(this.opts.hideDuration,l)}}if(m.dataSM("ie-shim")){m.dataSM("ie-shim").remove().css({"-webkit-transform":"",transform:""})}if(m.dataSM("scroll")){this.menuScrollStop(m);m.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).unbind(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()}m.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false");m.attr({"aria-expanded":"false","aria-hidden":"true"});var n=m.dataSM("level");this.activatedItems.splice(n-1,1);this.visibleSubMenus.splice(a.inArray(m,this.visibleSubMenus),1);this.$root.triggerHandler("hide.smapi",m[0])}},menuHideAll:function(){if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}var m=this.opts.isPopup?1:0;for(var l=this.visibleSubMenus.length-1;l>=m;l--){this.menuHide(this.visibleSubMenus[l])}if(this.opts.isPopup){this.$root.stop(true,true);if(this.$root.is(":visible")){if(this.opts.hideFunction){this.opts.hideFunction.call(this,this.$root)}else{this.$root.hide(this.opts.hideDuration)}if(this.$root.dataSM("ie-shim")){this.$root.dataSM("ie-shim").remove()}}}this.activatedItems=[];this.visibleSubMenus=[];this.clickActivated=false;this.focusActivated=false;this.zIndexInc=0;this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(n){for(var l=this.activatedItems.length-1;l>=n;l--){var m=this.activatedItems[l].dataSM("sub");if(m){this.menuHide(m)}}},menuIframeShim:function(l){if(e&&this.opts.overlapControlsInIE&&!l.dataSM("ie-shim")){l.dataSM("ie-shim",a("<iframe/>").attr({src:"javascript:0",tabindex:-9}).css({position:"absolute",top:"auto",left:"0",opacity:0,border:"0"}))}},menuInit:function(l){if(!l.dataSM("in-mega")){if(l.hasClass("mega-menu")){l.find("ul").dataSM("in-mega",true)}var q=2,m=l[0];while((m=m.parentNode.parentNode)!=this.$root[0]){q++}var n=l.prevAll("a").eq(-1);if(!n.length){n=l.prevAll().find("a").eq(-1)}n.addClass("has-submenu").dataSM("sub",l);l.dataSM("parent-a",n).dataSM("level",q).parent().dataSM("sub",l);var o=n.attr("id")||this.accessIdPrefix+(++this.idInc),p=l.attr("id")||this.accessIdPrefix+(++this.idInc);n.attr({id:o,"aria-haspopup":"true","aria-controls":p,"aria-expanded":"false"});l.attr({id:p,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"});if(this.opts.subIndicators){n[this.opts.subIndicatorsPos](this.$subArrow.clone())}}},menuPosition:function(K){var r=K.dataSM("parent-a"),D=r.closest("li"),E=D.parent(),l=K.dataSM("level"),t=this.getWidth(K),J=this.getHeight(K),u=r.offset(),o=u.left,m=u.top,q=this.getWidth(r),F=this.getHeight(r),H=a(window),v=H.scrollLeft(),s=H.scrollTop(),z=this.getViewportWidth(),L=this.getViewportHeight(),w=E.parent().is("[data-sm-horizontal-sub]")||l==2&&!E.hasClass("sm-vertical"),B=this.opts.rightToLeftSubMenus&&!D.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&D.is("[data-sm-reverse]"),p=l==2?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,n=l==2?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY,C,A;if(w){C=B?q-t-p:p;A=this.opts.bottomToTopSubMenus?-J-n:F+n}else{C=B?p-t:q-p;A=this.opts.bottomToTopSubMenus?F-n-J:n}if(this.opts.keepInViewport){var N=o+C,M=m+A;if(B&&N<v){C=w?v-N+C:q-p}else{if(!B&&N+t>v+z){C=w?v+z-t-N+C:p-t}}if(!w){if(J<L&&M+J>s+L){A+=s+L-J-M}else{if(J>=L||M<s){A+=s-M}}}if(w&&(M+J>s+L+0.49||M<s)||!w&&J>L+0.49){var G=this;if(!K.dataSM("scroll-arrows")){K.dataSM("scroll-arrows",a([a('<span class="scroll-up"><span class="scroll-up-arrow"></span></span>')[0],a('<span class="scroll-down"><span class="scroll-down-arrow"></span></span>')[0]]).bind({mouseenter:function(){K.dataSM("scroll").up=a(this).hasClass("scroll-up");G.menuScroll(K)},mouseleave:function(x){G.menuScrollStop(K);G.menuScrollOut(K,x)},"mousewheel DOMMouseScroll":function(x){x.preventDefault()}}).insertAfter(K))}var I=".smartmenus_scroll";K.dataSM("scroll",{y:this.cssTransforms3d?0:A-F,step:1,itemH:F,subH:J,arrowDownH:this.getHeight(K.dataSM("scroll-arrows").eq(1))}).bind(i([["mouseover",function(x){G.menuScrollOver(K,x)}],["mouseout",function(x){G.menuScrollOut(K,x)}],["mousewheel DOMMouseScroll",function(x){G.menuScrollMousewheel(K,x)}]],I)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:C+(parseInt(K.css("border-left-width"))||0),width:t-(parseInt(K.css("border-left-width"))||0)-(parseInt(K.css("border-right-width"))||0),zIndex:K.css("z-index")}).eq(w&&this.opts.bottomToTopSubMenus?0:1).show();if(this.isFixed()){K.css({"touch-action":"none","-ms-touch-action":"none"}).bind(i([[d?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp",function(x){G.menuScrollTouch(K,x)}]],I))}}}K.css({top:"auto",left:"0",marginLeft:C,marginTop:A-F});this.menuIframeShim(K);if(K.dataSM("ie-shim")){K.dataSM("ie-shim").css({zIndex:K.css("z-index"),width:t,height:J,marginLeft:C,marginTop:A-F})}},menuScroll:function(r,m,n){var p=r.dataSM("scroll"),q=r.dataSM("scroll-arrows"),o=p.up?p.upEnd:p.downEnd,s;if(!m&&p.momentum){p.momentum*=0.92;s=p.momentum;if(s<0.5){this.menuScrollStop(r);return}}else{s=n||(m||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(p.step))}var l=r.dataSM("level");if(this.activatedItems[l-1]&&this.activatedItems[l-1].dataSM("sub")&&this.activatedItems[l-1].dataSM("sub").is(":visible")){this.menuHideSubMenus(l-1)}p.y=p.up&&o<=p.y||!p.up&&o>=p.y?p.y:(Math.abs(o-p.y)>s?p.y+(p.up?s:-s):o);r.add(r.dataSM("ie-shim")).css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+p.y+"px, 0)",transform:"translate3d(0, "+p.y+"px, 0)"}:{marginTop:p.y});if(f&&(p.up&&p.y>p.downEnd||!p.up&&p.y<p.upEnd)){q.eq(p.up?1:0).show()}if(p.y==o){if(f){q.eq(p.up?0:1).hide()}this.menuScrollStop(r)}else{if(!m){if(this.opts.scrollAccelerate&&p.step<this.opts.scrollStep){p.step+=0.2}var t=this;this.scrollTimeout=g(function(){t.menuScroll(r)})}}},menuScrollMousewheel:function(m,n){if(this.getClosestMenu(n.target)==m[0]){n=n.originalEvent;var l=(n.wheelDelta||-n.detail)>0;if(m.dataSM("scroll-arrows").eq(l?0:1).is(":visible")){m.dataSM("scroll").up=l;this.menuScroll(m,true)}}n.preventDefault()},menuScrollOut:function(l,m){if(f){if(!/^scroll-(up|down)/.test((m.relatedTarget||"").className)&&(l[0]!=m.relatedTarget&&!a.contains(l[0],m.relatedTarget)||this.getClosestMenu(m.relatedTarget)!=l[0])){l.dataSM("scroll-arrows").css("visibility","hidden")}}},menuScrollOver:function(n,o){if(f){if(!/^scroll-(up|down)/.test(o.target.className)&&this.getClosestMenu(o.target)==n[0]){this.menuScrollRefreshData(n);var m=n.dataSM("scroll"),l=a(window).scrollTop()-n.dataSM("parent-a").offset().top-m.itemH;n.dataSM("scroll-arrows").eq(0).css("margin-top",l).end().eq(1).css("margin-top",l+this.getViewportHeight()-m.arrowDownH).end().css("visibility","visible")}}},menuScrollRefreshData:function(n){var m=n.dataSM("scroll"),l=a(window).scrollTop()-n.dataSM("parent-a").offset().top-m.itemH;if(this.cssTransforms3d){l=-(parseFloat(n.css("margin-top"))-l)}a.extend(m,{upEnd:l,downEnd:l+this.getViewportHeight()-m.subH})},menuScrollStop:function(l){if(this.scrollTimeout){c(this.scrollTimeout);this.scrollTimeout=0;l.dataSM("scroll").step=1;return true}},menuScrollTouch:function(p,q){q=q.originalEvent;if(j(q)){var m=this.getTouchPoint(q);if(this.getClosestMenu(m.target)==p[0]){var o=p.dataSM("scroll");if(/(start|down)$/i.test(q.type)){if(this.menuScrollStop(p)){q.preventDefault();this.$touchScrollingSub=p}else{this.$touchScrollingSub=null}this.menuScrollRefreshData(p);a.extend(o,{touchStartY:m.pageY,touchStartTime:q.timeStamp})}else{if(/move$/i.test(q.type)){var n=o.touchY!==undefined?o.touchY:o.touchStartY;if(n!==undefined&&n!=m.pageY){this.$touchScrollingSub=p;var l=n<m.pageY;if(o.up!==undefined&&o.up!=l){a.extend(o,{touchStartY:m.pageY,touchStartTime:q.timeStamp})}a.extend(o,{up:l,touchY:m.pageY});this.menuScroll(p,true,Math.abs(m.pageY-n))}q.preventDefault()}else{if(o.touchY!==undefined){if(o.momentum=Math.pow(Math.abs(m.pageY-o.touchStartY)/(q.timeStamp-o.touchStartTime),2)*15){this.menuScrollStop(p);this.menuScroll(p);q.preventDefault()}delete o.touchY}}}}}},menuShow:function(n){if(!n.dataSM("beforefirstshowfired")){n.dataSM("beforefirstshowfired",true);if(this.$root.triggerHandler("beforefirstshow.smapi",n[0])===false){return}}if(this.$root.triggerHandler("beforeshow.smapi",n[0])===false){return}n.dataSM("shown-before",true).stop(true,true);if(!n.is(":visible")){var m=n.dataSM("parent-a");if(this.opts.keepHighlighted||this.isCollapsible()){m.addClass("highlighted")}if(this.isCollapsible()){n.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""})}else{n.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1);if(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth){n.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap");if(this.opts.subMenusMinWidth){n.css("min-width",this.opts.subMenusMinWidth)}if(this.opts.subMenusMaxWidth){var o=this.getWidth(n);n.css("max-width",this.opts.subMenusMaxWidth);if(o>this.getWidth(n)){n.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}}}this.menuPosition(n);if(n.dataSM("ie-shim")){n.dataSM("ie-shim").insertBefore(n)}}var l=function(){n.css("overflow","")};if(this.isCollapsible()){if(this.opts.collapsibleShowFunction){this.opts.collapsibleShowFunction.call(this,n,l)}else{n.show(this.opts.collapsibleShowDuration,l)}}else{if(this.opts.showFunction){this.opts.showFunction.call(this,n,l)}else{n.show(this.opts.showDuration,l)}}m.attr("aria-expanded","true");n.attr({"aria-expanded":"true","aria-hidden":"false"});this.visibleSubMenus.push(n);this.$root.triggerHandler("show.smapi",n[0])}},popupHide:function(l){if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}var m=this;this.hideTimeout=setTimeout(function(){m.menuHideAll()},l?1:this.opts.hideTimeout)},popupShow:function(o,n){if(!this.opts.isPopup){alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.');return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}this.$root.dataSM("shown-before",true).stop(true,true);if(!this.$root.is(":visible")){this.$root.css({left:o,top:n});this.menuIframeShim(this.$root);if(this.$root.dataSM("ie-shim")){this.$root.dataSM("ie-shim").css({zIndex:this.$root.css("z-index"),width:this.getWidth(this.$root),height:this.getHeight(this.$root),left:o,top:n}).insertBefore(this.$root)}var m=this,l=function(){m.$root.css("overflow","")};if(this.opts.showFunction){this.opts.showFunction.call(this,this.$root,l)}else{this.$root.show(this.opts.showDuration,l)}this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(true);this.init(true)},rootKeyDown:function(o){if(!this.handleEvents()){return}switch(o.keyCode){case 27:var m=this.activatedItems[0];if(m){this.menuHideAll();m[0].focus();var n=m.dataSM("sub");if(n){this.menuHide(n)}}break;case 32:var l=a(o.target);if(l.is("a")&&this.handleItemEvents(l)){var n=l.dataSM("sub");if(n&&!n.is(":visible")){this.itemClick({currentTarget:o.target});o.preventDefault()}}break}},rootOut:function(m){if(!this.handleEvents()||this.isTouchMode()||m.target==this.$root[0]){return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}if(!this.opts.showOnClick||!this.opts.hideOnClick){var l=this;this.hideTimeout=setTimeout(function(){l.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(l){if(!this.handleEvents()||this.isTouchMode()||l.target==this.$root[0]){return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}},winResize:function(m){if(!this.handleEvents()){if(this.$disableOverlay){var n=this.$root.offset();this.$disableOverlay.css({top:n.top,left:n.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}return}if(!("onorientationchange" in window)||m.type=="orientationchange"){var l=this.isCollapsible();if(!(this.wasCollapsible&&l)){if(this.activatedItems.length){this.activatedItems[this.activatedItems.length-1][0].blur()}this.menuHideAll()}this.wasCollapsible=l}}}});a.fn.dataSM=function(l,m){if(m){return this.data(l+"_smartmenus",m)}return this.data(l+"_smartmenus")};a.fn.removeDataSM=function(l){return this.removeData(l+"_smartmenus")};a.fn.smartmenus=function(m){if(typeof m=="string"){var l=arguments,o=m;Array.prototype.shift.call(l);return this.each(function(){var p=a(this).data("smartmenus");if(p&&p[o]){p[o].apply(p,l)}})}var n=a.extend({},a.fn.smartmenus.defaults,m);return this.each(function(){new a.SmartMenus(this,n)})};a.fn.smartmenus.defaults={isPopup:false,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:true,subIndicatorsPos:"prepend",subIndicatorsText:"+",scrollStep:30,scrollAccelerate:true,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(m,l){m.fadeOut(200,l)},collapsibleShowDuration:0,collapsibleShowFunction:function(m,l){m.slideDown(200,l)},collapsibleHideDuration:0,collapsibleHideFunction:function(m,l){m.slideUp(200,l)},showOnClick:false,hideOnClick:true,noMouseOver:false,keepInViewport:true,keepHighlighted:true,markCurrentItem:false,markCurrentTree:true,rightToLeftSubMenus:false,bottomToTopSubMenus:false,overlapControlsInIE:true};return a}));
\ No newline at end of file
+(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{if(typeof module==="object"&&typeof module.exports==="object"){module.exports=a(require("jquery"))}else{a(jQuery)}}}(function(a){var b=[],e=!!window.createPopup,f=false,d="ontouchstart" in window,h=false,g=window.requestAnimationFrame||function(l){return setTimeout(l,1000/60)},c=window.cancelAnimationFrame||function(l){clearTimeout(l)};function k(m){var n=".smartmenus_mouse";if(!h&&!m){var o=true,l=null;a(document).bind(i([["mousemove",function(s){var t={x:s.pageX,y:s.pageY,timeStamp:new Date().getTime()};if(l){var q=Math.abs(l.x-t.x),p=Math.abs(l.y-t.y);if((q>0||p>0)&&q<=2&&p<=2&&t.timeStamp-l.timeStamp<=300){f=true;if(o){var r=a(s.target).closest("a");if(r.is("a")){a.each(b,function(){if(a.contains(this.$root[0],r[0])){this.itemEnter({currentTarget:r[0]});return false}})}o=false}}}l=t}],[d?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut",function(p){if(j(p.originalEvent)){f=false}}]],n));h=true}else{if(h&&m){a(document).unbind(n);h=false}}}function j(l){return !/^(4|mouse)$/.test(l.pointerType)}function i(l,n){if(!n){n=""}var m={};a.each(l,function(o,p){m[p[0].split(" ").join(n+" ")+n]=p[1]});return m}a.SmartMenus=function(m,l){this.$root=a(m);this.opts=l;this.rootId="";this.accessIdPrefix="";this.$subArrow=null;this.activatedItems=[];this.visibleSubMenus=[];this.showTimeout=0;this.hideTimeout=0;this.scrollTimeout=0;this.clickActivated=false;this.focusActivated=false;this.zIndexInc=0;this.idInc=0;this.$firstLink=null;this.$firstSub=null;this.disabled=false;this.$disableOverlay=null;this.$touchScrollingSub=null;this.cssTransforms3d="perspective" in m.style||"webkitPerspective" in m.style;this.wasCollapsible=false;this.init()};a.extend(a.SmartMenus,{hideAll:function(){a.each(b,function(){this.menuHideAll()})},destroy:function(){while(b.length){b[0].destroy()}k(true)},prototype:{init:function(n){var l=this;if(!n){b.push(this);this.rootId=(new Date().getTime()+Math.random()+"").replace(/\D/g,"");this.accessIdPrefix="sm-"+this.rootId+"-";if(this.$root.hasClass("sm-rtl")){this.opts.rightToLeftSubMenus=true}var r=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).bind(i([["mouseover focusin",a.proxy(this.rootOver,this)],["mouseout focusout",a.proxy(this.rootOut,this)],["keydown",a.proxy(this.rootKeyDown,this)]],r)).delegate("a",i([["mouseenter",a.proxy(this.itemEnter,this)],["mouseleave",a.proxy(this.itemLeave,this)],["mousedown",a.proxy(this.itemDown,this)],["focus",a.proxy(this.itemFocus,this)],["blur",a.proxy(this.itemBlur,this)],["click",a.proxy(this.itemClick,this)]],r));r+=this.rootId;if(this.opts.hideOnClick){a(document).bind(i([["touchstart",a.proxy(this.docTouchStart,this)],["touchmove",a.proxy(this.docTouchMove,this)],["touchend",a.proxy(this.docTouchEnd,this)],["click",a.proxy(this.docClick,this)]],r))}a(window).bind(i([["resize orientationchange",a.proxy(this.winResize,this)]],r));if(this.opts.subIndicators){this.$subArrow=a("<span/>").addClass("sub-arrow");if(this.opts.subIndicatorsText){this.$subArrow.html(this.opts.subIndicatorsText)}}k()}this.$firstSub=this.$root.find("ul").each(function(){l.menuInit(a(this))}).eq(0);this.$firstLink=this.$root.find("a").eq(0);if(this.opts.markCurrentItem){var p=/(index|default)\.[^#\?\/]*/i,m=/#.*/,q=window.location.href.replace(p,""),o=q.replace(m,"");this.$root.find("a").each(function(){var s=this.href.replace(p,""),t=a(this);if(s==q||s==o){t.addClass("current");if(l.opts.markCurrentTree){t.parentsUntil("[data-smartmenus-id]","ul").each(function(){a(this).dataSM("parent-a").addClass("current")})}}})}this.wasCollapsible=this.isCollapsible()},destroy:function(m){if(!m){var n=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").unbind(n).undelegate(n);n+=this.rootId;a(document).unbind(n);a(window).unbind(n);if(this.opts.subIndicators){this.$subArrow=null}}this.menuHideAll();var l=this;this.$root.find("ul").each(function(){var o=a(this);if(o.dataSM("scroll-arrows")){o.dataSM("scroll-arrows").remove()}if(o.dataSM("shown-before")){if(l.opts.subMenusMinWidth||l.opts.subMenusMaxWidth){o.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap")}if(o.dataSM("scroll-arrows")){o.dataSM("scroll-arrows").remove()}o.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})}if((o.attr("id")||"").indexOf(l.accessIdPrefix)==0){o.removeAttr("id")}}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("ie-shim").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded");this.$root.find("a.has-submenu").each(function(){var o=a(this);if(o.attr("id").indexOf(l.accessIdPrefix)==0){o.removeAttr("id")}}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub");if(this.opts.subIndicators){this.$root.find("span.sub-arrow").remove()}if(this.opts.markCurrentItem){this.$root.find("a.current").removeClass("current")}if(!m){this.$root=null;this.$firstLink=null;this.$firstSub=null;if(this.$disableOverlay){this.$disableOverlay.remove();this.$disableOverlay=null}b.splice(a.inArray(this,b),1)}},disable:function(l){if(!this.disabled){this.menuHideAll();if(!l&&!this.opts.isPopup&&this.$root.is(":visible")){var m=this.$root.offset();this.$disableOverlay=a('<div class="sm-jquery-disable-overlay"/>').css({position:"absolute",top:m.top,left:m.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(true),opacity:0}).appendTo(document.body)}this.disabled=true}},docClick:function(l){if(this.$touchScrollingSub){this.$touchScrollingSub=null;return}if(this.visibleSubMenus.length&&!a.contains(this.$root[0],l.target)||a(l.target).is("a")){this.menuHideAll()}},docTouchEnd:function(m){if(!this.lastTouch){return}if(this.visibleSubMenus.length&&(this.lastTouch.x2===undefined||this.lastTouch.x1==this.lastTouch.x2)&&(this.lastTouch.y2===undefined||this.lastTouch.y1==this.lastTouch.y2)&&(!this.lastTouch.target||!a.contains(this.$root[0],this.lastTouch.target))){if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}var l=this;this.hideTimeout=setTimeout(function(){l.menuHideAll()},350)}this.lastTouch=null},docTouchMove:function(m){if(!this.lastTouch){return}var l=m.originalEvent.touches[0];this.lastTouch.x2=l.pageX;this.lastTouch.y2=l.pageY},docTouchStart:function(m){var l=m.originalEvent.touches[0];this.lastTouch={x1:l.pageX,y1:l.pageY,target:l.target}},enable:function(){if(this.disabled){if(this.$disableOverlay){this.$disableOverlay.remove();this.$disableOverlay=null}this.disabled=false}},getClosestMenu:function(m){var l=a(m).closest("ul");while(l.dataSM("in-mega")){l=l.parent().closest("ul")}return l[0]||null},getHeight:function(l){return this.getOffset(l,true)},getOffset:function(n,l){var m;if(n.css("display")=="none"){m={position:n[0].style.position,visibility:n[0].style.visibility};n.css({position:"absolute",visibility:"hidden"}).show()}var o=n[0].getBoundingClientRect&&n[0].getBoundingClientRect(),p=o&&(l?o.height||o.bottom-o.top:o.width||o.right-o.left);if(!p&&p!==0){p=l?n[0].offsetHeight:n[0].offsetWidth}if(m){n.hide().css(m)}return p},getStartZIndex:function(l){var m=parseInt(this[l?"$root":"$firstSub"].css("z-index"));if(!l&&isNaN(m)){m=parseInt(this.$root.css("z-index"))}return !isNaN(m)?m:1},getTouchPoint:function(l){return l.touches&&l.touches[0]||l.changedTouches&&l.changedTouches[0]||l},getViewport:function(l){var m=l?"Height":"Width",o=document.documentElement["client"+m],n=window["inner"+m];if(n){o=Math.min(o,n)}return o},getViewportHeight:function(){return this.getViewport(true)},getViewportWidth:function(){return this.getViewport()},getWidth:function(l){return this.getOffset(l)},handleEvents:function(){return !this.disabled&&this.isCSSOn()},handleItemEvents:function(l){return this.handleEvents()&&!this.isLinkInMegaMenu(l)},isCollapsible:function(){return this.$firstSub.css("position")=="static"},isCSSOn:function(){return this.$firstLink.css("display")=="block"},isFixed:function(){var l=this.$root.css("position")=="fixed";if(!l){this.$root.parentsUntil("body").each(function(){if(a(this).css("position")=="fixed"){l=true;return false}})}return l},isLinkInMegaMenu:function(l){return a(this.getClosestMenu(l[0])).hasClass("mega-menu")},isTouchMode:function(){return !f||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(p,l){var n=p.closest("ul"),q=n.dataSM("level");if(q>1&&(!this.activatedItems[q-2]||this.activatedItems[q-2][0]!=n.dataSM("parent-a")[0])){var m=this;a(n.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(n).each(function(){m.itemActivate(a(this).dataSM("parent-a"))})}if(!this.isCollapsible()||l){this.menuHideSubMenus(!this.activatedItems[q-1]||this.activatedItems[q-1][0]!=p[0]?q-1:q)}this.activatedItems[q-1]=p;if(this.$root.triggerHandler("activate.smapi",p[0])===false){return}var o=p.dataSM("sub");if(o&&(this.isTouchMode()||(!this.opts.showOnClick||this.clickActivated))){this.menuShow(o)}},itemBlur:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}this.$root.triggerHandler("blur.smapi",l[0])},itemClick:function(o){var n=a(o.currentTarget);if(!this.handleItemEvents(n)){return}if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==n.closest("ul")[0]){this.$touchScrollingSub=null;o.stopPropagation();return false}if(this.$root.triggerHandler("click.smapi",n[0])===false){return false}var p=a(o.target).is("span.sub-arrow"),m=n.dataSM("sub"),l=m?m.dataSM("level")==2:false;if(m&&!m.is(":visible")){if(this.opts.showOnClick&&l){this.clickActivated=true}this.itemActivate(n);if(m.is(":visible")){this.focusActivated=true;return false}}else{if(this.isCollapsible()&&p){this.itemActivate(n);this.menuHide(m);return false}}if(this.opts.showOnClick&&l||n.hasClass("disabled")||this.$root.triggerHandler("select.smapi",n[0])===false){return false}},itemDown:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}l.dataSM("mousedown",true)},itemEnter:function(n){var m=a(n.currentTarget);if(!this.handleItemEvents(m)){return}if(!this.isTouchMode()){if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}var l=this;this.showTimeout=setTimeout(function(){l.itemActivate(m)},this.opts.showOnClick&&m.closest("ul").dataSM("level")==1?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",m[0])},itemFocus:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}if(this.focusActivated&&(!this.isTouchMode()||!l.dataSM("mousedown"))&&(!this.activatedItems.length||this.activatedItems[this.activatedItems.length-1][0]!=l[0])){this.itemActivate(l,true)}this.$root.triggerHandler("focus.smapi",l[0])},itemLeave:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}if(!this.isTouchMode()){l[0].blur();if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}}l.removeDataSM("mousedown");this.$root.triggerHandler("mouseleave.smapi",l[0])},menuHide:function(m){if(this.$root.triggerHandler("beforehide.smapi",m[0])===false){return}m.stop(true,true);if(m.css("display")!="none"){var l=function(){m.css("z-index","")};if(this.isCollapsible()){if(this.opts.collapsibleHideFunction){this.opts.collapsibleHideFunction.call(this,m,l)}else{m.hide(this.opts.collapsibleHideDuration,l)}}else{if(this.opts.hideFunction){this.opts.hideFunction.call(this,m,l)}else{m.hide(this.opts.hideDuration,l)}}if(m.dataSM("ie-shim")){m.dataSM("ie-shim").remove().css({"-webkit-transform":"",transform:""})}if(m.dataSM("scroll")){this.menuScrollStop(m);m.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).unbind(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()}m.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false");m.attr({"aria-expanded":"false","aria-hidden":"true"});var n=m.dataSM("level");this.activatedItems.splice(n-1,1);this.visibleSubMenus.splice(a.inArray(m,this.visibleSubMenus),1);this.$root.triggerHandler("hide.smapi",m[0])}},menuHideAll:function(){if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}var m=this.opts.isPopup?1:0;for(var l=this.visibleSubMenus.length-1;l>=m;l--){this.menuHide(this.visibleSubMenus[l])}if(this.opts.isPopup){this.$root.stop(true,true);if(this.$root.is(":visible")){if(this.opts.hideFunction){this.opts.hideFunction.call(this,this.$root)}else{this.$root.hide(this.opts.hideDuration)}if(this.$root.dataSM("ie-shim")){this.$root.dataSM("ie-shim").remove()}}}this.activatedItems=[];this.visibleSubMenus=[];this.clickActivated=false;this.focusActivated=false;this.zIndexInc=0;this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(n){for(var l=this.activatedItems.length-1;l>=n;l--){var m=this.activatedItems[l].dataSM("sub");if(m){this.menuHide(m)}}},menuIframeShim:function(l){if(e&&this.opts.overlapControlsInIE&&!l.dataSM("ie-shim")){l.dataSM("ie-shim",a("<iframe/>").attr({src:"javascript:0",tabindex:-9}).css({position:"absolute",top:"auto",left:"0",opacity:0,border:"0"}))}},menuInit:function(l){if(!l.dataSM("in-mega")){if(l.hasClass("mega-menu")){l.find("ul").dataSM("in-mega",true)}var q=2,m=l[0];while((m=m.parentNode.parentNode)!=this.$root[0]){q++}var n=l.prevAll("a").eq(-1);if(!n.length){n=l.prevAll().find("a").eq(-1)}n.addClass("has-submenu").dataSM("sub",l);l.dataSM("parent-a",n).dataSM("level",q).parent().dataSM("sub",l);var o=n.attr("id")||this.accessIdPrefix+(++this.idInc),p=l.attr("id")||this.accessIdPrefix+(++this.idInc);n.attr({id:o,"aria-haspopup":"true","aria-controls":p,"aria-expanded":"false"});l.attr({id:p,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"});if(this.opts.subIndicators){n[this.opts.subIndicatorsPos](this.$subArrow.clone())}}},menuPosition:function(K){var r=K.dataSM("parent-a"),D=r.closest("li"),E=D.parent(),l=K.dataSM("level"),t=this.getWidth(K),J=this.getHeight(K),u=r.offset(),o=u.left,m=u.top,q=this.getWidth(r),F=this.getHeight(r),H=a(window),v=H.scrollLeft(),s=H.scrollTop(),z=this.getViewportWidth(),L=this.getViewportHeight(),w=E.parent().is("[data-sm-horizontal-sub]")||l==2&&!E.hasClass("sm-vertical"),B=this.opts.rightToLeftSubMenus&&!D.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&D.is("[data-sm-reverse]"),p=l==2?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,n=l==2?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY,C,A;if(w){C=B?q-t-p:p;A=this.opts.bottomToTopSubMenus?-J-n:F+n}else{C=B?p-t:q-p;A=this.opts.bottomToTopSubMenus?F-n-J:n}if(this.opts.keepInViewport){var N=o+C,M=m+A;if(B&&N<v){C=w?v-N+C:q-p}else{if(!B&&N+t>v+z){C=w?v+z-t-N+C:p-t}}if(!w){if(J<L&&M+J>s+L){A+=s+L-J-M}else{if(J>=L||M<s){A+=s-M}}}if(w&&(M+J>s+L+0.49||M<s)||!w&&J>L+0.49){var G=this;if(!K.dataSM("scroll-arrows")){K.dataSM("scroll-arrows",a([a('<span class="scroll-up"><span class="scroll-up-arrow"></span></span>')[0],a('<span class="scroll-down"><span class="scroll-down-arrow"></span></span>')[0]]).bind({mouseenter:function(){K.dataSM("scroll").up=a(this).hasClass("scroll-up");G.menuScroll(K)},mouseleave:function(x){G.menuScrollStop(K);G.menuScrollOut(K,x)},"mousewheel DOMMouseScroll":function(x){x.preventDefault()}}).insertAfter(K))}var I=".smartmenus_scroll";K.dataSM("scroll",{y:this.cssTransforms3d?0:A-F,step:1,itemH:F,subH:J,arrowDownH:this.getHeight(K.dataSM("scroll-arrows").eq(1))}).bind(i([["mouseover",function(x){G.menuScrollOver(K,x)}],["mouseout",function(x){G.menuScrollOut(K,x)}],["mousewheel DOMMouseScroll",function(x){G.menuScrollMousewheel(K,x)}]],I)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:C+(parseInt(K.css("border-left-width"))||0),width:t-(parseInt(K.css("border-left-width"))||0)-(parseInt(K.css("border-right-width"))||0),zIndex:K.css("z-index")}).eq(w&&this.opts.bottomToTopSubMenus?0:1).show();if(this.isFixed()){K.css({"touch-action":"none","-ms-touch-action":"none"}).bind(i([[d?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp",function(x){G.menuScrollTouch(K,x)}]],I))}}}K.css({top:"auto",left:"0",marginLeft:C,marginTop:A-F});this.menuIframeShim(K);if(K.dataSM("ie-shim")){K.dataSM("ie-shim").css({zIndex:K.css("z-index"),width:t,height:J,marginLeft:C,marginTop:A-F})}},menuScroll:function(r,m,n){var p=r.dataSM("scroll"),q=r.dataSM("scroll-arrows"),o=p.up?p.upEnd:p.downEnd,s;if(!m&&p.momentum){p.momentum*=0.92;s=p.momentum;if(s<0.5){this.menuScrollStop(r);return}}else{s=n||(m||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(p.step))}var l=r.dataSM("level");if(this.activatedItems[l-1]&&this.activatedItems[l-1].dataSM("sub")&&this.activatedItems[l-1].dataSM("sub").is(":visible")){this.menuHideSubMenus(l-1)}p.y=p.up&&o<=p.y||!p.up&&o>=p.y?p.y:(Math.abs(o-p.y)>s?p.y+(p.up?s:-s):o);r.add(r.dataSM("ie-shim")).css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+p.y+"px, 0)",transform:"translate3d(0, "+p.y+"px, 0)"}:{marginTop:p.y});if(f&&(p.up&&p.y>p.downEnd||!p.up&&p.y<p.upEnd)){q.eq(p.up?1:0).show()}if(p.y==o){if(f){q.eq(p.up?0:1).hide()}this.menuScrollStop(r)}else{if(!m){if(this.opts.scrollAccelerate&&p.step<this.opts.scrollStep){p.step+=0.2}var t=this;this.scrollTimeout=g(function(){t.menuScroll(r)})}}},menuScrollMousewheel:function(m,n){if(this.getClosestMenu(n.target)==m[0]){n=n.originalEvent;var l=(n.wheelDelta||-n.detail)>0;if(m.dataSM("scroll-arrows").eq(l?0:1).is(":visible")){m.dataSM("scroll").up=l;this.menuScroll(m,true)}}n.preventDefault()},menuScrollOut:function(l,m){if(f){if(!/^scroll-(up|down)/.test((m.relatedTarget||"").className)&&(l[0]!=m.relatedTarget&&!a.contains(l[0],m.relatedTarget)||this.getClosestMenu(m.relatedTarget)!=l[0])){l.dataSM("scroll-arrows").css("visibility","hidden")}}},menuScrollOver:function(n,o){if(f){if(!/^scroll-(up|down)/.test(o.target.className)&&this.getClosestMenu(o.target)==n[0]){this.menuScrollRefreshData(n);var m=n.dataSM("scroll"),l=a(window).scrollTop()-n.dataSM("parent-a").offset().top-m.itemH;n.dataSM("scroll-arrows").eq(0).css("margin-top",l).end().eq(1).css("margin-top",l+this.getViewportHeight()-m.arrowDownH).end().css("visibility","visible")}}},menuScrollRefreshData:function(n){var m=n.dataSM("scroll"),l=a(window).scrollTop()-n.dataSM("parent-a").offset().top-m.itemH;if(this.cssTransforms3d){l=-(parseFloat(n.css("margin-top"))-l)}a.extend(m,{upEnd:l,downEnd:l+this.getViewportHeight()-m.subH})},menuScrollStop:function(l){if(this.scrollTimeout){c(this.scrollTimeout);this.scrollTimeout=0;l.dataSM("scroll").step=1;return true}},menuScrollTouch:function(p,q){q=q.originalEvent;if(j(q)){var m=this.getTouchPoint(q);if(this.getClosestMenu(m.target)==p[0]){var o=p.dataSM("scroll");if(/(start|down)$/i.test(q.type)){if(this.menuScrollStop(p)){q.preventDefault();this.$touchScrollingSub=p}else{this.$touchScrollingSub=null}this.menuScrollRefreshData(p);a.extend(o,{touchStartY:m.pageY,touchStartTime:q.timeStamp})}else{if(/move$/i.test(q.type)){var n=o.touchY!==undefined?o.touchY:o.touchStartY;if(n!==undefined&&n!=m.pageY){this.$touchScrollingSub=p;var l=n<m.pageY;if(o.up!==undefined&&o.up!=l){a.extend(o,{touchStartY:m.pageY,touchStartTime:q.timeStamp})}a.extend(o,{up:l,touchY:m.pageY});this.menuScroll(p,true,Math.abs(m.pageY-n))}q.preventDefault()}else{if(o.touchY!==undefined){if(o.momentum=Math.pow(Math.abs(m.pageY-o.touchStartY)/(q.timeStamp-o.touchStartTime),2)*15){this.menuScrollStop(p);this.menuScroll(p);q.preventDefault()}delete o.touchY}}}}}},menuShow:function(n){if(!n.dataSM("beforefirstshowfired")){n.dataSM("beforefirstshowfired",true);if(this.$root.triggerHandler("beforefirstshow.smapi",n[0])===false){return}}if(this.$root.triggerHandler("beforeshow.smapi",n[0])===false){return}n.dataSM("shown-before",true).stop(true,true);if(!n.is(":visible")){var m=n.dataSM("parent-a");if(this.opts.keepHighlighted||this.isCollapsible()){m.addClass("highlighted")}if(this.isCollapsible()){n.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""})}else{n.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1);if(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth){n.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap");if(this.opts.subMenusMinWidth){n.css("min-width",this.opts.subMenusMinWidth)}if(this.opts.subMenusMaxWidth){var o=this.getWidth(n);n.css("max-width",this.opts.subMenusMaxWidth);if(o>this.getWidth(n)){n.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}}}this.menuPosition(n);if(n.dataSM("ie-shim")){n.dataSM("ie-shim").insertBefore(n)}}var l=function(){n.css("overflow","")};if(this.isCollapsible()){if(this.opts.collapsibleShowFunction){this.opts.collapsibleShowFunction.call(this,n,l)}else{n.show(this.opts.collapsibleShowDuration,l)}}else{if(this.opts.showFunction){this.opts.showFunction.call(this,n,l)}else{n.show(this.opts.showDuration,l)}}m.attr("aria-expanded","true");n.attr({"aria-expanded":"true","aria-hidden":"false"});this.visibleSubMenus.push(n);this.$root.triggerHandler("show.smapi",n[0])}},popupHide:function(l){if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}var m=this;this.hideTimeout=setTimeout(function(){m.menuHideAll()},l?1:this.opts.hideTimeout)},popupShow:function(o,n){if(!this.opts.isPopup){alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.');return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}this.$root.dataSM("shown-before",true).stop(true,true);if(!this.$root.is(":visible")){this.$root.css({left:o,top:n});this.menuIframeShim(this.$root);if(this.$root.dataSM("ie-shim")){this.$root.dataSM("ie-shim").css({zIndex:this.$root.css("z-index"),width:this.getWidth(this.$root),height:this.getHeight(this.$root),left:o,top:n}).insertBefore(this.$root)}var m=this,l=function(){m.$root.css("overflow","")};if(this.opts.showFunction){this.opts.showFunction.call(this,this.$root,l)}else{this.$root.show(this.opts.showDuration,l)}this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(true);this.init(true)},rootKeyDown:function(o){if(!this.handleEvents()){return}switch(o.keyCode){case 27:var m=this.activatedItems[0];if(m){this.menuHideAll();m[0].focus();var n=m.dataSM("sub");if(n){this.menuHide(n)}}break;case 32:var l=a(o.target);if(l.is("a")&&this.handleItemEvents(l)){var n=l.dataSM("sub");if(n&&!n.is(":visible")){this.itemClick({currentTarget:o.target});o.preventDefault()}}break}},rootOut:function(m){if(!this.handleEvents()||this.isTouchMode()||m.target==this.$root[0]){return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}if(!this.opts.showOnClick||!this.opts.hideOnClick){var l=this;this.hideTimeout=setTimeout(function(){l.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(l){if(!this.handleEvents()||this.isTouchMode()||l.target==this.$root[0]){return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}},winResize:function(m){if(!this.handleEvents()){if(this.$disableOverlay){var n=this.$root.offset();this.$disableOverlay.css({top:n.top,left:n.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}return}if(!("onorientationchange" in window)||m.type=="orientationchange"){var l=this.isCollapsible();if(!(this.wasCollapsible&&l)){if(this.activatedItems.length){this.activatedItems[this.activatedItems.length-1][0].blur()}this.menuHideAll()}this.wasCollapsible=l}}}});a.fn.dataSM=function(l,m){if(m){return this.data(l+"_smartmenus",m)}return this.data(l+"_smartmenus")};a.fn.removeDataSM=function(l){return this.removeData(l+"_smartmenus")};a.fn.smartmenus=function(m){if(typeof m=="string"){var l=arguments,o=m;Array.prototype.shift.call(l);return this.each(function(){var p=a(this).data("smartmenus");if(p&&p[o]){p[o].apply(p,l)}})}var n=a.extend({},a.fn.smartmenus.defaults,m);return this.each(function(){new a.SmartMenus(this,n)})};a.fn.smartmenus.defaults={isPopup:false,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:true,subIndicatorsPos:"prepend",subIndicatorsText:"+",scrollStep:30,scrollAccelerate:true,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(m,l){m.fadeOut(200,l)},collapsibleShowDuration:0,collapsibleShowFunction:function(m,l){m.slideDown(200,l)},collapsibleHideDuration:0,collapsibleHideFunction:function(m,l){m.slideUp(200,l)},showOnClick:false,hideOnClick:true,noMouseOver:false,keepInViewport:true,keepHighlighted:true,markCurrentItem:false,markCurrentTree:true,rightToLeftSubMenus:false,bottomToTopSubMenus:false,overlapControlsInIE:true};return a}));
diff --git a/docs/html/lost_allocations.html b/docs/html/lost_allocations.html
index b001774..9f6aa1b 100644
--- a/docs/html/lost_allocations.html
+++ b/docs/html/lost_allocations.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Lost allocations</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -77,7 +80,7 @@
 <p><b>Q: How do you inform the library when new frame starts?</b></p>
 <p>You need to call function <a class="el" href="vk__mem__alloc_8h.html#ade56bf8dc9f5a5eaddf5f119ed525236" title="Sets index of the current frame. ">vmaSetCurrentFrameIndex()</a>.</p>
 <p>Example code:</p>
-<div class="fragment"><div class="line"><span class="keyword">struct </span>MyBuffer</div><div class="line">{</div><div class="line">    VkBuffer m_Buf = <span class="keyword">nullptr</span>;</div><div class="line">    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> m_Alloc = <span class="keyword">nullptr</span>;</div><div class="line"></div><div class="line">    <span class="comment">// Called when the buffer is really needed in the current frame.</span></div><div class="line">    <span class="keywordtype">void</span> EnsureBuffer();</div><div class="line">};</div><div class="line"></div><div class="line"><span class="keywordtype">void</span> MyBuffer::EnsureBuffer()</div><div class="line">{</div><div class="line">    <span class="comment">// Buffer has been created.</span></div><div class="line">    <span class="keywordflow">if</span>(m_Buf != VK_NULL_HANDLE)</div><div class="line">    {</div><div class="line">        <span class="comment">// Check if its allocation is not lost + mark it as used in current frame.</span></div><div class="line">        <span class="keywordflow">if</span>(<a class="code" href="vk__mem__alloc_8h.html#a43d8ba9673c846f049089a5029d5c73a">vmaTouchAllocation</a>(allocator, m_Alloc))</div><div class="line">        {</div><div class="line">            <span class="comment">// It&#39;s all OK - safe to use m_Buf.</span></div><div class="line">            <span class="keywordflow">return</span>;</div><div class="line">        }</div><div class="line">    }</div><div class="line"></div><div class="line">    <span class="comment">// Buffer not yet exists or lost - destroy and recreate it.</span></div><div class="line"></div><div class="line">    <a class="code" href="vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77">vmaDestroyBuffer</a>(allocator, m_Buf, m_Alloc);</div><div class="line"></div><div class="line">    VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };</div><div class="line">    bufCreateInfo.size = 1024;</div><div class="line">    bufCreateInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;</div><div class="line"></div><div class="line">    <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> allocCreateInfo = {};</div><div class="line">    allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a> = <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>;</div><div class="line">    allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> = VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT |</div><div class="line">        <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a68686d0ce9beb0d4d1b9f2b8b1389a7e">VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT</a>;</div><div class="line"></div><div class="line">    <a class="code" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(allocator, &amp;bufCreateInfo, &amp;allocCreateInfo, &amp;m_Buf, &amp;m_Alloc, <span class="keyword">nullptr</span>);</div><div class="line">}</div></div><!-- fragment --><p>When using lost allocations, you may see some Vulkan validation layer warnings about overlapping regions of memory bound to different kinds of buffers and images. This is still valid as long as you implement proper handling of lost allocations (like in the example above) and don't use them.</p>
+<div class="fragment"><div class="line"><span class="keyword">struct </span>MyBuffer</div><div class="line">{</div><div class="line">    VkBuffer m_Buf = <span class="keyword">nullptr</span>;</div><div class="line">    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> m_Alloc = <span class="keyword">nullptr</span>;</div><div class="line"></div><div class="line">    <span class="comment">// Called when the buffer is really needed in the current frame.</span></div><div class="line">    <span class="keywordtype">void</span> EnsureBuffer();</div><div class="line">};</div><div class="line"></div><div class="line"><span class="keywordtype">void</span> MyBuffer::EnsureBuffer()</div><div class="line">{</div><div class="line">    <span class="comment">// Buffer has been created.</span></div><div class="line">    <span class="keywordflow">if</span>(m_Buf != VK_NULL_HANDLE)</div><div class="line">    {</div><div class="line">        <span class="comment">// Check if its allocation is not lost + mark it as used in current frame.</span></div><div class="line">        <span class="keywordflow">if</span>(<a class="code" href="vk__mem__alloc_8h.html#a43d8ba9673c846f049089a5029d5c73a">vmaTouchAllocation</a>(allocator, m_Alloc))</div><div class="line">        {</div><div class="line">            <span class="comment">// It&#39;s all OK - safe to use m_Buf.</span></div><div class="line">            <span class="keywordflow">return</span>;</div><div class="line">        }</div><div class="line">    }</div><div class="line"></div><div class="line">    <span class="comment">// Buffer not yet exists or lost - destroy and recreate it.</span></div><div class="line"></div><div class="line">    <a class="code" href="vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77">vmaDestroyBuffer</a>(allocator, m_Buf, m_Alloc);</div><div class="line"></div><div class="line">    VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };</div><div class="line">    bufCreateInfo.size = 1024;</div><div class="line">    bufCreateInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;</div><div class="line"></div><div class="line">    <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> allocCreateInfo = {};</div><div class="line">    allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a> = <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>;</div><div class="line">    allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> = <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a5f436af6c8fe8540573a6d22627a6fd2">VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT</a> |</div><div class="line">        <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a68686d0ce9beb0d4d1b9f2b8b1389a7e">VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT</a>;</div><div class="line"></div><div class="line">    <a class="code" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(allocator, &amp;bufCreateInfo, &amp;allocCreateInfo, &amp;m_Buf, &amp;m_Alloc, <span class="keyword">nullptr</span>);</div><div class="line">}</div></div><!-- fragment --><p>When using lost allocations, you may see some Vulkan validation layer warnings about overlapping regions of memory bound to different kinds of buffers and images. This is still valid as long as you implement proper handling of lost allocations (like in the example above) and don't use them.</p>
 <p>You can create an allocation that is already in lost state from the beginning using function <a class="el" href="vk__mem__alloc_8h.html#ae5c9657d9e94756269145b01c05d16f1" title="Creates new allocation that is in lost state from the beginning. ">vmaCreateLostAllocation()</a>. It may be useful if you need a "dummy" allocation that is not null.</p>
 <p>You can call function <a class="el" href="vk__mem__alloc_8h.html#a736bd6cbda886f36c891727e73bd4024" title="Marks all allocations in given pool as lost if they are not used in current frame or VmaPoolCreateInf...">vmaMakePoolAllocationsLost()</a> to set all eligible allocations in a specified custom pool to lost state. Allocations that have been "touched" in current frame or <a class="el" href="struct_vma_pool_create_info.html#a9437e43ffbb644dbbf7fc4e50cfad6aa" title="Maximum number of additional frames that are in use at the same time as current frame. ">VmaPoolCreateInfo::frameInUseCount</a> frames back cannot become lost.</p>
 <p><b>Q: Can I touch allocation that cannot become lost?</b></p>
@@ -87,7 +90,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/memory_mapping.html b/docs/html/memory_mapping.html
index 7e2c263..e464c14 100644
--- a/docs/html/memory_mapping.html
+++ b/docs/html/memory_mapping.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Memory mapping</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -97,7 +100,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/menu.js b/docs/html/menu.js
index 97db4c2..89aaf57 100644
--- a/docs/html/menu.js
+++ b/docs/html/menu.js
@@ -1,3 +1,26 @@
+/*
+ @licstart  The following is the entire license notice for the
+ JavaScript code in this file.
+
+ Copyright (C) 1997-2017 by Dimitri van Heesch
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ @licend  The above is the entire license notice
+ for the JavaScript code in this file
+ */
 function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
   function makeTree(data,relPath) {
     var result='';
@@ -24,3 +47,4 @@
   }
   $('#main-menu').smartmenus();
 }
+/* @license-end */
diff --git a/docs/html/menudata.js b/docs/html/menudata.js
index 3c413e5..ae611c1 100644
--- a/docs/html/menudata.js
+++ b/docs/html/menudata.js
@@ -1,3 +1,26 @@
+/*
+@ @licstart  The following is the entire license notice for the
+JavaScript code in this file.
+
+Copyright (C) 1997-2017 by Dimitri van Heesch
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+@licend  The above is the entire license notice
+for the JavaScript code in this file
+*/
 var menudata={children:[
 {text:"Main Page",url:"index.html"},
 {text:"Related Pages",url:"pages.html"},
@@ -35,6 +58,7 @@
 {text:"File List",url:"files.html"},
 {text:"File Members",url:"globals.html",children:[
 {text:"All",url:"globals.html",children:[
+{text:"n",url:"globals.html#index_n"},
 {text:"p",url:"globals.html#index_p"},
 {text:"v",url:"globals.html#index_v"}]},
 {text:"Functions",url:"globals_func.html",children:[
diff --git a/docs/html/pages.html b/docs/html/pages.html
index b59260e..d1fd68e 100644
--- a/docs/html/pages.html
+++ b/docs/html/pages.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Related Pages</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 </div><!-- top -->
 <!-- window showing the filter options -->
@@ -71,7 +74,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/quick_start.html b/docs/html/quick_start.html
index 517eca2..bc21235 100644
--- a/docs/html/quick_start.html
+++ b/docs/html/quick_start.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Quick start</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -76,7 +79,7 @@
 <li>In exacly one CPP file define following macro before this include. It enables also internal definitions.</li>
 </ol>
 <div class="fragment"><div class="line"><span class="preprocessor">#define VMA_IMPLEMENTATION</span></div><div class="line"><span class="preprocessor">#include &quot;vk_mem_alloc.h&quot;</span></div></div><!-- fragment --><p>It may be a good idea to create dedicated CPP file just for this purpose.</p>
-<p>Please note that this library includes header <code>&lt;vulkan/vulkan.h&gt;</code>, which in turn includes <code>&lt;windows.h&gt;</code> on Windows. If you need some specific macros defined before including these headers (like <code>NOMINMAX</code>, <code>WIN32_LEAN_AND_MEAN</code>, or <code>WINVER</code> for Windows, <code>VK_USE_PLATFORM_WIN32_KHR</code> for Vulkan), you must define them before every <code>#include</code> of this library.</p>
+<p>Please note that this library includes header <code>&lt;vulkan/vulkan.h&gt;</code>, which in turn includes <code>&lt;windows.h&gt;</code> on Windows. If you need some specific macros defined before including these headers (like <code>WIN32_LEAN_AND_MEAN</code> or <code>WINVER</code> for Windows, <code>VK_USE_PLATFORM_WIN32_KHR</code> for Vulkan), you must define them before every <code>#include</code> of this library.</p>
 <h1><a class="anchor" id="quick_start_initialization"></a>
 Initialization</h1>
 <p>At program startup:</p>
@@ -98,7 +101,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/record_and_replay.html b/docs/html/record_and_replay.html
index d4484be..4694260 100644
--- a/docs/html/record_and_replay.html
+++ b/docs/html/record_and_replay.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Record and replay</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -91,7 +94,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/search/all_0.html b/docs/html/search/all_0.html
index f25360b..5125b94 100644
--- a/docs/html/search/all_0.html
+++ b/docs/html/search/all_0.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="all_0.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/all_1.html b/docs/html/search/all_1.html
index b13f0f7..b8ff871 100644
--- a/docs/html/search/all_1.html
+++ b/docs/html/search/all_1.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="all_1.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/all_10.html b/docs/html/search/all_10.html
new file mode 100644
index 0000000..50bc449
--- /dev/null
+++ b/docs/html/search/all_10.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_10.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_10.js b/docs/html/search/all_10.js
new file mode 100644
index 0000000..cc8c748
--- /dev/null
+++ b/docs/html/search/all_10.js
@@ -0,0 +1,108 @@
+var searchData=
+[
+  ['vulkan_20memory_20allocator',['Vulkan Memory Allocator',['../index.html',1,'']]],
+  ['vk_5fkhr_5fdedicated_5fallocation',['VK_KHR_dedicated_allocation',['../vk_khr_dedicated_allocation.html',1,'index']]],
+  ['vk_5fmem_5falloc_2eh',['vk_mem_alloc.h',['../vk__mem__alloc_8h.html',1,'']]],
+  ['vkallocatememory',['vkAllocateMemory',['../struct_vma_vulkan_functions.html#a2943bf99dfd784a0e8f599d987e22e6c',1,'VmaVulkanFunctions']]],
+  ['vkbindbuffermemory',['vkBindBufferMemory',['../struct_vma_vulkan_functions.html#a94fc4f3a605d9880bb3c0ba2c2fc80b2',1,'VmaVulkanFunctions']]],
+  ['vkbindimagememory',['vkBindImageMemory',['../struct_vma_vulkan_functions.html#a1338d96a128a5ade648b8d934907c637',1,'VmaVulkanFunctions']]],
+  ['vkcreatebuffer',['vkCreateBuffer',['../struct_vma_vulkan_functions.html#ae8084315a25006271a2edfc3a447519f',1,'VmaVulkanFunctions']]],
+  ['vkcreateimage',['vkCreateImage',['../struct_vma_vulkan_functions.html#a23ebe70be515b9b5010a1d691200e325',1,'VmaVulkanFunctions']]],
+  ['vkdestroybuffer',['vkDestroyBuffer',['../struct_vma_vulkan_functions.html#a7e054606faddb07f0e8556f3ed317d45',1,'VmaVulkanFunctions']]],
+  ['vkdestroyimage',['vkDestroyImage',['../struct_vma_vulkan_functions.html#a90b898227039b1dcb3520f6e91f09ffa',1,'VmaVulkanFunctions']]],
+  ['vkflushmappedmemoryranges',['vkFlushMappedMemoryRanges',['../struct_vma_vulkan_functions.html#a33c322f4c4ad2810f8a9c97a277572f9',1,'VmaVulkanFunctions']]],
+  ['vkfreememory',['vkFreeMemory',['../struct_vma_vulkan_functions.html#a4c658701778564d62034255b5dda91b4',1,'VmaVulkanFunctions']]],
+  ['vkgetbuffermemoryrequirements',['vkGetBufferMemoryRequirements',['../struct_vma_vulkan_functions.html#a5b92901df89a4194b0d12f6071d4d143',1,'VmaVulkanFunctions']]],
+  ['vkgetimagememoryrequirements',['vkGetImageMemoryRequirements',['../struct_vma_vulkan_functions.html#a475f6f49f8debe4d10800592606d53f4',1,'VmaVulkanFunctions']]],
+  ['vkgetphysicaldevicememoryproperties',['vkGetPhysicalDeviceMemoryProperties',['../struct_vma_vulkan_functions.html#a60d25c33bba06bb8592e6875cbaa9830',1,'VmaVulkanFunctions']]],
+  ['vkgetphysicaldeviceproperties',['vkGetPhysicalDeviceProperties',['../struct_vma_vulkan_functions.html#a77b7a74082823e865dd6546623468f96',1,'VmaVulkanFunctions']]],
+  ['vkinvalidatemappedmemoryranges',['vkInvalidateMappedMemoryRanges',['../struct_vma_vulkan_functions.html#a5c1093bc32386a8060c37c9f282078a1',1,'VmaVulkanFunctions']]],
+  ['vkmapmemory',['vkMapMemory',['../struct_vma_vulkan_functions.html#ab5c1f38dea3a2cf00dc9eb4f57218c49',1,'VmaVulkanFunctions']]],
+  ['vkunmapmemory',['vkUnmapMemory',['../struct_vma_vulkan_functions.html#acc798589736f0becb317fc2196c1d8b9',1,'VmaVulkanFunctions']]],
+  ['vma_5fallocation_5fcreate_5fcan_5fbecome_5flost_5fbit',['VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a5f436af6c8fe8540573a6d22627a6fd2',1,'vk_mem_alloc.h']]],
+  ['vma_5fallocation_5fcreate_5fcan_5fmake_5fother_5flost_5fbit',['VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a68686d0ce9beb0d4d1b9f2b8b1389a7e',1,'vk_mem_alloc.h']]],
+  ['vma_5fallocation_5fcreate_5fdedicated_5fmemory_5fbit',['VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f',1,'vk_mem_alloc.h']]],
+  ['vma_5fallocation_5fcreate_5fflag_5fbits_5fmax_5fenum',['VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882',1,'vk_mem_alloc.h']]],
+  ['vma_5fallocation_5fcreate_5fmapped_5fbit',['VMA_ALLOCATION_CREATE_MAPPED_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f',1,'vk_mem_alloc.h']]],
+  ['vma_5fallocation_5fcreate_5fnever_5fallocate_5fbit',['VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff',1,'vk_mem_alloc.h']]],
+  ['vma_5fallocation_5fcreate_5fupper_5faddress_5fbit',['VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df',1,'vk_mem_alloc.h']]],
+  ['vma_5fallocation_5fcreate_5fuser_5fdata_5fcopy_5fstring_5fbit',['VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520',1,'vk_mem_alloc.h']]],
+  ['vma_5fallocator_5fcreate_5fexternally_5fsynchronized_5fbit',['VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d',1,'vk_mem_alloc.h']]],
+  ['vma_5fallocator_5fcreate_5fflag_5fbits_5fmax_5fenum',['VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c',1,'vk_mem_alloc.h']]],
+  ['vma_5fallocator_5fcreate_5fkhr_5fdedicated_5fallocation_5fbit',['VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878',1,'vk_mem_alloc.h']]],
+  ['vma_5fdedicated_5fallocation',['VMA_DEDICATED_ALLOCATION',['../vk__mem__alloc_8h.html#af7b860e63b96d11e44ae8587ba06bbf4',1,'vk_mem_alloc.h']]],
+  ['vma_5fmemory_5fusage_5fcpu_5fonly',['VMA_MEMORY_USAGE_CPU_ONLY',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5',1,'vk_mem_alloc.h']]],
+  ['vma_5fmemory_5fusage_5fcpu_5fto_5fgpu',['VMA_MEMORY_USAGE_CPU_TO_GPU',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67',1,'vk_mem_alloc.h']]],
+  ['vma_5fmemory_5fusage_5fgpu_5fonly',['VMA_MEMORY_USAGE_GPU_ONLY',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7',1,'vk_mem_alloc.h']]],
+  ['vma_5fmemory_5fusage_5fgpu_5fto_5fcpu',['VMA_MEMORY_USAGE_GPU_TO_CPU',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27',1,'vk_mem_alloc.h']]],
+  ['vma_5fmemory_5fusage_5fmax_5fenum',['VMA_MEMORY_USAGE_MAX_ENUM',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e',1,'vk_mem_alloc.h']]],
+  ['vma_5fmemory_5fusage_5funknown',['VMA_MEMORY_USAGE_UNKNOWN',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd',1,'vk_mem_alloc.h']]],
+  ['vma_5fpool_5fcreate_5fflag_5fbits_5fmax_5fenum',['VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec',1,'vk_mem_alloc.h']]],
+  ['vma_5fpool_5fcreate_5fignore_5fbuffer_5fimage_5fgranularity_5fbit',['VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2',1,'vk_mem_alloc.h']]],
+  ['vma_5fpool_5fcreate_5flinear_5falgorithm_5fbit',['VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726',1,'vk_mem_alloc.h']]],
+  ['vma_5frecord_5fflag_5fbits_5fmax_5fenum',['VMA_RECORD_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a20dd17d69966dbffa054739d6090b85e',1,'vk_mem_alloc.h']]],
+  ['vma_5frecord_5fflush_5fafter_5fcall_5fbit',['VMA_RECORD_FLUSH_AFTER_CALL_BIT',['../vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a8e7ab322e8732654be627c4ea8f36cc7',1,'vk_mem_alloc.h']]],
+  ['vma_5frecording_5fenabled',['VMA_RECORDING_ENABLED',['../vk__mem__alloc_8h.html#a1f0c126759fc96ccb6e2d23c101d770c',1,'vk_mem_alloc.h']]],
+  ['vma_5fstats_5fstring_5fenabled',['VMA_STATS_STRING_ENABLED',['../vk__mem__alloc_8h.html#ae25f0d55fd91cb166f002b63244800e1',1,'vk_mem_alloc.h']]],
+  ['vmaallocatememory',['vmaAllocateMemory',['../vk__mem__alloc_8h.html#abf28077dbf82d0908b8acbe8ee8dd9b8',1,'vk_mem_alloc.h']]],
+  ['vmaallocatememoryforbuffer',['vmaAllocateMemoryForBuffer',['../vk__mem__alloc_8h.html#a7fdf64415b6c3d83c454f28d2c53df7b',1,'vk_mem_alloc.h']]],
+  ['vmaallocatememoryforimage',['vmaAllocateMemoryForImage',['../vk__mem__alloc_8h.html#a0faa3f9e5fb233d29d1e00390650febb',1,'vk_mem_alloc.h']]],
+  ['vmaallocation',['VmaAllocation',['../struct_vma_allocation.html',1,'']]],
+  ['vmaallocationcreateflagbits',['VmaAllocationCreateFlagBits',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597',1,'VmaAllocationCreateFlagBits():&#160;vk_mem_alloc.h'],['../vk__mem__alloc_8h.html#abf6bf6748c7a9fe7ce5b7835c0f56af4',1,'VmaAllocationCreateFlagBits():&#160;vk_mem_alloc.h']]],
+  ['vmaallocationcreateflags',['VmaAllocationCreateFlags',['../vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817',1,'vk_mem_alloc.h']]],
+  ['vmaallocationcreateinfo',['VmaAllocationCreateInfo',['../struct_vma_allocation_create_info.html',1,'VmaAllocationCreateInfo'],['../vk__mem__alloc_8h.html#a86c44f9950b40d50088ed93a17870a7a',1,'VmaAllocationCreateInfo():&#160;vk_mem_alloc.h']]],
+  ['vmaallocationinfo',['VmaAllocationInfo',['../struct_vma_allocation_info.html',1,'VmaAllocationInfo'],['../vk__mem__alloc_8h.html#a795e6ff02a21d5486c0565f403dd9255',1,'VmaAllocationInfo():&#160;vk_mem_alloc.h']]],
+  ['vmaallocator',['VmaAllocator',['../struct_vma_allocator.html',1,'']]],
+  ['vmaallocatorcreateflagbits',['VmaAllocatorCreateFlagBits',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c',1,'VmaAllocatorCreateFlagBits():&#160;vk_mem_alloc.h'],['../vk__mem__alloc_8h.html#a4ddf381b6ce795bdfbc6c614640b9915',1,'VmaAllocatorCreateFlagBits():&#160;vk_mem_alloc.h']]],
+  ['vmaallocatorcreateflags',['VmaAllocatorCreateFlags',['../vk__mem__alloc_8h.html#acfe6863e160722c2c1bbcf7573fddc4d',1,'vk_mem_alloc.h']]],
+  ['vmaallocatorcreateinfo',['VmaAllocatorCreateInfo',['../struct_vma_allocator_create_info.html',1,'VmaAllocatorCreateInfo'],['../vk__mem__alloc_8h.html#ae0f6d1d733dded220d28134da46b4283',1,'VmaAllocatorCreateInfo():&#160;vk_mem_alloc.h']]],
+  ['vmabindbuffermemory',['vmaBindBufferMemory',['../vk__mem__alloc_8h.html#a6b0929b914b60cf2d45cac4bf3547470',1,'vk_mem_alloc.h']]],
+  ['vmabindimagememory',['vmaBindImageMemory',['../vk__mem__alloc_8h.html#a3d3ca45799923aa5d138e9e5f9eb2da5',1,'vk_mem_alloc.h']]],
+  ['vmabuildstatsstring',['vmaBuildStatsString',['../vk__mem__alloc_8h.html#aa4fee7eb5253377599ef4fd38c93c2a0',1,'vk_mem_alloc.h']]],
+  ['vmacalculatestats',['vmaCalculateStats',['../vk__mem__alloc_8h.html#a333b61c1788cb23559177531e6a93ca3',1,'vk_mem_alloc.h']]],
+  ['vmacheckcorruption',['vmaCheckCorruption',['../vk__mem__alloc_8h.html#a49329a7f030dafcf82f7b73334c22e98',1,'vk_mem_alloc.h']]],
+  ['vmacheckpoolcorruption',['vmaCheckPoolCorruption',['../vk__mem__alloc_8h.html#ad535935619c7a549bf837e1bb0068f89',1,'vk_mem_alloc.h']]],
+  ['vmacreateallocator',['vmaCreateAllocator',['../vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb',1,'vk_mem_alloc.h']]],
+  ['vmacreatebuffer',['vmaCreateBuffer',['../vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51',1,'vk_mem_alloc.h']]],
+  ['vmacreateimage',['vmaCreateImage',['../vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73',1,'vk_mem_alloc.h']]],
+  ['vmacreatelostallocation',['vmaCreateLostAllocation',['../vk__mem__alloc_8h.html#ae5c9657d9e94756269145b01c05d16f1',1,'vk_mem_alloc.h']]],
+  ['vmacreatepool',['vmaCreatePool',['../vk__mem__alloc_8h.html#a5c8770ded7c59c8caac6de0c2cb00b50',1,'vk_mem_alloc.h']]],
+  ['vmadefragment',['vmaDefragment',['../vk__mem__alloc_8h.html#a6aced90fcc7b39882b6654a740a0b9bb',1,'vk_mem_alloc.h']]],
+  ['vmadefragmentationinfo',['VmaDefragmentationInfo',['../struct_vma_defragmentation_info.html',1,'VmaDefragmentationInfo'],['../vk__mem__alloc_8h.html#ae67f8573a0cf20f16f0a1eecbca566a0',1,'VmaDefragmentationInfo():&#160;vk_mem_alloc.h']]],
+  ['vmadefragmentationstats',['VmaDefragmentationStats',['../struct_vma_defragmentation_stats.html',1,'VmaDefragmentationStats'],['../vk__mem__alloc_8h.html#ab0f9b06441c840fee560de4a2967f8c9',1,'VmaDefragmentationStats():&#160;vk_mem_alloc.h']]],
+  ['vmadestroyallocator',['vmaDestroyAllocator',['../vk__mem__alloc_8h.html#aa8d164061c88f22fb1fd3c8f3534bc1d',1,'vk_mem_alloc.h']]],
+  ['vmadestroybuffer',['vmaDestroyBuffer',['../vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77',1,'vk_mem_alloc.h']]],
+  ['vmadestroyimage',['vmaDestroyImage',['../vk__mem__alloc_8h.html#ae50d2cb3b4a3bfd4dd40987234e50e7e',1,'vk_mem_alloc.h']]],
+  ['vmadestroypool',['vmaDestroyPool',['../vk__mem__alloc_8h.html#a5485779c8f1948238fc4e92232fa65e1',1,'vk_mem_alloc.h']]],
+  ['vmadevicememorycallbacks',['VmaDeviceMemoryCallbacks',['../struct_vma_device_memory_callbacks.html',1,'VmaDeviceMemoryCallbacks'],['../vk__mem__alloc_8h.html#a5e2eb68d727cfd4df25702b027b7aa31',1,'VmaDeviceMemoryCallbacks():&#160;vk_mem_alloc.h']]],
+  ['vmafindmemorytypeindex',['vmaFindMemoryTypeIndex',['../vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a',1,'vk_mem_alloc.h']]],
+  ['vmafindmemorytypeindexforbufferinfo',['vmaFindMemoryTypeIndexForBufferInfo',['../vk__mem__alloc_8h.html#ae790ab9ffaf7667fb8f62523e6897888',1,'vk_mem_alloc.h']]],
+  ['vmafindmemorytypeindexforimageinfo',['vmaFindMemoryTypeIndexForImageInfo',['../vk__mem__alloc_8h.html#a088da83d8eaf3ce9056d9ea0b981d472',1,'vk_mem_alloc.h']]],
+  ['vmaflushallocation',['vmaFlushAllocation',['../vk__mem__alloc_8h.html#abc34ee6f021f459aff885f3758c435de',1,'vk_mem_alloc.h']]],
+  ['vmafreememory',['vmaFreeMemory',['../vk__mem__alloc_8h.html#a11f0fbc034fa81a4efedd73d61ce7568',1,'vk_mem_alloc.h']]],
+  ['vmafreestatsstring',['vmaFreeStatsString',['../vk__mem__alloc_8h.html#a3104eb30d8122c84dd8541063f145288',1,'vk_mem_alloc.h']]],
+  ['vmagetallocationinfo',['vmaGetAllocationInfo',['../vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b',1,'vk_mem_alloc.h']]],
+  ['vmagetmemoryproperties',['vmaGetMemoryProperties',['../vk__mem__alloc_8h.html#ab88db292a17974f911182543fda52d19',1,'vk_mem_alloc.h']]],
+  ['vmagetmemorytypeproperties',['vmaGetMemoryTypeProperties',['../vk__mem__alloc_8h.html#a8701444752eb5de4464adb5a2b514bca',1,'vk_mem_alloc.h']]],
+  ['vmagetphysicaldeviceproperties',['vmaGetPhysicalDeviceProperties',['../vk__mem__alloc_8h.html#aecabf7b6e91ea87d0316fa0a9e014fe0',1,'vk_mem_alloc.h']]],
+  ['vmagetpoolstats',['vmaGetPoolStats',['../vk__mem__alloc_8h.html#ae8bf76997b234ef68aad922616df4153',1,'vk_mem_alloc.h']]],
+  ['vmainvalidateallocation',['vmaInvalidateAllocation',['../vk__mem__alloc_8h.html#a0d0eb0c1102268fa9a476d12ecbe4006',1,'vk_mem_alloc.h']]],
+  ['vmamakepoolallocationslost',['vmaMakePoolAllocationsLost',['../vk__mem__alloc_8h.html#a736bd6cbda886f36c891727e73bd4024',1,'vk_mem_alloc.h']]],
+  ['vmamapmemory',['vmaMapMemory',['../vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069',1,'vk_mem_alloc.h']]],
+  ['vmamemoryusage',['VmaMemoryUsage',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc',1,'VmaMemoryUsage():&#160;vk_mem_alloc.h'],['../vk__mem__alloc_8h.html#ad63b2113c0bfdbeade1cb498f5a8580d',1,'VmaMemoryUsage():&#160;vk_mem_alloc.h']]],
+  ['vmapool',['VmaPool',['../struct_vma_pool.html',1,'']]],
+  ['vmapoolcreateflagbits',['VmaPoolCreateFlagBits',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7',1,'VmaPoolCreateFlagBits():&#160;vk_mem_alloc.h'],['../vk__mem__alloc_8h.html#a8f93195158e0e2ac80ca352064e71c1f',1,'VmaPoolCreateFlagBits():&#160;vk_mem_alloc.h']]],
+  ['vmapoolcreateflags',['VmaPoolCreateFlags',['../vk__mem__alloc_8h.html#a2770e325ea42e087c1b91fdf46d0292a',1,'vk_mem_alloc.h']]],
+  ['vmapoolcreateinfo',['VmaPoolCreateInfo',['../struct_vma_pool_create_info.html',1,'VmaPoolCreateInfo'],['../vk__mem__alloc_8h.html#a211706e9348dcee25a843ed4ea69bce7',1,'VmaPoolCreateInfo():&#160;vk_mem_alloc.h']]],
+  ['vmapoolstats',['VmaPoolStats',['../struct_vma_pool_stats.html',1,'VmaPoolStats'],['../vk__mem__alloc_8h.html#a2e5612d871d64c5624087b837a338c34',1,'VmaPoolStats():&#160;vk_mem_alloc.h']]],
+  ['vmarecordflagbits',['VmaRecordFlagBits',['../vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2',1,'VmaRecordFlagBits():&#160;vk_mem_alloc.h'],['../vk__mem__alloc_8h.html#ade20b626a6635ce1bf30ea53dea774e4',1,'VmaRecordFlagBits():&#160;vk_mem_alloc.h']]],
+  ['vmarecordflags',['VmaRecordFlags',['../vk__mem__alloc_8h.html#af3929a1a4547c592fc0b0e55ef452828',1,'vk_mem_alloc.h']]],
+  ['vmarecordsettings',['VmaRecordSettings',['../struct_vma_record_settings.html',1,'VmaRecordSettings'],['../vk__mem__alloc_8h.html#a0ab61e87ff6365f1d59915eadc37a9f0',1,'VmaRecordSettings():&#160;vk_mem_alloc.h']]],
+  ['vmasetallocationuserdata',['vmaSetAllocationUserData',['../vk__mem__alloc_8h.html#af9147d31ffc11d62fc187bde283ed14f',1,'vk_mem_alloc.h']]],
+  ['vmasetcurrentframeindex',['vmaSetCurrentFrameIndex',['../vk__mem__alloc_8h.html#ade56bf8dc9f5a5eaddf5f119ed525236',1,'vk_mem_alloc.h']]],
+  ['vmastatinfo',['VmaStatInfo',['../struct_vma_stat_info.html',1,'VmaStatInfo'],['../vk__mem__alloc_8h.html#a810b009a788ee8aac72a25b42ffbe31c',1,'VmaStatInfo():&#160;vk_mem_alloc.h']]],
+  ['vmastats',['VmaStats',['../struct_vma_stats.html',1,'VmaStats'],['../vk__mem__alloc_8h.html#a732be855fb4a7c248e6853d928a729af',1,'VmaStats():&#160;vk_mem_alloc.h']]],
+  ['vmatouchallocation',['vmaTouchAllocation',['../vk__mem__alloc_8h.html#a43d8ba9673c846f049089a5029d5c73a',1,'vk_mem_alloc.h']]],
+  ['vmaunmapmemory',['vmaUnmapMemory',['../vk__mem__alloc_8h.html#a9bc268595cb33f6ec4d519cfce81ff45',1,'vk_mem_alloc.h']]],
+  ['vmavulkanfunctions',['VmaVulkanFunctions',['../struct_vma_vulkan_functions.html',1,'VmaVulkanFunctions'],['../vk__mem__alloc_8h.html#a97064a1a271b0061ebfc3a079862d0c5',1,'VmaVulkanFunctions():&#160;vk_mem_alloc.h']]]
+];
diff --git a/docs/html/search/all_2.html b/docs/html/search/all_2.html
index 9543c57..2f17735 100644
--- a/docs/html/search/all_2.html
+++ b/docs/html/search/all_2.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="all_2.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/all_3.html b/docs/html/search/all_3.html
index 03405c0..a3e6f7d 100644
--- a/docs/html/search/all_3.html
+++ b/docs/html/search/all_3.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="all_3.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/all_4.html b/docs/html/search/all_4.html
index 8e1f4b9..6452295 100644
--- a/docs/html/search/all_4.html
+++ b/docs/html/search/all_4.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="all_4.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/all_5.html b/docs/html/search/all_5.html
index 89a879e..e59e1d5 100644
--- a/docs/html/search/all_5.html
+++ b/docs/html/search/all_5.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="all_5.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/all_6.html b/docs/html/search/all_6.html
index 6afac06..f75a754 100644
--- a/docs/html/search/all_6.html
+++ b/docs/html/search/all_6.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="all_6.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/all_7.html b/docs/html/search/all_7.html
index de19107..88acd94 100644
--- a/docs/html/search/all_7.html
+++ b/docs/html/search/all_7.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="all_7.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/all_8.html b/docs/html/search/all_8.html
index 11e27cd..b74d5fd 100644
--- a/docs/html/search/all_8.html
+++ b/docs/html/search/all_8.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="all_8.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/all_8.js b/docs/html/search/all_8.js
index c9c4229..8ba96ff 100644
--- a/docs/html/search/all_8.js
+++ b/docs/html/search/all_8.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['offset',['offset',['../struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268',1,'VmaAllocationInfo']]]
+  ['nominmax',['NOMINMAX',['../vk__mem__alloc_8h.html#a9f918755b601cf4bffca775992e6fb90',1,'vk_mem_alloc.h']]]
 ];
diff --git a/docs/html/search/all_9.html b/docs/html/search/all_9.html
index f8abbbe..95e88dd 100644
--- a/docs/html/search/all_9.html
+++ b/docs/html/search/all_9.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="all_9.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/all_9.js b/docs/html/search/all_9.js
index 33e01da..c9c4229 100644
--- a/docs/html/search/all_9.js
+++ b/docs/html/search/all_9.js
@@ -1,19 +1,4 @@
 var searchData=
 [
-  ['pallocationcallbacks',['pAllocationCallbacks',['../struct_vma_allocator_create_info.html#a6e409087e3be55400d0e4ccbe43c608d',1,'VmaAllocatorCreateInfo']]],
-  ['pdevicememorycallbacks',['pDeviceMemoryCallbacks',['../struct_vma_allocator_create_info.html#af1380969b5e1ea4c3184a877892d260e',1,'VmaAllocatorCreateInfo']]],
-  ['pfilepath',['pFilePath',['../struct_vma_record_settings.html#a6cb1fdbf6bcb610b68f2010dd629e89d',1,'VmaRecordSettings']]],
-  ['pfn_5fvmaallocatedevicememoryfunction',['PFN_vmaAllocateDeviceMemoryFunction',['../vk__mem__alloc_8h.html#ab6a6477cda1ce775b30bde96d766203b',1,'vk_mem_alloc.h']]],
-  ['pfn_5fvmafreedevicememoryfunction',['PFN_vmaFreeDeviceMemoryFunction',['../vk__mem__alloc_8h.html#aef2545dc2e9dd4f29ab9ba6ac6fe2f49',1,'vk_mem_alloc.h']]],
-  ['pfnallocate',['pfnAllocate',['../struct_vma_device_memory_callbacks.html#a4f17f7b255101e733b44d5633aceabfb',1,'VmaDeviceMemoryCallbacks']]],
-  ['pfnfree',['pfnFree',['../struct_vma_device_memory_callbacks.html#abe8a3328bbc916f6f712fdb6b299444c',1,'VmaDeviceMemoryCallbacks']]],
-  ['pheapsizelimit',['pHeapSizeLimit',['../struct_vma_allocator_create_info.html#a31c192aa6cbffa33279f6d9f0c47c44b',1,'VmaAllocatorCreateInfo']]],
-  ['physicaldevice',['physicalDevice',['../struct_vma_allocator_create_info.html#a08230f04ae6ccf8a78150a9e829a7156',1,'VmaAllocatorCreateInfo']]],
-  ['pmappeddata',['pMappedData',['../struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2',1,'VmaAllocationInfo']]],
-  ['pool',['pool',['../struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150',1,'VmaAllocationCreateInfo']]],
-  ['precordsettings',['pRecordSettings',['../struct_vma_allocator_create_info.html#ace2aa4877b16a42b0b7673d4e26000ee',1,'VmaAllocatorCreateInfo']]],
-  ['preferredflags',['preferredFlags',['../struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d',1,'VmaAllocationCreateInfo']]],
-  ['preferredlargeheapblocksize',['preferredLargeHeapBlockSize',['../struct_vma_allocator_create_info.html#a8e4714298e3121cdd8b214a1ae7a637a',1,'VmaAllocatorCreateInfo']]],
-  ['puserdata',['pUserData',['../struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19',1,'VmaAllocationCreateInfo::pUserData()'],['../struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13',1,'VmaAllocationInfo::pUserData()']]],
-  ['pvulkanfunctions',['pVulkanFunctions',['../struct_vma_allocator_create_info.html#a3dc197be3227da7338b1643f70db36bd',1,'VmaAllocatorCreateInfo']]]
+  ['offset',['offset',['../struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268',1,'VmaAllocationInfo']]]
 ];
diff --git a/docs/html/search/all_a.html b/docs/html/search/all_a.html
index 9601fce..3148a8e 100644
--- a/docs/html/search/all_a.html
+++ b/docs/html/search/all_a.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="all_a.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/all_a.js b/docs/html/search/all_a.js
index de761c9..33e01da 100644
--- a/docs/html/search/all_a.js
+++ b/docs/html/search/all_a.js
@@ -1,4 +1,19 @@
 var searchData=
 [
-  ['quick_20start',['Quick start',['../quick_start.html',1,'index']]]
+  ['pallocationcallbacks',['pAllocationCallbacks',['../struct_vma_allocator_create_info.html#a6e409087e3be55400d0e4ccbe43c608d',1,'VmaAllocatorCreateInfo']]],
+  ['pdevicememorycallbacks',['pDeviceMemoryCallbacks',['../struct_vma_allocator_create_info.html#af1380969b5e1ea4c3184a877892d260e',1,'VmaAllocatorCreateInfo']]],
+  ['pfilepath',['pFilePath',['../struct_vma_record_settings.html#a6cb1fdbf6bcb610b68f2010dd629e89d',1,'VmaRecordSettings']]],
+  ['pfn_5fvmaallocatedevicememoryfunction',['PFN_vmaAllocateDeviceMemoryFunction',['../vk__mem__alloc_8h.html#ab6a6477cda1ce775b30bde96d766203b',1,'vk_mem_alloc.h']]],
+  ['pfn_5fvmafreedevicememoryfunction',['PFN_vmaFreeDeviceMemoryFunction',['../vk__mem__alloc_8h.html#aef2545dc2e9dd4f29ab9ba6ac6fe2f49',1,'vk_mem_alloc.h']]],
+  ['pfnallocate',['pfnAllocate',['../struct_vma_device_memory_callbacks.html#a4f17f7b255101e733b44d5633aceabfb',1,'VmaDeviceMemoryCallbacks']]],
+  ['pfnfree',['pfnFree',['../struct_vma_device_memory_callbacks.html#abe8a3328bbc916f6f712fdb6b299444c',1,'VmaDeviceMemoryCallbacks']]],
+  ['pheapsizelimit',['pHeapSizeLimit',['../struct_vma_allocator_create_info.html#a31c192aa6cbffa33279f6d9f0c47c44b',1,'VmaAllocatorCreateInfo']]],
+  ['physicaldevice',['physicalDevice',['../struct_vma_allocator_create_info.html#a08230f04ae6ccf8a78150a9e829a7156',1,'VmaAllocatorCreateInfo']]],
+  ['pmappeddata',['pMappedData',['../struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2',1,'VmaAllocationInfo']]],
+  ['pool',['pool',['../struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150',1,'VmaAllocationCreateInfo']]],
+  ['precordsettings',['pRecordSettings',['../struct_vma_allocator_create_info.html#ace2aa4877b16a42b0b7673d4e26000ee',1,'VmaAllocatorCreateInfo']]],
+  ['preferredflags',['preferredFlags',['../struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d',1,'VmaAllocationCreateInfo']]],
+  ['preferredlargeheapblocksize',['preferredLargeHeapBlockSize',['../struct_vma_allocator_create_info.html#a8e4714298e3121cdd8b214a1ae7a637a',1,'VmaAllocatorCreateInfo']]],
+  ['puserdata',['pUserData',['../struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19',1,'VmaAllocationCreateInfo::pUserData()'],['../struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13',1,'VmaAllocationInfo::pUserData()']]],
+  ['pvulkanfunctions',['pVulkanFunctions',['../struct_vma_allocator_create_info.html#a3dc197be3227da7338b1643f70db36bd',1,'VmaAllocatorCreateInfo']]]
 ];
diff --git a/docs/html/search/all_b.html b/docs/html/search/all_b.html
index 0814e4e..f2a3c8d 100644
--- a/docs/html/search/all_b.html
+++ b/docs/html/search/all_b.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="all_b.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/all_b.js b/docs/html/search/all_b.js
index f0c993f..de761c9 100644
--- a/docs/html/search/all_b.js
+++ b/docs/html/search/all_b.js
@@ -1,6 +1,4 @@
 var searchData=
 [
-  ['record_20and_20replay',['Record and replay',['../record_and_replay.html',1,'index']]],
-  ['requiredflags',['requiredFlags',['../struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90',1,'VmaAllocationCreateInfo']]],
-  ['recommended_20usage_20patterns',['Recommended usage patterns',['../usage_patterns.html',1,'index']]]
+  ['quick_20start',['Quick start',['../quick_start.html',1,'index']]]
 ];
diff --git a/docs/html/search/all_c.html b/docs/html/search/all_c.html
index da08c38..6376810 100644
--- a/docs/html/search/all_c.html
+++ b/docs/html/search/all_c.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="all_c.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/all_c.js b/docs/html/search/all_c.js
index e93f611..f0c993f 100644
--- a/docs/html/search/all_c.js
+++ b/docs/html/search/all_c.js
@@ -1,5 +1,6 @@
 var searchData=
 [
-  ['size',['size',['../struct_vma_pool_stats.html#a326807b2de2b0931cee4ed9a5f2e420c',1,'VmaPoolStats::size()'],['../struct_vma_allocation_info.html#aac76d113a6a5ccbb09fea00fb25fd18f',1,'VmaAllocationInfo::size()']]],
-  ['statistics',['Statistics',['../statistics.html',1,'index']]]
+  ['record_20and_20replay',['Record and replay',['../record_and_replay.html',1,'index']]],
+  ['requiredflags',['requiredFlags',['../struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90',1,'VmaAllocationCreateInfo']]],
+  ['recommended_20usage_20patterns',['Recommended usage patterns',['../usage_patterns.html',1,'index']]]
 ];
diff --git a/docs/html/search/all_d.html b/docs/html/search/all_d.html
index 9986c9c..cc52c79 100644
--- a/docs/html/search/all_d.html
+++ b/docs/html/search/all_d.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="all_d.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/all_d.js b/docs/html/search/all_d.js
index f8fbe3d..e93f611 100644
--- a/docs/html/search/all_d.js
+++ b/docs/html/search/all_d.js
@@ -1,4 +1,5 @@
 var searchData=
 [
-  ['total',['total',['../struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9',1,'VmaStats']]]
+  ['size',['size',['../struct_vma_pool_stats.html#a326807b2de2b0931cee4ed9a5f2e420c',1,'VmaPoolStats::size()'],['../struct_vma_allocation_info.html#aac76d113a6a5ccbb09fea00fb25fd18f',1,'VmaAllocationInfo::size()']]],
+  ['statistics',['Statistics',['../statistics.html',1,'index']]]
 ];
diff --git a/docs/html/search/all_e.html b/docs/html/search/all_e.html
index 9fa42bb..85b39bd 100644
--- a/docs/html/search/all_e.html
+++ b/docs/html/search/all_e.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="all_e.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/all_e.js b/docs/html/search/all_e.js
index bb52d7a..f8fbe3d 100644
--- a/docs/html/search/all_e.js
+++ b/docs/html/search/all_e.js
@@ -1,11 +1,4 @@
 var searchData=
 [
-  ['unusedbytes',['unusedBytes',['../struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669',1,'VmaStatInfo']]],
-  ['unusedrangecount',['unusedRangeCount',['../struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9',1,'VmaStatInfo::unusedRangeCount()'],['../struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4',1,'VmaPoolStats::unusedRangeCount()']]],
-  ['unusedrangesizeavg',['unusedRangeSizeAvg',['../struct_vma_stat_info.html#a2f9b3452af90c9768a30b7fb6ae194fc',1,'VmaStatInfo']]],
-  ['unusedrangesizemax',['unusedRangeSizeMax',['../struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4',1,'VmaStatInfo::unusedRangeSizeMax()'],['../struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b',1,'VmaPoolStats::unusedRangeSizeMax()']]],
-  ['unusedrangesizemin',['unusedRangeSizeMin',['../struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4',1,'VmaStatInfo']]],
-  ['unusedsize',['unusedSize',['../struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8',1,'VmaPoolStats']]],
-  ['usage',['usage',['../struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910',1,'VmaAllocationCreateInfo']]],
-  ['usedbytes',['usedBytes',['../struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a',1,'VmaStatInfo']]]
+  ['total',['total',['../struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9',1,'VmaStats']]]
 ];
diff --git a/docs/html/search/all_f.html b/docs/html/search/all_f.html
index 6ecfc0e..89fa15a 100644
--- a/docs/html/search/all_f.html
+++ b/docs/html/search/all_f.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="all_f.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/all_f.js b/docs/html/search/all_f.js
index cc8c748..bb52d7a 100644
--- a/docs/html/search/all_f.js
+++ b/docs/html/search/all_f.js
@@ -1,108 +1,11 @@
 var searchData=
 [
-  ['vulkan_20memory_20allocator',['Vulkan Memory Allocator',['../index.html',1,'']]],
-  ['vk_5fkhr_5fdedicated_5fallocation',['VK_KHR_dedicated_allocation',['../vk_khr_dedicated_allocation.html',1,'index']]],
-  ['vk_5fmem_5falloc_2eh',['vk_mem_alloc.h',['../vk__mem__alloc_8h.html',1,'']]],
-  ['vkallocatememory',['vkAllocateMemory',['../struct_vma_vulkan_functions.html#a2943bf99dfd784a0e8f599d987e22e6c',1,'VmaVulkanFunctions']]],
-  ['vkbindbuffermemory',['vkBindBufferMemory',['../struct_vma_vulkan_functions.html#a94fc4f3a605d9880bb3c0ba2c2fc80b2',1,'VmaVulkanFunctions']]],
-  ['vkbindimagememory',['vkBindImageMemory',['../struct_vma_vulkan_functions.html#a1338d96a128a5ade648b8d934907c637',1,'VmaVulkanFunctions']]],
-  ['vkcreatebuffer',['vkCreateBuffer',['../struct_vma_vulkan_functions.html#ae8084315a25006271a2edfc3a447519f',1,'VmaVulkanFunctions']]],
-  ['vkcreateimage',['vkCreateImage',['../struct_vma_vulkan_functions.html#a23ebe70be515b9b5010a1d691200e325',1,'VmaVulkanFunctions']]],
-  ['vkdestroybuffer',['vkDestroyBuffer',['../struct_vma_vulkan_functions.html#a7e054606faddb07f0e8556f3ed317d45',1,'VmaVulkanFunctions']]],
-  ['vkdestroyimage',['vkDestroyImage',['../struct_vma_vulkan_functions.html#a90b898227039b1dcb3520f6e91f09ffa',1,'VmaVulkanFunctions']]],
-  ['vkflushmappedmemoryranges',['vkFlushMappedMemoryRanges',['../struct_vma_vulkan_functions.html#a33c322f4c4ad2810f8a9c97a277572f9',1,'VmaVulkanFunctions']]],
-  ['vkfreememory',['vkFreeMemory',['../struct_vma_vulkan_functions.html#a4c658701778564d62034255b5dda91b4',1,'VmaVulkanFunctions']]],
-  ['vkgetbuffermemoryrequirements',['vkGetBufferMemoryRequirements',['../struct_vma_vulkan_functions.html#a5b92901df89a4194b0d12f6071d4d143',1,'VmaVulkanFunctions']]],
-  ['vkgetimagememoryrequirements',['vkGetImageMemoryRequirements',['../struct_vma_vulkan_functions.html#a475f6f49f8debe4d10800592606d53f4',1,'VmaVulkanFunctions']]],
-  ['vkgetphysicaldevicememoryproperties',['vkGetPhysicalDeviceMemoryProperties',['../struct_vma_vulkan_functions.html#a60d25c33bba06bb8592e6875cbaa9830',1,'VmaVulkanFunctions']]],
-  ['vkgetphysicaldeviceproperties',['vkGetPhysicalDeviceProperties',['../struct_vma_vulkan_functions.html#a77b7a74082823e865dd6546623468f96',1,'VmaVulkanFunctions']]],
-  ['vkinvalidatemappedmemoryranges',['vkInvalidateMappedMemoryRanges',['../struct_vma_vulkan_functions.html#a5c1093bc32386a8060c37c9f282078a1',1,'VmaVulkanFunctions']]],
-  ['vkmapmemory',['vkMapMemory',['../struct_vma_vulkan_functions.html#ab5c1f38dea3a2cf00dc9eb4f57218c49',1,'VmaVulkanFunctions']]],
-  ['vkunmapmemory',['vkUnmapMemory',['../struct_vma_vulkan_functions.html#acc798589736f0becb317fc2196c1d8b9',1,'VmaVulkanFunctions']]],
-  ['vma_5fallocation_5fcreate_5fcan_5fbecome_5flost_5fbit',['VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a5f436af6c8fe8540573a6d22627a6fd2',1,'vk_mem_alloc.h']]],
-  ['vma_5fallocation_5fcreate_5fcan_5fmake_5fother_5flost_5fbit',['VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a68686d0ce9beb0d4d1b9f2b8b1389a7e',1,'vk_mem_alloc.h']]],
-  ['vma_5fallocation_5fcreate_5fdedicated_5fmemory_5fbit',['VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f',1,'vk_mem_alloc.h']]],
-  ['vma_5fallocation_5fcreate_5fflag_5fbits_5fmax_5fenum',['VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882',1,'vk_mem_alloc.h']]],
-  ['vma_5fallocation_5fcreate_5fmapped_5fbit',['VMA_ALLOCATION_CREATE_MAPPED_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f',1,'vk_mem_alloc.h']]],
-  ['vma_5fallocation_5fcreate_5fnever_5fallocate_5fbit',['VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff',1,'vk_mem_alloc.h']]],
-  ['vma_5fallocation_5fcreate_5fupper_5faddress_5fbit',['VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df',1,'vk_mem_alloc.h']]],
-  ['vma_5fallocation_5fcreate_5fuser_5fdata_5fcopy_5fstring_5fbit',['VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520',1,'vk_mem_alloc.h']]],
-  ['vma_5fallocator_5fcreate_5fexternally_5fsynchronized_5fbit',['VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d',1,'vk_mem_alloc.h']]],
-  ['vma_5fallocator_5fcreate_5fflag_5fbits_5fmax_5fenum',['VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c',1,'vk_mem_alloc.h']]],
-  ['vma_5fallocator_5fcreate_5fkhr_5fdedicated_5fallocation_5fbit',['VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878',1,'vk_mem_alloc.h']]],
-  ['vma_5fdedicated_5fallocation',['VMA_DEDICATED_ALLOCATION',['../vk__mem__alloc_8h.html#af7b860e63b96d11e44ae8587ba06bbf4',1,'vk_mem_alloc.h']]],
-  ['vma_5fmemory_5fusage_5fcpu_5fonly',['VMA_MEMORY_USAGE_CPU_ONLY',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5',1,'vk_mem_alloc.h']]],
-  ['vma_5fmemory_5fusage_5fcpu_5fto_5fgpu',['VMA_MEMORY_USAGE_CPU_TO_GPU',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67',1,'vk_mem_alloc.h']]],
-  ['vma_5fmemory_5fusage_5fgpu_5fonly',['VMA_MEMORY_USAGE_GPU_ONLY',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7',1,'vk_mem_alloc.h']]],
-  ['vma_5fmemory_5fusage_5fgpu_5fto_5fcpu',['VMA_MEMORY_USAGE_GPU_TO_CPU',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27',1,'vk_mem_alloc.h']]],
-  ['vma_5fmemory_5fusage_5fmax_5fenum',['VMA_MEMORY_USAGE_MAX_ENUM',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e',1,'vk_mem_alloc.h']]],
-  ['vma_5fmemory_5fusage_5funknown',['VMA_MEMORY_USAGE_UNKNOWN',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd',1,'vk_mem_alloc.h']]],
-  ['vma_5fpool_5fcreate_5fflag_5fbits_5fmax_5fenum',['VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec',1,'vk_mem_alloc.h']]],
-  ['vma_5fpool_5fcreate_5fignore_5fbuffer_5fimage_5fgranularity_5fbit',['VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2',1,'vk_mem_alloc.h']]],
-  ['vma_5fpool_5fcreate_5flinear_5falgorithm_5fbit',['VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726',1,'vk_mem_alloc.h']]],
-  ['vma_5frecord_5fflag_5fbits_5fmax_5fenum',['VMA_RECORD_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a20dd17d69966dbffa054739d6090b85e',1,'vk_mem_alloc.h']]],
-  ['vma_5frecord_5fflush_5fafter_5fcall_5fbit',['VMA_RECORD_FLUSH_AFTER_CALL_BIT',['../vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a8e7ab322e8732654be627c4ea8f36cc7',1,'vk_mem_alloc.h']]],
-  ['vma_5frecording_5fenabled',['VMA_RECORDING_ENABLED',['../vk__mem__alloc_8h.html#a1f0c126759fc96ccb6e2d23c101d770c',1,'vk_mem_alloc.h']]],
-  ['vma_5fstats_5fstring_5fenabled',['VMA_STATS_STRING_ENABLED',['../vk__mem__alloc_8h.html#ae25f0d55fd91cb166f002b63244800e1',1,'vk_mem_alloc.h']]],
-  ['vmaallocatememory',['vmaAllocateMemory',['../vk__mem__alloc_8h.html#abf28077dbf82d0908b8acbe8ee8dd9b8',1,'vk_mem_alloc.h']]],
-  ['vmaallocatememoryforbuffer',['vmaAllocateMemoryForBuffer',['../vk__mem__alloc_8h.html#a7fdf64415b6c3d83c454f28d2c53df7b',1,'vk_mem_alloc.h']]],
-  ['vmaallocatememoryforimage',['vmaAllocateMemoryForImage',['../vk__mem__alloc_8h.html#a0faa3f9e5fb233d29d1e00390650febb',1,'vk_mem_alloc.h']]],
-  ['vmaallocation',['VmaAllocation',['../struct_vma_allocation.html',1,'']]],
-  ['vmaallocationcreateflagbits',['VmaAllocationCreateFlagBits',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597',1,'VmaAllocationCreateFlagBits():&#160;vk_mem_alloc.h'],['../vk__mem__alloc_8h.html#abf6bf6748c7a9fe7ce5b7835c0f56af4',1,'VmaAllocationCreateFlagBits():&#160;vk_mem_alloc.h']]],
-  ['vmaallocationcreateflags',['VmaAllocationCreateFlags',['../vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817',1,'vk_mem_alloc.h']]],
-  ['vmaallocationcreateinfo',['VmaAllocationCreateInfo',['../struct_vma_allocation_create_info.html',1,'VmaAllocationCreateInfo'],['../vk__mem__alloc_8h.html#a86c44f9950b40d50088ed93a17870a7a',1,'VmaAllocationCreateInfo():&#160;vk_mem_alloc.h']]],
-  ['vmaallocationinfo',['VmaAllocationInfo',['../struct_vma_allocation_info.html',1,'VmaAllocationInfo'],['../vk__mem__alloc_8h.html#a795e6ff02a21d5486c0565f403dd9255',1,'VmaAllocationInfo():&#160;vk_mem_alloc.h']]],
-  ['vmaallocator',['VmaAllocator',['../struct_vma_allocator.html',1,'']]],
-  ['vmaallocatorcreateflagbits',['VmaAllocatorCreateFlagBits',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c',1,'VmaAllocatorCreateFlagBits():&#160;vk_mem_alloc.h'],['../vk__mem__alloc_8h.html#a4ddf381b6ce795bdfbc6c614640b9915',1,'VmaAllocatorCreateFlagBits():&#160;vk_mem_alloc.h']]],
-  ['vmaallocatorcreateflags',['VmaAllocatorCreateFlags',['../vk__mem__alloc_8h.html#acfe6863e160722c2c1bbcf7573fddc4d',1,'vk_mem_alloc.h']]],
-  ['vmaallocatorcreateinfo',['VmaAllocatorCreateInfo',['../struct_vma_allocator_create_info.html',1,'VmaAllocatorCreateInfo'],['../vk__mem__alloc_8h.html#ae0f6d1d733dded220d28134da46b4283',1,'VmaAllocatorCreateInfo():&#160;vk_mem_alloc.h']]],
-  ['vmabindbuffermemory',['vmaBindBufferMemory',['../vk__mem__alloc_8h.html#a6b0929b914b60cf2d45cac4bf3547470',1,'vk_mem_alloc.h']]],
-  ['vmabindimagememory',['vmaBindImageMemory',['../vk__mem__alloc_8h.html#a3d3ca45799923aa5d138e9e5f9eb2da5',1,'vk_mem_alloc.h']]],
-  ['vmabuildstatsstring',['vmaBuildStatsString',['../vk__mem__alloc_8h.html#aa4fee7eb5253377599ef4fd38c93c2a0',1,'vk_mem_alloc.h']]],
-  ['vmacalculatestats',['vmaCalculateStats',['../vk__mem__alloc_8h.html#a333b61c1788cb23559177531e6a93ca3',1,'vk_mem_alloc.h']]],
-  ['vmacheckcorruption',['vmaCheckCorruption',['../vk__mem__alloc_8h.html#a49329a7f030dafcf82f7b73334c22e98',1,'vk_mem_alloc.h']]],
-  ['vmacheckpoolcorruption',['vmaCheckPoolCorruption',['../vk__mem__alloc_8h.html#ad535935619c7a549bf837e1bb0068f89',1,'vk_mem_alloc.h']]],
-  ['vmacreateallocator',['vmaCreateAllocator',['../vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb',1,'vk_mem_alloc.h']]],
-  ['vmacreatebuffer',['vmaCreateBuffer',['../vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51',1,'vk_mem_alloc.h']]],
-  ['vmacreateimage',['vmaCreateImage',['../vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73',1,'vk_mem_alloc.h']]],
-  ['vmacreatelostallocation',['vmaCreateLostAllocation',['../vk__mem__alloc_8h.html#ae5c9657d9e94756269145b01c05d16f1',1,'vk_mem_alloc.h']]],
-  ['vmacreatepool',['vmaCreatePool',['../vk__mem__alloc_8h.html#a5c8770ded7c59c8caac6de0c2cb00b50',1,'vk_mem_alloc.h']]],
-  ['vmadefragment',['vmaDefragment',['../vk__mem__alloc_8h.html#a6aced90fcc7b39882b6654a740a0b9bb',1,'vk_mem_alloc.h']]],
-  ['vmadefragmentationinfo',['VmaDefragmentationInfo',['../struct_vma_defragmentation_info.html',1,'VmaDefragmentationInfo'],['../vk__mem__alloc_8h.html#ae67f8573a0cf20f16f0a1eecbca566a0',1,'VmaDefragmentationInfo():&#160;vk_mem_alloc.h']]],
-  ['vmadefragmentationstats',['VmaDefragmentationStats',['../struct_vma_defragmentation_stats.html',1,'VmaDefragmentationStats'],['../vk__mem__alloc_8h.html#ab0f9b06441c840fee560de4a2967f8c9',1,'VmaDefragmentationStats():&#160;vk_mem_alloc.h']]],
-  ['vmadestroyallocator',['vmaDestroyAllocator',['../vk__mem__alloc_8h.html#aa8d164061c88f22fb1fd3c8f3534bc1d',1,'vk_mem_alloc.h']]],
-  ['vmadestroybuffer',['vmaDestroyBuffer',['../vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77',1,'vk_mem_alloc.h']]],
-  ['vmadestroyimage',['vmaDestroyImage',['../vk__mem__alloc_8h.html#ae50d2cb3b4a3bfd4dd40987234e50e7e',1,'vk_mem_alloc.h']]],
-  ['vmadestroypool',['vmaDestroyPool',['../vk__mem__alloc_8h.html#a5485779c8f1948238fc4e92232fa65e1',1,'vk_mem_alloc.h']]],
-  ['vmadevicememorycallbacks',['VmaDeviceMemoryCallbacks',['../struct_vma_device_memory_callbacks.html',1,'VmaDeviceMemoryCallbacks'],['../vk__mem__alloc_8h.html#a5e2eb68d727cfd4df25702b027b7aa31',1,'VmaDeviceMemoryCallbacks():&#160;vk_mem_alloc.h']]],
-  ['vmafindmemorytypeindex',['vmaFindMemoryTypeIndex',['../vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a',1,'vk_mem_alloc.h']]],
-  ['vmafindmemorytypeindexforbufferinfo',['vmaFindMemoryTypeIndexForBufferInfo',['../vk__mem__alloc_8h.html#ae790ab9ffaf7667fb8f62523e6897888',1,'vk_mem_alloc.h']]],
-  ['vmafindmemorytypeindexforimageinfo',['vmaFindMemoryTypeIndexForImageInfo',['../vk__mem__alloc_8h.html#a088da83d8eaf3ce9056d9ea0b981d472',1,'vk_mem_alloc.h']]],
-  ['vmaflushallocation',['vmaFlushAllocation',['../vk__mem__alloc_8h.html#abc34ee6f021f459aff885f3758c435de',1,'vk_mem_alloc.h']]],
-  ['vmafreememory',['vmaFreeMemory',['../vk__mem__alloc_8h.html#a11f0fbc034fa81a4efedd73d61ce7568',1,'vk_mem_alloc.h']]],
-  ['vmafreestatsstring',['vmaFreeStatsString',['../vk__mem__alloc_8h.html#a3104eb30d8122c84dd8541063f145288',1,'vk_mem_alloc.h']]],
-  ['vmagetallocationinfo',['vmaGetAllocationInfo',['../vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b',1,'vk_mem_alloc.h']]],
-  ['vmagetmemoryproperties',['vmaGetMemoryProperties',['../vk__mem__alloc_8h.html#ab88db292a17974f911182543fda52d19',1,'vk_mem_alloc.h']]],
-  ['vmagetmemorytypeproperties',['vmaGetMemoryTypeProperties',['../vk__mem__alloc_8h.html#a8701444752eb5de4464adb5a2b514bca',1,'vk_mem_alloc.h']]],
-  ['vmagetphysicaldeviceproperties',['vmaGetPhysicalDeviceProperties',['../vk__mem__alloc_8h.html#aecabf7b6e91ea87d0316fa0a9e014fe0',1,'vk_mem_alloc.h']]],
-  ['vmagetpoolstats',['vmaGetPoolStats',['../vk__mem__alloc_8h.html#ae8bf76997b234ef68aad922616df4153',1,'vk_mem_alloc.h']]],
-  ['vmainvalidateallocation',['vmaInvalidateAllocation',['../vk__mem__alloc_8h.html#a0d0eb0c1102268fa9a476d12ecbe4006',1,'vk_mem_alloc.h']]],
-  ['vmamakepoolallocationslost',['vmaMakePoolAllocationsLost',['../vk__mem__alloc_8h.html#a736bd6cbda886f36c891727e73bd4024',1,'vk_mem_alloc.h']]],
-  ['vmamapmemory',['vmaMapMemory',['../vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069',1,'vk_mem_alloc.h']]],
-  ['vmamemoryusage',['VmaMemoryUsage',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc',1,'VmaMemoryUsage():&#160;vk_mem_alloc.h'],['../vk__mem__alloc_8h.html#ad63b2113c0bfdbeade1cb498f5a8580d',1,'VmaMemoryUsage():&#160;vk_mem_alloc.h']]],
-  ['vmapool',['VmaPool',['../struct_vma_pool.html',1,'']]],
-  ['vmapoolcreateflagbits',['VmaPoolCreateFlagBits',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7',1,'VmaPoolCreateFlagBits():&#160;vk_mem_alloc.h'],['../vk__mem__alloc_8h.html#a8f93195158e0e2ac80ca352064e71c1f',1,'VmaPoolCreateFlagBits():&#160;vk_mem_alloc.h']]],
-  ['vmapoolcreateflags',['VmaPoolCreateFlags',['../vk__mem__alloc_8h.html#a2770e325ea42e087c1b91fdf46d0292a',1,'vk_mem_alloc.h']]],
-  ['vmapoolcreateinfo',['VmaPoolCreateInfo',['../struct_vma_pool_create_info.html',1,'VmaPoolCreateInfo'],['../vk__mem__alloc_8h.html#a211706e9348dcee25a843ed4ea69bce7',1,'VmaPoolCreateInfo():&#160;vk_mem_alloc.h']]],
-  ['vmapoolstats',['VmaPoolStats',['../struct_vma_pool_stats.html',1,'VmaPoolStats'],['../vk__mem__alloc_8h.html#a2e5612d871d64c5624087b837a338c34',1,'VmaPoolStats():&#160;vk_mem_alloc.h']]],
-  ['vmarecordflagbits',['VmaRecordFlagBits',['../vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2',1,'VmaRecordFlagBits():&#160;vk_mem_alloc.h'],['../vk__mem__alloc_8h.html#ade20b626a6635ce1bf30ea53dea774e4',1,'VmaRecordFlagBits():&#160;vk_mem_alloc.h']]],
-  ['vmarecordflags',['VmaRecordFlags',['../vk__mem__alloc_8h.html#af3929a1a4547c592fc0b0e55ef452828',1,'vk_mem_alloc.h']]],
-  ['vmarecordsettings',['VmaRecordSettings',['../struct_vma_record_settings.html',1,'VmaRecordSettings'],['../vk__mem__alloc_8h.html#a0ab61e87ff6365f1d59915eadc37a9f0',1,'VmaRecordSettings():&#160;vk_mem_alloc.h']]],
-  ['vmasetallocationuserdata',['vmaSetAllocationUserData',['../vk__mem__alloc_8h.html#af9147d31ffc11d62fc187bde283ed14f',1,'vk_mem_alloc.h']]],
-  ['vmasetcurrentframeindex',['vmaSetCurrentFrameIndex',['../vk__mem__alloc_8h.html#ade56bf8dc9f5a5eaddf5f119ed525236',1,'vk_mem_alloc.h']]],
-  ['vmastatinfo',['VmaStatInfo',['../struct_vma_stat_info.html',1,'VmaStatInfo'],['../vk__mem__alloc_8h.html#a810b009a788ee8aac72a25b42ffbe31c',1,'VmaStatInfo():&#160;vk_mem_alloc.h']]],
-  ['vmastats',['VmaStats',['../struct_vma_stats.html',1,'VmaStats'],['../vk__mem__alloc_8h.html#a732be855fb4a7c248e6853d928a729af',1,'VmaStats():&#160;vk_mem_alloc.h']]],
-  ['vmatouchallocation',['vmaTouchAllocation',['../vk__mem__alloc_8h.html#a43d8ba9673c846f049089a5029d5c73a',1,'vk_mem_alloc.h']]],
-  ['vmaunmapmemory',['vmaUnmapMemory',['../vk__mem__alloc_8h.html#a9bc268595cb33f6ec4d519cfce81ff45',1,'vk_mem_alloc.h']]],
-  ['vmavulkanfunctions',['VmaVulkanFunctions',['../struct_vma_vulkan_functions.html',1,'VmaVulkanFunctions'],['../vk__mem__alloc_8h.html#a97064a1a271b0061ebfc3a079862d0c5',1,'VmaVulkanFunctions():&#160;vk_mem_alloc.h']]]
+  ['unusedbytes',['unusedBytes',['../struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669',1,'VmaStatInfo']]],
+  ['unusedrangecount',['unusedRangeCount',['../struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9',1,'VmaStatInfo::unusedRangeCount()'],['../struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4',1,'VmaPoolStats::unusedRangeCount()']]],
+  ['unusedrangesizeavg',['unusedRangeSizeAvg',['../struct_vma_stat_info.html#a2f9b3452af90c9768a30b7fb6ae194fc',1,'VmaStatInfo']]],
+  ['unusedrangesizemax',['unusedRangeSizeMax',['../struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4',1,'VmaStatInfo::unusedRangeSizeMax()'],['../struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b',1,'VmaPoolStats::unusedRangeSizeMax()']]],
+  ['unusedrangesizemin',['unusedRangeSizeMin',['../struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4',1,'VmaStatInfo']]],
+  ['unusedsize',['unusedSize',['../struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8',1,'VmaPoolStats']]],
+  ['usage',['usage',['../struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910',1,'VmaAllocationCreateInfo']]],
+  ['usedbytes',['usedBytes',['../struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a',1,'VmaStatInfo']]]
 ];
diff --git a/docs/html/search/classes_0.html b/docs/html/search/classes_0.html
index 1c3e406..e935fdf 100644
--- a/docs/html/search/classes_0.html
+++ b/docs/html/search/classes_0.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="classes_0.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/defines_0.html b/docs/html/search/defines_0.html
index 5b25204..3bffafa 100644
--- a/docs/html/search/defines_0.html
+++ b/docs/html/search/defines_0.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="defines_0.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/defines_0.js b/docs/html/search/defines_0.js
index bf18592..8ba96ff 100644
--- a/docs/html/search/defines_0.js
+++ b/docs/html/search/defines_0.js
@@ -1,6 +1,4 @@
 var searchData=
 [
-  ['vma_5fdedicated_5fallocation',['VMA_DEDICATED_ALLOCATION',['../vk__mem__alloc_8h.html#af7b860e63b96d11e44ae8587ba06bbf4',1,'vk_mem_alloc.h']]],
-  ['vma_5frecording_5fenabled',['VMA_RECORDING_ENABLED',['../vk__mem__alloc_8h.html#a1f0c126759fc96ccb6e2d23c101d770c',1,'vk_mem_alloc.h']]],
-  ['vma_5fstats_5fstring_5fenabled',['VMA_STATS_STRING_ENABLED',['../vk__mem__alloc_8h.html#ae25f0d55fd91cb166f002b63244800e1',1,'vk_mem_alloc.h']]]
+  ['nominmax',['NOMINMAX',['../vk__mem__alloc_8h.html#a9f918755b601cf4bffca775992e6fb90',1,'vk_mem_alloc.h']]]
 ];
diff --git a/docs/html/search/defines_1.html b/docs/html/search/defines_1.html
new file mode 100644
index 0000000..ca5bb94
--- /dev/null
+++ b/docs/html/search/defines_1.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/defines_1.js b/docs/html/search/defines_1.js
new file mode 100644
index 0000000..bf18592
--- /dev/null
+++ b/docs/html/search/defines_1.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['vma_5fdedicated_5fallocation',['VMA_DEDICATED_ALLOCATION',['../vk__mem__alloc_8h.html#af7b860e63b96d11e44ae8587ba06bbf4',1,'vk_mem_alloc.h']]],
+  ['vma_5frecording_5fenabled',['VMA_RECORDING_ENABLED',['../vk__mem__alloc_8h.html#a1f0c126759fc96ccb6e2d23c101d770c',1,'vk_mem_alloc.h']]],
+  ['vma_5fstats_5fstring_5fenabled',['VMA_STATS_STRING_ENABLED',['../vk__mem__alloc_8h.html#ae25f0d55fd91cb166f002b63244800e1',1,'vk_mem_alloc.h']]]
+];
diff --git a/docs/html/search/enums_0.html b/docs/html/search/enums_0.html
index ee343ac..9efcd1b 100644
--- a/docs/html/search/enums_0.html
+++ b/docs/html/search/enums_0.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="enums_0.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/enumvalues_0.html b/docs/html/search/enumvalues_0.html
index 9387b6a..03fdfad 100644
--- a/docs/html/search/enumvalues_0.html
+++ b/docs/html/search/enumvalues_0.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="enumvalues_0.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/files_0.html b/docs/html/search/files_0.html
index 4f272b8..49606c8 100644
--- a/docs/html/search/files_0.html
+++ b/docs/html/search/files_0.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="files_0.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/functions_0.html b/docs/html/search/functions_0.html
index 4e6d87d..0539c8c 100644
--- a/docs/html/search/functions_0.html
+++ b/docs/html/search/functions_0.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="functions_0.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/pages_0.html b/docs/html/search/pages_0.html
index 4955b9e..d752858 100644
--- a/docs/html/search/pages_0.html
+++ b/docs/html/search/pages_0.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="pages_0.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/pages_1.html b/docs/html/search/pages_1.html
index aedb14e..924fb48 100644
--- a/docs/html/search/pages_1.html
+++ b/docs/html/search/pages_1.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="pages_1.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/pages_2.html b/docs/html/search/pages_2.html
index bd91593..ffc6d92 100644
--- a/docs/html/search/pages_2.html
+++ b/docs/html/search/pages_2.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="pages_2.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/pages_3.html b/docs/html/search/pages_3.html
index bc0e37f..f374624 100644
--- a/docs/html/search/pages_3.html
+++ b/docs/html/search/pages_3.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="pages_3.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/pages_4.html b/docs/html/search/pages_4.html
index d4c3e8e..593494e 100644
--- a/docs/html/search/pages_4.html
+++ b/docs/html/search/pages_4.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="pages_4.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/pages_5.html b/docs/html/search/pages_5.html
index af17efe..7033bd6 100644
--- a/docs/html/search/pages_5.html
+++ b/docs/html/search/pages_5.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="pages_5.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/pages_6.html b/docs/html/search/pages_6.html
index 52583b3..9794888 100644
--- a/docs/html/search/pages_6.html
+++ b/docs/html/search/pages_6.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="pages_6.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/pages_7.html b/docs/html/search/pages_7.html
index 7d4b8fe..a449a30 100644
--- a/docs/html/search/pages_7.html
+++ b/docs/html/search/pages_7.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="pages_7.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/pages_8.html b/docs/html/search/pages_8.html
index b704407..0e0205a 100644
--- a/docs/html/search/pages_8.html
+++ b/docs/html/search/pages_8.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="pages_8.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/pages_9.html b/docs/html/search/pages_9.html
index 751a30f..0f276f1 100644
--- a/docs/html/search/pages_9.html
+++ b/docs/html/search/pages_9.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="pages_9.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/search.js b/docs/html/search/search.js
index dedce3b..a554ab9 100644
--- a/docs/html/search/search.js
+++ b/docs/html/search/search.js
@@ -1,3 +1,26 @@
+/*
+ @licstart  The following is the entire license notice for the
+ JavaScript code in this file.
+
+ Copyright (C) 1997-2017 by Dimitri van Heesch
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ @licend  The above is the entire license notice
+ for the JavaScript code in this file
+ */
 function convertToId(search)
 {
   var result = '';
@@ -788,4 +811,4 @@
   }
   searchBox.OnSelectItem(0);
 }
-
+/* @license-end */
diff --git a/docs/html/search/searchdata.js b/docs/html/search/searchdata.js
index 4653a57..da94904 100644
--- a/docs/html/search/searchdata.js
+++ b/docs/html/search/searchdata.js
@@ -1,6 +1,6 @@
 var indexSectionsWithContent =
 {
-  0: "abcdfglmopqrstuv",
+  0: "abcdfglmnopqrstuv",
   1: "v",
   2: "v",
   3: "v",
@@ -8,7 +8,7 @@
   5: "pv",
   6: "v",
   7: "v",
-  8: "v",
+  8: "nv",
   9: "acdglmqrsv"
 };
 
diff --git a/docs/html/search/typedefs_0.html b/docs/html/search/typedefs_0.html
index 05722e1..2a284a9 100644
--- a/docs/html/search/typedefs_0.html
+++ b/docs/html/search/typedefs_0.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="typedefs_0.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/typedefs_1.html b/docs/html/search/typedefs_1.html
index b77c533..7af807d 100644
--- a/docs/html/search/typedefs_1.html
+++ b/docs/html/search/typedefs_1.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="typedefs_1.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/variables_0.html b/docs/html/search/variables_0.html
index 74ce807..51f7bd6 100644
--- a/docs/html/search/variables_0.html
+++ b/docs/html/search/variables_0.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="variables_0.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/variables_1.html b/docs/html/search/variables_1.html
index 84237b6..f46154d 100644
--- a/docs/html/search/variables_1.html
+++ b/docs/html/search/variables_1.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="variables_1.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/variables_2.html b/docs/html/search/variables_2.html
index 5c9de1a..15275b7 100644
--- a/docs/html/search/variables_2.html
+++ b/docs/html/search/variables_2.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="variables_2.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/variables_3.html b/docs/html/search/variables_3.html
index f95e34c..fbc3671 100644
--- a/docs/html/search/variables_3.html
+++ b/docs/html/search/variables_3.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="variables_3.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/variables_4.html b/docs/html/search/variables_4.html
index d7db285..8067e67 100644
--- a/docs/html/search/variables_4.html
+++ b/docs/html/search/variables_4.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="variables_4.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/variables_5.html b/docs/html/search/variables_5.html
index 7bbceeb..7e95e94 100644
--- a/docs/html/search/variables_5.html
+++ b/docs/html/search/variables_5.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="variables_5.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/variables_6.html b/docs/html/search/variables_6.html
index 4eb162d..3d398e6 100644
--- a/docs/html/search/variables_6.html
+++ b/docs/html/search/variables_6.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="variables_6.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/variables_7.html b/docs/html/search/variables_7.html
index 0408829..7b79146 100644
--- a/docs/html/search/variables_7.html
+++ b/docs/html/search/variables_7.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="variables_7.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/variables_8.html b/docs/html/search/variables_8.html
index d54d096..8ebc5f6 100644
--- a/docs/html/search/variables_8.html
+++ b/docs/html/search/variables_8.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="variables_8.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/variables_9.html b/docs/html/search/variables_9.html
index 234dc60..1213661 100644
--- a/docs/html/search/variables_9.html
+++ b/docs/html/search/variables_9.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="variables_9.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/variables_a.html b/docs/html/search/variables_a.html
index 0892488..24819a3 100644
--- a/docs/html/search/variables_a.html
+++ b/docs/html/search/variables_a.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="variables_a.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/search/variables_b.html b/docs/html/search/variables_b.html
index ea46965..b306931 100644
--- a/docs/html/search/variables_b.html
+++ b/docs/html/search/variables_b.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="variables_b.js"></script>
 <script type="text/javascript" src="search.js"></script>
@@ -11,15 +11,19 @@
 <div class="SRStatus" id="Loading">Loading...</div>
 <div id="SRResults"></div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 createResults();
+/* @license-end */
 --></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults");
 searchResults.Search();
+/* @license-end */
 --></script>
 </div>
 </body>
diff --git a/docs/html/statistics.html b/docs/html/statistics.html
index ecc9ca2..038d1ba 100644
--- a/docs/html/statistics.html
+++ b/docs/html/statistics.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Statistics</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -82,7 +85,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/struct_vma_allocation.html b/docs/html/struct_vma_allocation.html
index 7e0dc83..49946aa 100644
--- a/docs/html/struct_vma_allocation.html
+++ b/docs/html/struct_vma_allocation.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: VmaAllocation Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -82,7 +85,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/struct_vma_allocation_create_info-members.html b/docs/html/struct_vma_allocation_create_info-members.html
index d9dba01..ff1dbe8 100644
--- a/docs/html/struct_vma_allocation_create_info-members.html
+++ b/docs/html/struct_vma_allocation_create_info-members.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Member List</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -77,7 +80,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/struct_vma_allocation_create_info.html b/docs/html/struct_vma_allocation_create_info.html
index 1bd8a32..e803bc3 100644
--- a/docs/html/struct_vma_allocation_create_info.html
+++ b/docs/html/struct_vma_allocation_create_info.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: VmaAllocationCreateInfo Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -223,7 +226,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/struct_vma_allocation_info-members.html b/docs/html/struct_vma_allocation_info-members.html
index 0ad42b1..bc64aab 100644
--- a/docs/html/struct_vma_allocation_info-members.html
+++ b/docs/html/struct_vma_allocation_info-members.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Member List</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -76,7 +79,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/struct_vma_allocation_info.html b/docs/html/struct_vma_allocation_info.html
index eaf2de5..4c852a6 100644
--- a/docs/html/struct_vma_allocation_info.html
+++ b/docs/html/struct_vma_allocation_info.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: VmaAllocationInfo Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -208,7 +211,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/struct_vma_allocator.html b/docs/html/struct_vma_allocator.html
index 0f6dd81..acc46e8 100644
--- a/docs/html/struct_vma_allocator.html
+++ b/docs/html/struct_vma_allocator.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: VmaAllocator Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -79,7 +82,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/struct_vma_allocator_create_info-members.html b/docs/html/struct_vma_allocator_create_info-members.html
index 598ecde..6e5cbd5 100644
--- a/docs/html/struct_vma_allocator_create_info-members.html
+++ b/docs/html/struct_vma_allocator_create_info-members.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Member List</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -80,7 +83,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/struct_vma_allocator_create_info.html b/docs/html/struct_vma_allocator_create_info.html
index f9735fb..25fd89f 100644
--- a/docs/html/struct_vma_allocator_create_info.html
+++ b/docs/html/struct_vma_allocator_create_info.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: VmaAllocatorCreateInfo Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -294,7 +297,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/struct_vma_defragmentation_info-members.html b/docs/html/struct_vma_defragmentation_info-members.html
index 8b5fac6..528b8a2 100644
--- a/docs/html/struct_vma_defragmentation_info-members.html
+++ b/docs/html/struct_vma_defragmentation_info-members.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Member List</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -72,7 +75,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/struct_vma_defragmentation_info.html b/docs/html/struct_vma_defragmentation_info.html
index 2e16a9c..eed9785 100644
--- a/docs/html/struct_vma_defragmentation_info.html
+++ b/docs/html/struct_vma_defragmentation_info.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: VmaDefragmentationInfo Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -125,7 +128,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/struct_vma_defragmentation_stats-members.html b/docs/html/struct_vma_defragmentation_stats-members.html
index c823a39..4afb75c 100644
--- a/docs/html/struct_vma_defragmentation_stats-members.html
+++ b/docs/html/struct_vma_defragmentation_stats-members.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Member List</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -74,7 +77,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/struct_vma_defragmentation_stats.html b/docs/html/struct_vma_defragmentation_stats.html
index 70edd98..dbbcebb 100644
--- a/docs/html/struct_vma_defragmentation_stats.html
+++ b/docs/html/struct_vma_defragmentation_stats.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: VmaDefragmentationStats Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -161,7 +164,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/struct_vma_device_memory_callbacks-members.html b/docs/html/struct_vma_device_memory_callbacks-members.html
index 10c56e5..9816499 100644
--- a/docs/html/struct_vma_device_memory_callbacks-members.html
+++ b/docs/html/struct_vma_device_memory_callbacks-members.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Member List</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -72,7 +75,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/struct_vma_device_memory_callbacks.html b/docs/html/struct_vma_device_memory_callbacks.html
index 701c578..fc5892e 100644
--- a/docs/html/struct_vma_device_memory_callbacks.html
+++ b/docs/html/struct_vma_device_memory_callbacks.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: VmaDeviceMemoryCallbacks Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -125,7 +128,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/struct_vma_pool.html b/docs/html/struct_vma_pool.html
index 92b3d44..7f2cb75 100644
--- a/docs/html/struct_vma_pool.html
+++ b/docs/html/struct_vma_pool.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: VmaPool Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -79,7 +82,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/struct_vma_pool_create_info-members.html b/docs/html/struct_vma_pool_create_info-members.html
index 49088c2..4978d4b 100644
--- a/docs/html/struct_vma_pool_create_info-members.html
+++ b/docs/html/struct_vma_pool_create_info-members.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Member List</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -76,7 +79,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/struct_vma_pool_create_info.html b/docs/html/struct_vma_pool_create_info.html
index d0bbc42..8e510ba 100644
--- a/docs/html/struct_vma_pool_create_info.html
+++ b/docs/html/struct_vma_pool_create_info.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: VmaPoolCreateInfo Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -207,7 +210,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/struct_vma_pool_stats-members.html b/docs/html/struct_vma_pool_stats-members.html
index f73f53c..b9ad18d 100644
--- a/docs/html/struct_vma_pool_stats-members.html
+++ b/docs/html/struct_vma_pool_stats-members.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Member List</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -76,7 +79,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/struct_vma_pool_stats.html b/docs/html/struct_vma_pool_stats.html
index 93866b3..9b84b8a 100644
--- a/docs/html/struct_vma_pool_stats.html
+++ b/docs/html/struct_vma_pool_stats.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: VmaPoolStats Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -200,7 +203,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/struct_vma_record_settings-members.html b/docs/html/struct_vma_record_settings-members.html
index 8079ef8..63b1eed 100644
--- a/docs/html/struct_vma_record_settings-members.html
+++ b/docs/html/struct_vma_record_settings-members.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Member List</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -72,7 +75,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/struct_vma_record_settings.html b/docs/html/struct_vma_record_settings.html
index fe9f186..1047114 100644
--- a/docs/html/struct_vma_record_settings.html
+++ b/docs/html/struct_vma_record_settings.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: VmaRecordSettings Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -124,7 +127,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/struct_vma_stat_info-members.html b/docs/html/struct_vma_stat_info-members.html
index b7e273c..ef288a8 100644
--- a/docs/html/struct_vma_stat_info-members.html
+++ b/docs/html/struct_vma_stat_info-members.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Member List</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -81,7 +84,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/struct_vma_stat_info.html b/docs/html/struct_vma_stat_info.html
index 8dfebaa..49fd46c 100644
--- a/docs/html/struct_vma_stat_info.html
+++ b/docs/html/struct_vma_stat_info.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: VmaStatInfo Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -276,7 +279,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/struct_vma_stats-members.html b/docs/html/struct_vma_stats-members.html
index ef81a09..d93b2d9 100644
--- a/docs/html/struct_vma_stats-members.html
+++ b/docs/html/struct_vma_stats-members.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Member List</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -73,7 +76,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/struct_vma_stats.html b/docs/html/struct_vma_stats.html
index 0a73bee..909c812 100644
--- a/docs/html/struct_vma_stats.html
+++ b/docs/html/struct_vma_stats.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: VmaStats Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -133,7 +136,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/struct_vma_vulkan_functions-members.html b/docs/html/struct_vma_vulkan_functions-members.html
index 22699b3..1ba48bc 100644
--- a/docs/html/struct_vma_vulkan_functions-members.html
+++ b/docs/html/struct_vma_vulkan_functions-members.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Member List</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -86,7 +89,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/struct_vma_vulkan_functions.html b/docs/html/struct_vma_vulkan_functions.html
index 5e49e4d..6196e46 100644
--- a/docs/html/struct_vma_vulkan_functions.html
+++ b/docs/html/struct_vma_vulkan_functions.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: VmaVulkanFunctions Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -342,7 +345,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/usage_patterns.html b/docs/html/usage_patterns.html
index 897dca1..4e70e86 100644
--- a/docs/html/usage_patterns.html
+++ b/docs/html/usage_patterns.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: Recommended usage patterns</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -121,7 +124,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/vk__mem__alloc_8h.html b/docs/html/vk__mem__alloc_8h.html
index 49c5731..2b58e7a 100644
--- a/docs/html/vk__mem__alloc_8h.html
+++ b/docs/html/vk__mem__alloc_8h.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: vk_mem_alloc.h File Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
@@ -112,10 +115,12 @@
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
 Macros</h2></td></tr>
-<tr class="memitem:af7b860e63b96d11e44ae8587ba06bbf4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#af7b860e63b96d11e44ae8587ba06bbf4">VMA_DEDICATED_ALLOCATION</a>&#160;&#160;&#160;0</td></tr>
-<tr class="separator:af7b860e63b96d11e44ae8587ba06bbf4"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a1f0c126759fc96ccb6e2d23c101d770c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a1f0c126759fc96ccb6e2d23c101d770c">VMA_RECORDING_ENABLED</a>&#160;&#160;&#160;0</td></tr>
 <tr class="separator:a1f0c126759fc96ccb6e2d23c101d770c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9f918755b601cf4bffca775992e6fb90"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a9f918755b601cf4bffca775992e6fb90">NOMINMAX</a></td></tr>
+<tr class="separator:a9f918755b601cf4bffca775992e6fb90"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af7b860e63b96d11e44ae8587ba06bbf4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#af7b860e63b96d11e44ae8587ba06bbf4">VMA_DEDICATED_ALLOCATION</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:af7b860e63b96d11e44ae8587ba06bbf4"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ae25f0d55fd91cb166f002b63244800e1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#ae25f0d55fd91cb166f002b63244800e1">VMA_STATS_STRING_ENABLED</a>&#160;&#160;&#160;1</td></tr>
 <tr class="separator:ae25f0d55fd91cb166f002b63244800e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table><table class="memberdecls">
@@ -190,13 +195,13 @@
 <tr class="memitem:a4f87c9100d154a65a4ad495f7763cf7c"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c">VmaAllocatorCreateFlagBits</a> { <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d">VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT</a> = 0x00000001, 
 <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878">VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</a> = 0x00000002, 
 <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c">VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF
- }<tr class="memdesc:a4f87c9100d154a65a4ad495f7763cf7c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flags for created <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized. ">VmaAllocator</a>.  <a href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c">More...</a><br /></td></tr>
-</td></tr>
+ }</td></tr>
+<tr class="memdesc:a4f87c9100d154a65a4ad495f7763cf7c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flags for created <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized. ">VmaAllocator</a>.  <a href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c">More...</a><br /></td></tr>
 <tr class="separator:a4f87c9100d154a65a4ad495f7763cf7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a4dd2c44642312a147a4e93373a6e64d2"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2">VmaRecordFlagBits</a> { <a class="el" href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a8e7ab322e8732654be627c4ea8f36cc7">VMA_RECORD_FLUSH_AFTER_CALL_BIT</a> = 0x00000001, 
 <a class="el" href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a20dd17d69966dbffa054739d6090b85e">VMA_RECORD_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF
- }<tr class="memdesc:a4dd2c44642312a147a4e93373a6e64d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flags to be used in <a class="el" href="struct_vma_record_settings.html#ad8fdcc92119ae7a8c08c1a564c01d63a" title="Flags for recording. Use VmaRecordFlagBits enum. ">VmaRecordSettings::flags</a>.  <a href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2">More...</a><br /></td></tr>
-</td></tr>
+ }</td></tr>
+<tr class="memdesc:a4dd2c44642312a147a4e93373a6e64d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flags to be used in <a class="el" href="struct_vma_record_settings.html#ad8fdcc92119ae7a8c08c1a564c01d63a" title="Flags for recording. Use VmaRecordFlagBits enum. ">VmaRecordSettings::flags</a>.  <a href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2">More...</a><br /></td></tr>
 <tr class="separator:a4dd2c44642312a147a4e93373a6e64d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:aa5846affa1e9da3800e3e78fae2305cc"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a> { <br />
 &#160;&#160;<a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd">VMA_MEMORY_USAGE_UNKNOWN</a> = 0, 
@@ -220,14 +225,14 @@
 <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df">VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT</a> = 0x00000040, 
 <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882">VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF
 <br />
- }<tr class="memdesc:ad9889c10c798b040d59c92f257cae597"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b" title="Use VmaAllocationCreateFlagBits enum. ">VmaAllocationCreateInfo::flags</a>.  <a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597">More...</a><br /></td></tr>
-</td></tr>
+ }</td></tr>
+<tr class="memdesc:ad9889c10c798b040d59c92f257cae597"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b" title="Use VmaAllocationCreateFlagBits enum. ">VmaAllocationCreateInfo::flags</a>.  <a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597">More...</a><br /></td></tr>
 <tr class="separator:ad9889c10c798b040d59c92f257cae597"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a9a7c45f9c863695d98c83fa5ac940fe7"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7">VmaPoolCreateFlagBits</a> { <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2">VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT</a> = 0x00000002, 
 <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a> = 0x00000004, 
 <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec">VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF
- }<tr class="memdesc:a9a7c45f9c863695d98c83fa5ac940fe7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446" title="Use combination of VmaPoolCreateFlagBits. ">VmaPoolCreateInfo::flags</a>.  <a href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7">More...</a><br /></td></tr>
-</td></tr>
+ }</td></tr>
+<tr class="memdesc:a9a7c45f9c863695d98c83fa5ac940fe7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446" title="Use combination of VmaPoolCreateFlagBits. ">VmaPoolCreateInfo::flags</a>.  <a href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7">More...</a><br /></td></tr>
 <tr class="separator:a9a7c45f9c863695d98c83fa5ac940fe7"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
@@ -340,6 +345,20 @@
 <tr class="separator:ae50d2cb3b4a3bfd4dd40987234e50e7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <h2 class="groupheader">Macro Definition Documentation</h2>
+<a id="a9f918755b601cf4bffca775992e6fb90"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9f918755b601cf4bffca775992e6fb90">&#9670;&nbsp;</a></span>NOMINMAX</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NOMINMAX</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
 <a id="af7b860e63b96d11e44ae8587ba06bbf4"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#af7b860e63b96d11e44ae8587ba06bbf4">&#9670;&nbsp;</a></span>VMA_DEDICATED_ALLOCATION</h2>
 
@@ -2453,7 +2472,7 @@
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.13
+</a> 1.8.14
 </small></address>
 </body>
 </html>
diff --git a/docs/html/vk__mem__alloc_8h_source.html b/docs/html/vk__mem__alloc_8h_source.html
index 95cdbf9..270dba8 100644
--- a/docs/html/vk__mem__alloc_8h_source.html
+++ b/docs/html/vk__mem__alloc_8h_source.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>Vulkan Memory Allocator: vk_mem_alloc.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -29,18 +29,21 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.14 -->
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
 </div><!-- top -->
 <!-- window showing the filter options -->
@@ -62,185 +65,185 @@
 <div class="title">vk_mem_alloc.h</div>  </div>
 </div><!--header-->
 <div class="contents">
-<a href="vk__mem__alloc_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">// Copyright (c) 2017-2018 Advanced Micro Devices, Inc. All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">// Permission is hereby granted, free of charge, to any person obtaining a copy</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">// of this software and associated documentation files (the &quot;Software&quot;), to deal</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">// in the Software without restriction, including without limitation the rights</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">// copies of the Software, and to permit persons to whom the Software is</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">// furnished to do so, subject to the following conditions:</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">// The above copyright notice and this permission notice shall be included in</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">// all copies or substantial portions of the Software.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">// THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment">// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment">// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment">// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment">// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment">// THE SOFTWARE.</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#ifndef AMD_VULKAN_MEMORY_ALLOCATOR_H</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#define AMD_VULKAN_MEMORY_ALLOCATOR_H</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160;<span class="preprocessor">#include &lt;vulkan/vulkan.h&gt;</span></div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160;</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160;<span class="preprocessor">#if !defined(VMA_DEDICATED_ALLOCATION)</span></div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160;<span class="preprocessor">    #if VK_KHR_get_memory_requirements2 &amp;&amp; VK_KHR_dedicated_allocation</span></div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160;<span class="preprocessor">        #define VMA_DEDICATED_ALLOCATION 1</span></div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160;<span class="preprocessor">    #else</span></div><div class="line"><a name="l01365"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#af7b860e63b96d11e44ae8587ba06bbf4"> 1365</a></span>&#160;<span class="preprocessor">        #define VMA_DEDICATED_ALLOCATION 0</span></div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160;<span class="preprocessor">    #endif</span></div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160;VK_DEFINE_HANDLE(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a>)</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160;</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160;<span class="keyword">typedef</span> void (VKAPI_PTR *<a class="code" href="vk__mem__alloc_8h.html#ab6a6477cda1ce775b30bde96d766203b">PFN_vmaAllocateDeviceMemoryFunction</a>)(</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a>      allocator,</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160;    uint32_t          memoryType,</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160;    VkDeviceMemory    memory,</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160;    VkDeviceSize      size);</div><div class="line"><a name="l01387"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aef2545dc2e9dd4f29ab9ba6ac6fe2f49"> 1387</a></span>&#160;<span class="keyword">typedef</span> void (VKAPI_PTR *<a class="code" href="vk__mem__alloc_8h.html#aef2545dc2e9dd4f29ab9ba6ac6fe2f49">PFN_vmaFreeDeviceMemoryFunction</a>)(</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a>      allocator,</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160;    uint32_t          memoryType,</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160;    VkDeviceMemory    memory,</div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160;    VkDeviceSize      size);</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160;</div><div class="line"><a name="l01400"></a><span class="lineno"><a class="line" href="struct_vma_device_memory_callbacks.html"> 1400</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_device_memory_callbacks.html">VmaDeviceMemoryCallbacks</a> {</div><div class="line"><a name="l01402"></a><span class="lineno"><a class="line" href="struct_vma_device_memory_callbacks.html#a4f17f7b255101e733b44d5633aceabfb"> 1402</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ab6a6477cda1ce775b30bde96d766203b">PFN_vmaAllocateDeviceMemoryFunction</a> <a class="code" href="struct_vma_device_memory_callbacks.html#a4f17f7b255101e733b44d5633aceabfb">pfnAllocate</a>;</div><div class="line"><a name="l01404"></a><span class="lineno"><a class="line" href="struct_vma_device_memory_callbacks.html#abe8a3328bbc916f6f712fdb6b299444c"> 1404</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#aef2545dc2e9dd4f29ab9ba6ac6fe2f49">PFN_vmaFreeDeviceMemoryFunction</a> <a class="code" href="struct_vma_device_memory_callbacks.html#abe8a3328bbc916f6f712fdb6b299444c">pfnFree</a>;</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a5e2eb68d727cfd4df25702b027b7aa31">VmaDeviceMemoryCallbacks</a>;</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160;</div><div class="line"><a name="l01408"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c"> 1408</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c">VmaAllocatorCreateFlagBits</a> {</div><div class="line"><a name="l01413"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d"> 1413</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d">VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT</a> = 0x00000001,</div><div class="line"><a name="l01435"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878"> 1435</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878">VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</a> = 0x00000002,</div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160;</div><div class="line"><a name="l01437"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c"> 1437</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c">VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c">VmaAllocatorCreateFlagBits</a>;</div><div class="line"><a name="l01439"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#acfe6863e160722c2c1bbcf7573fddc4d"> 1439</a></span>&#160;<span class="keyword">typedef</span> VkFlags <a class="code" href="vk__mem__alloc_8h.html#acfe6863e160722c2c1bbcf7573fddc4d">VmaAllocatorCreateFlags</a>;</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160;</div><div class="line"><a name="l01445"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html"> 1445</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_vulkan_functions.html">VmaVulkanFunctions</a> {</div><div class="line"><a name="l01446"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a77b7a74082823e865dd6546623468f96"> 1446</a></span>&#160;    PFN_vkGetPhysicalDeviceProperties <a class="code" href="struct_vma_vulkan_functions.html#a77b7a74082823e865dd6546623468f96">vkGetPhysicalDeviceProperties</a>;</div><div class="line"><a name="l01447"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a60d25c33bba06bb8592e6875cbaa9830"> 1447</a></span>&#160;    PFN_vkGetPhysicalDeviceMemoryProperties <a class="code" href="struct_vma_vulkan_functions.html#a60d25c33bba06bb8592e6875cbaa9830">vkGetPhysicalDeviceMemoryProperties</a>;</div><div class="line"><a name="l01448"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a2943bf99dfd784a0e8f599d987e22e6c"> 1448</a></span>&#160;    PFN_vkAllocateMemory <a class="code" href="struct_vma_vulkan_functions.html#a2943bf99dfd784a0e8f599d987e22e6c">vkAllocateMemory</a>;</div><div class="line"><a name="l01449"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a4c658701778564d62034255b5dda91b4"> 1449</a></span>&#160;    PFN_vkFreeMemory <a class="code" href="struct_vma_vulkan_functions.html#a4c658701778564d62034255b5dda91b4">vkFreeMemory</a>;</div><div class="line"><a name="l01450"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#ab5c1f38dea3a2cf00dc9eb4f57218c49"> 1450</a></span>&#160;    PFN_vkMapMemory <a class="code" href="struct_vma_vulkan_functions.html#ab5c1f38dea3a2cf00dc9eb4f57218c49">vkMapMemory</a>;</div><div class="line"><a name="l01451"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#acc798589736f0becb317fc2196c1d8b9"> 1451</a></span>&#160;    PFN_vkUnmapMemory <a class="code" href="struct_vma_vulkan_functions.html#acc798589736f0becb317fc2196c1d8b9">vkUnmapMemory</a>;</div><div class="line"><a name="l01452"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a33c322f4c4ad2810f8a9c97a277572f9"> 1452</a></span>&#160;    PFN_vkFlushMappedMemoryRanges <a class="code" href="struct_vma_vulkan_functions.html#a33c322f4c4ad2810f8a9c97a277572f9">vkFlushMappedMemoryRanges</a>;</div><div class="line"><a name="l01453"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a5c1093bc32386a8060c37c9f282078a1"> 1453</a></span>&#160;    PFN_vkInvalidateMappedMemoryRanges <a class="code" href="struct_vma_vulkan_functions.html#a5c1093bc32386a8060c37c9f282078a1">vkInvalidateMappedMemoryRanges</a>;</div><div class="line"><a name="l01454"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a94fc4f3a605d9880bb3c0ba2c2fc80b2"> 1454</a></span>&#160;    PFN_vkBindBufferMemory <a class="code" href="struct_vma_vulkan_functions.html#a94fc4f3a605d9880bb3c0ba2c2fc80b2">vkBindBufferMemory</a>;</div><div class="line"><a name="l01455"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a1338d96a128a5ade648b8d934907c637"> 1455</a></span>&#160;    PFN_vkBindImageMemory <a class="code" href="struct_vma_vulkan_functions.html#a1338d96a128a5ade648b8d934907c637">vkBindImageMemory</a>;</div><div class="line"><a name="l01456"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a5b92901df89a4194b0d12f6071d4d143"> 1456</a></span>&#160;    PFN_vkGetBufferMemoryRequirements <a class="code" href="struct_vma_vulkan_functions.html#a5b92901df89a4194b0d12f6071d4d143">vkGetBufferMemoryRequirements</a>;</div><div class="line"><a name="l01457"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a475f6f49f8debe4d10800592606d53f4"> 1457</a></span>&#160;    PFN_vkGetImageMemoryRequirements <a class="code" href="struct_vma_vulkan_functions.html#a475f6f49f8debe4d10800592606d53f4">vkGetImageMemoryRequirements</a>;</div><div class="line"><a name="l01458"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#ae8084315a25006271a2edfc3a447519f"> 1458</a></span>&#160;    PFN_vkCreateBuffer <a class="code" href="struct_vma_vulkan_functions.html#ae8084315a25006271a2edfc3a447519f">vkCreateBuffer</a>;</div><div class="line"><a name="l01459"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a7e054606faddb07f0e8556f3ed317d45"> 1459</a></span>&#160;    PFN_vkDestroyBuffer <a class="code" href="struct_vma_vulkan_functions.html#a7e054606faddb07f0e8556f3ed317d45">vkDestroyBuffer</a>;</div><div class="line"><a name="l01460"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a23ebe70be515b9b5010a1d691200e325"> 1460</a></span>&#160;    PFN_vkCreateImage <a class="code" href="struct_vma_vulkan_functions.html#a23ebe70be515b9b5010a1d691200e325">vkCreateImage</a>;</div><div class="line"><a name="l01461"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a90b898227039b1dcb3520f6e91f09ffa"> 1461</a></span>&#160;    PFN_vkDestroyImage <a class="code" href="struct_vma_vulkan_functions.html#a90b898227039b1dcb3520f6e91f09ffa">vkDestroyImage</a>;</div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160;<span class="preprocessor">#if VMA_DEDICATED_ALLOCATION</span></div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160;    PFN_vkGetBufferMemoryRequirements2KHR vkGetBufferMemoryRequirements2KHR;</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;    PFN_vkGetImageMemoryRequirements2KHR vkGetImageMemoryRequirements2KHR;</div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a97064a1a271b0061ebfc3a079862d0c5">VmaVulkanFunctions</a>;</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160;</div><div class="line"><a name="l01469"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2"> 1469</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2">VmaRecordFlagBits</a> {</div><div class="line"><a name="l01475"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a8e7ab322e8732654be627c4ea8f36cc7"> 1475</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a8e7ab322e8732654be627c4ea8f36cc7">VMA_RECORD_FLUSH_AFTER_CALL_BIT</a> = 0x00000001,</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160;    </div><div class="line"><a name="l01477"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a20dd17d69966dbffa054739d6090b85e"> 1477</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a20dd17d69966dbffa054739d6090b85e">VMA_RECORD_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2">VmaRecordFlagBits</a>;</div><div class="line"><a name="l01479"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#af3929a1a4547c592fc0b0e55ef452828"> 1479</a></span>&#160;<span class="keyword">typedef</span> VkFlags <a class="code" href="vk__mem__alloc_8h.html#af3929a1a4547c592fc0b0e55ef452828">VmaRecordFlags</a>;</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160;</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160;<span class="comment">Define this macro to 0/1 to disable/enable support for recording functionality,</span></div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160;<span class="comment">available through VmaAllocatorCreateInfo::pRecordSettings.</span></div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160;<span class="preprocessor">#ifndef VMA_RECORDING_ENABLED</span></div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160;<span class="preprocessor">    #ifdef _WIN32</span></div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160;<span class="preprocessor">        #define VMA_RECORDING_ENABLED 1</span></div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160;<span class="preprocessor">    #else</span></div><div class="line"><a name="l01489"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a1f0c126759fc96ccb6e2d23c101d770c"> 1489</a></span>&#160;<span class="preprocessor">        #define VMA_RECORDING_ENABLED 0</span></div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160;<span class="preprocessor">    #endif</span></div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160;</div><div class="line"><a name="l01494"></a><span class="lineno"><a class="line" href="struct_vma_record_settings.html"> 1494</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_record_settings.html">VmaRecordSettings</a></div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160;{</div><div class="line"><a name="l01497"></a><span class="lineno"><a class="line" href="struct_vma_record_settings.html#ad8fdcc92119ae7a8c08c1a564c01d63a"> 1497</a></span>&#160;    VmaRecordFlags <a class="code" href="struct_vma_record_settings.html#ad8fdcc92119ae7a8c08c1a564c01d63a">flags</a>;</div><div class="line"><a name="l01505"></a><span class="lineno"><a class="line" href="struct_vma_record_settings.html#a6cb1fdbf6bcb610b68f2010dd629e89d"> 1505</a></span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="struct_vma_record_settings.html#a6cb1fdbf6bcb610b68f2010dd629e89d">pFilePath</a>;</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a0ab61e87ff6365f1d59915eadc37a9f0">VmaRecordSettings</a>;</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160;</div><div class="line"><a name="l01509"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html"> 1509</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a></div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160;{</div><div class="line"><a name="l01512"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346"> 1512</a></span>&#160;    VmaAllocatorCreateFlags <a class="code" href="struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346">flags</a>;</div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160;</div><div class="line"><a name="l01515"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#a08230f04ae6ccf8a78150a9e829a7156"> 1515</a></span>&#160;    VkPhysicalDevice <a class="code" href="struct_vma_allocator_create_info.html#a08230f04ae6ccf8a78150a9e829a7156">physicalDevice</a>;</div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160;</div><div class="line"><a name="l01518"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#ad924ddd77b04039c88d0c09b0ffcd500"> 1518</a></span>&#160;    VkDevice <a class="code" href="struct_vma_allocator_create_info.html#ad924ddd77b04039c88d0c09b0ffcd500">device</a>;</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160;</div><div class="line"><a name="l01521"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#a8e4714298e3121cdd8b214a1ae7a637a"> 1521</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_allocator_create_info.html#a8e4714298e3121cdd8b214a1ae7a637a">preferredLargeHeapBlockSize</a>;</div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160;</div><div class="line"><a name="l01524"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#a6e409087e3be55400d0e4ccbe43c608d"> 1524</a></span>&#160;    <span class="keyword">const</span> VkAllocationCallbacks* <a class="code" href="struct_vma_allocator_create_info.html#a6e409087e3be55400d0e4ccbe43c608d">pAllocationCallbacks</a>;</div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160;</div><div class="line"><a name="l01527"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#af1380969b5e1ea4c3184a877892d260e"> 1527</a></span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_device_memory_callbacks.html">VmaDeviceMemoryCallbacks</a>* <a class="code" href="struct_vma_allocator_create_info.html#af1380969b5e1ea4c3184a877892d260e">pDeviceMemoryCallbacks</a>;</div><div class="line"><a name="l01541"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#a21ea188dd212b8171cb9ecbed4a2a3a7"> 1541</a></span>&#160;    uint32_t <a class="code" href="struct_vma_allocator_create_info.html#a21ea188dd212b8171cb9ecbed4a2a3a7">frameInUseCount</a>;</div><div class="line"><a name="l01565"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#a31c192aa6cbffa33279f6d9f0c47c44b"> 1565</a></span>&#160;    <span class="keyword">const</span> VkDeviceSize* <a class="code" href="struct_vma_allocator_create_info.html#a31c192aa6cbffa33279f6d9f0c47c44b">pHeapSizeLimit</a>;</div><div class="line"><a name="l01577"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#a3dc197be3227da7338b1643f70db36bd"> 1577</a></span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_vulkan_functions.html">VmaVulkanFunctions</a>* <a class="code" href="struct_vma_allocator_create_info.html#a3dc197be3227da7338b1643f70db36bd">pVulkanFunctions</a>;</div><div class="line"><a name="l01584"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#ace2aa4877b16a42b0b7673d4e26000ee"> 1584</a></span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_record_settings.html">VmaRecordSettings</a>* <a class="code" href="struct_vma_allocator_create_info.html#ace2aa4877b16a42b0b7673d4e26000ee">pRecordSettings</a>;</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#ae0f6d1d733dded220d28134da46b4283">VmaAllocatorCreateInfo</a>;</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160;</div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160;VkResult <a class="code" href="vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb">vmaCreateAllocator</a>(</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a>* pCreateInfo,</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a>* pAllocator);</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160;</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160;<span class="keywordtype">void</span> <a class="code" href="vk__mem__alloc_8h.html#aa8d164061c88f22fb1fd3c8f3534bc1d">vmaDestroyAllocator</a>(</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator);</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160;</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160;<span class="keywordtype">void</span> <a class="code" href="vk__mem__alloc_8h.html#aecabf7b6e91ea87d0316fa0a9e014fe0">vmaGetPhysicalDeviceProperties</a>(</div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160;    <span class="keyword">const</span> VkPhysicalDeviceProperties** ppPhysicalDeviceProperties);</div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160;</div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160;<span class="keywordtype">void</span> <a class="code" href="vk__mem__alloc_8h.html#ab88db292a17974f911182543fda52d19">vmaGetMemoryProperties</a>(</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160;    <span class="keyword">const</span> VkPhysicalDeviceMemoryProperties** ppPhysicalDeviceMemoryProperties);</div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160;</div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160;<span class="keywordtype">void</span> <a class="code" href="vk__mem__alloc_8h.html#a8701444752eb5de4464adb5a2b514bca">vmaGetMemoryTypeProperties</a>(</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160;    uint32_t memoryTypeIndex,</div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160;    VkMemoryPropertyFlags* pFlags);</div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160;</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160;<span class="keywordtype">void</span> <a class="code" href="vk__mem__alloc_8h.html#ade56bf8dc9f5a5eaddf5f119ed525236">vmaSetCurrentFrameIndex</a>(</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160;    uint32_t frameIndex);</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160;</div><div class="line"><a name="l01637"></a><span class="lineno"><a class="line" href="struct_vma_stat_info.html"> 1637</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a></div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160;{</div><div class="line"><a name="l01640"></a><span class="lineno"><a class="line" href="struct_vma_stat_info.html#abc4bb7cd611900778464c56e50c970a4"> 1640</a></span>&#160;    uint32_t <a class="code" href="struct_vma_stat_info.html#abc4bb7cd611900778464c56e50c970a4">blockCount</a>;</div><div class="line"><a name="l01642"></a><span class="lineno"><a class="line" href="struct_vma_stat_info.html#a537741e4d5cdddc1c0ab95ec650afaff"> 1642</a></span>&#160;    uint32_t <a class="code" href="struct_vma_stat_info.html#a537741e4d5cdddc1c0ab95ec650afaff">allocationCount</a>;</div><div class="line"><a name="l01644"></a><span class="lineno"><a class="line" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9"> 1644</a></span>&#160;    uint32_t <a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a>;</div><div class="line"><a name="l01646"></a><span class="lineno"><a class="line" href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a"> 1646</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">usedBytes</a>;</div><div class="line"><a name="l01648"></a><span class="lineno"><a class="line" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669"> 1648</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a>;</div><div class="line"><a name="l01649"></a><span class="lineno"><a class="line" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea"> 1649</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a>, allocationSizeAvg, allocationSizeMax;</div><div class="line"><a name="l01650"></a><span class="lineno"><a class="line" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4"> 1650</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a>, unusedRangeSizeAvg, unusedRangeSizeMax;</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a810b009a788ee8aac72a25b42ffbe31c">VmaStatInfo</a>;</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160;</div><div class="line"><a name="l01654"></a><span class="lineno"><a class="line" href="struct_vma_stats.html"> 1654</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_stats.html">VmaStats</a></div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160;{</div><div class="line"><a name="l01656"></a><span class="lineno"><a class="line" href="struct_vma_stats.html#a13e3caf754be79352c42408756309331"> 1656</a></span>&#160;    <a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a> memoryType[VK_MAX_MEMORY_TYPES];</div><div class="line"><a name="l01657"></a><span class="lineno"><a class="line" href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0"> 1657</a></span>&#160;    <a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a> memoryHeap[VK_MAX_MEMORY_HEAPS];</div><div class="line"><a name="l01658"></a><span class="lineno"><a class="line" href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9"> 1658</a></span>&#160;    <a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a> <a class="code" href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9">total</a>;</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a732be855fb4a7c248e6853d928a729af">VmaStats</a>;</div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160;</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160;<span class="keywordtype">void</span> <a class="code" href="vk__mem__alloc_8h.html#a333b61c1788cb23559177531e6a93ca3">vmaCalculateStats</a>(</div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160;    <a class="code" href="struct_vma_stats.html">VmaStats</a>* pStats);</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160;</div><div class="line"><a name="l01666"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ae25f0d55fd91cb166f002b63244800e1"> 1666</a></span>&#160;<span class="preprocessor">#define VMA_STATS_STRING_ENABLED 1</span></div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160;</div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160;</div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160;</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160;<span class="keywordtype">void</span> <a class="code" href="vk__mem__alloc_8h.html#aa4fee7eb5253377599ef4fd38c93c2a0">vmaBuildStatsString</a>(</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160;    <span class="keywordtype">char</span>** ppStatsString,</div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160;    VkBool32 detailedMap);</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160;</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160;<span class="keywordtype">void</span> <a class="code" href="vk__mem__alloc_8h.html#a3104eb30d8122c84dd8541063f145288">vmaFreeStatsString</a>(</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160;    <span class="keywordtype">char</span>* pStatsString);</div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160;</div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160;<span class="preprocessor">#endif // #if VMA_STATS_STRING_ENABLED</span></div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160;</div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160;VK_DEFINE_HANDLE(<a class="code" href="struct_vma_pool.html">VmaPool</a>)</div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160;</div><div class="line"><a name="l01694"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc"> 1694</a></span>&#160;typedef enum <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a></div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160;{</div><div class="line"><a name="l01699"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd"> 1699</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd">VMA_MEMORY_USAGE_UNKNOWN</a> = 0,</div><div class="line"><a name="l01716"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"> 1716</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a> = 1,</div><div class="line"><a name="l01726"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5"> 1726</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">VMA_MEMORY_USAGE_CPU_ONLY</a> = 2,</div><div class="line"><a name="l01733"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67"> 1733</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67">VMA_MEMORY_USAGE_CPU_TO_GPU</a> = 3,</div><div class="line"><a name="l01742"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27"> 1742</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27">VMA_MEMORY_USAGE_GPU_TO_CPU</a> = 4,</div><div class="line"><a name="l01743"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e"> 1743</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e">VMA_MEMORY_USAGE_MAX_ENUM</a> = 0x7FFFFFFF</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a>;</div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160;</div><div class="line"><a name="l01747"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597"> 1747</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597">VmaAllocationCreateFlagBits</a> {</div><div class="line"><a name="l01759"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f"> 1759</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a> = 0x00000001,</div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160;</div><div class="line"><a name="l01770"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff"> 1770</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff">VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</a> = 0x00000002,</div><div class="line"><a name="l01783"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f"> 1783</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a> = 0x00000004,</div><div class="line"><a name="l01796"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a5f436af6c8fe8540573a6d22627a6fd2"> 1796</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a5f436af6c8fe8540573a6d22627a6fd2">VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT</a> = 0x00000008,</div><div class="line"><a name="l01803"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a68686d0ce9beb0d4d1b9f2b8b1389a7e"> 1803</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a68686d0ce9beb0d4d1b9f2b8b1389a7e">VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT</a> = 0x00000010,</div><div class="line"><a name="l01809"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520"> 1809</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a> = 0x00000020,</div><div class="line"><a name="l01814"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df"> 1814</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df">VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT</a> = 0x00000040,</div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160;</div><div class="line"><a name="l01816"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882"> 1816</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882">VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF</div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597">VmaAllocationCreateFlagBits</a>;</div><div class="line"><a name="l01818"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817"> 1818</a></span>&#160;<span class="keyword">typedef</span> VkFlags <a class="code" href="vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817">VmaAllocationCreateFlags</a>;</div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160;</div><div class="line"><a name="l01820"></a><span class="lineno"><a class="line" href="struct_vma_allocation_create_info.html"> 1820</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160;{</div><div class="line"><a name="l01823"></a><span class="lineno"><a class="line" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b"> 1823</a></span>&#160;    VmaAllocationCreateFlags <a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>;</div><div class="line"><a name="l01829"></a><span class="lineno"><a class="line" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910"> 1829</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a> <a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>;</div><div class="line"><a name="l01834"></a><span class="lineno"><a class="line" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90"> 1834</a></span>&#160;    VkMemoryPropertyFlags <a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>;</div><div class="line"><a name="l01839"></a><span class="lineno"><a class="line" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d"> 1839</a></span>&#160;    VkMemoryPropertyFlags <a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>;</div><div class="line"><a name="l01847"></a><span class="lineno"><a class="line" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055"> 1847</a></span>&#160;    uint32_t <a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>;</div><div class="line"><a name="l01853"></a><span class="lineno"><a class="line" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150"> 1853</a></span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> <a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>;</div><div class="line"><a name="l01860"></a><span class="lineno"><a class="line" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19"> 1860</a></span>&#160;    <span class="keywordtype">void</span>* <a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>;</div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a86c44f9950b40d50088ed93a17870a7a">VmaAllocationCreateInfo</a>;</div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160;</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160;VkResult <a class="code" href="vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a">vmaFindMemoryTypeIndex</a>(</div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160;    uint32_t memoryTypeBits,</div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pAllocationCreateInfo,</div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160;    uint32_t* pMemoryTypeIndex);</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160;</div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160;VkResult <a class="code" href="vk__mem__alloc_8h.html#ae790ab9ffaf7667fb8f62523e6897888">vmaFindMemoryTypeIndexForBufferInfo</a>(</div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160;    <span class="keyword">const</span> VkBufferCreateInfo* pBufferCreateInfo,</div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pAllocationCreateInfo,</div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160;    uint32_t* pMemoryTypeIndex);</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160;</div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160;VkResult <a class="code" href="vk__mem__alloc_8h.html#a088da83d8eaf3ce9056d9ea0b981d472">vmaFindMemoryTypeIndexForImageInfo</a>(</div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160;    <span class="keyword">const</span> VkImageCreateInfo* pImageCreateInfo,</div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pAllocationCreateInfo,</div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160;    uint32_t* pMemoryTypeIndex);</div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160;</div><div class="line"><a name="l01922"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7"> 1922</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7">VmaPoolCreateFlagBits</a> {</div><div class="line"><a name="l01940"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2"> 1940</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2">VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT</a> = 0x00000002,</div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160;</div><div class="line"><a name="l01955"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726"> 1955</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a> = 0x00000004,</div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160;</div><div class="line"><a name="l01957"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec"> 1957</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec">VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF</div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7">VmaPoolCreateFlagBits</a>;</div><div class="line"><a name="l01959"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a2770e325ea42e087c1b91fdf46d0292a"> 1959</a></span>&#160;<span class="keyword">typedef</span> VkFlags <a class="code" href="vk__mem__alloc_8h.html#a2770e325ea42e087c1b91fdf46d0292a">VmaPoolCreateFlags</a>;</div><div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>&#160;</div><div class="line"><a name="l01963"></a><span class="lineno"><a class="line" href="struct_vma_pool_create_info.html"> 1963</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a> {</div><div class="line"><a name="l01966"></a><span class="lineno"><a class="line" href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319"> 1966</a></span>&#160;    uint32_t <a class="code" href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319">memoryTypeIndex</a>;</div><div class="line"><a name="l01969"></a><span class="lineno"><a class="line" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446"> 1969</a></span>&#160;    VmaPoolCreateFlags <a class="code" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446">flags</a>;</div><div class="line"><a name="l01978"></a><span class="lineno"><a class="line" href="struct_vma_pool_create_info.html#aa4265160536cdb9be821b7686c16c676"> 1978</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_pool_create_info.html#aa4265160536cdb9be821b7686c16c676">blockSize</a>;</div><div class="line"><a name="l01983"></a><span class="lineno"><a class="line" href="struct_vma_pool_create_info.html#ad8006fb803185c0a699d30f3e9a865ae"> 1983</a></span>&#160;    <span class="keywordtype">size_t</span> <a class="code" href="struct_vma_pool_create_info.html#ad8006fb803185c0a699d30f3e9a865ae">minBlockCount</a>;</div><div class="line"><a name="l01991"></a><span class="lineno"><a class="line" href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c"> 1991</a></span>&#160;    <span class="keywordtype">size_t</span> <a class="code" href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c">maxBlockCount</a>;</div><div class="line"><a name="l02005"></a><span class="lineno"><a class="line" href="struct_vma_pool_create_info.html#a9437e43ffbb644dbbf7fc4e50cfad6aa"> 2005</a></span>&#160;    uint32_t <a class="code" href="struct_vma_pool_create_info.html#a9437e43ffbb644dbbf7fc4e50cfad6aa">frameInUseCount</a>;</div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a211706e9348dcee25a843ed4ea69bce7">VmaPoolCreateInfo</a>;</div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160;</div><div class="line"><a name="l02010"></a><span class="lineno"><a class="line" href="struct_vma_pool_stats.html"> 2010</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_pool_stats.html">VmaPoolStats</a> {</div><div class="line"><a name="l02013"></a><span class="lineno"><a class="line" href="struct_vma_pool_stats.html#a326807b2de2b0931cee4ed9a5f2e420c"> 2013</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_pool_stats.html#a326807b2de2b0931cee4ed9a5f2e420c">size</a>;</div><div class="line"><a name="l02016"></a><span class="lineno"><a class="line" href="struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8"> 2016</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8">unusedSize</a>;</div><div class="line"><a name="l02019"></a><span class="lineno"><a class="line" href="struct_vma_pool_stats.html#ad1924eb54fffa45e9e0e65670c8fe5eb"> 2019</a></span>&#160;    <span class="keywordtype">size_t</span> <a class="code" href="struct_vma_pool_stats.html#ad1924eb54fffa45e9e0e65670c8fe5eb">allocationCount</a>;</div><div class="line"><a name="l02022"></a><span class="lineno"><a class="line" href="struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4"> 2022</a></span>&#160;    <span class="keywordtype">size_t</span> <a class="code" href="struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4">unusedRangeCount</a>;</div><div class="line"><a name="l02029"></a><span class="lineno"><a class="line" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b"> 2029</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a>;</div><div class="line"><a name="l02032"></a><span class="lineno"><a class="line" href="struct_vma_pool_stats.html#aa0b5cb45cef6f18571cefb03b9a230e7"> 2032</a></span>&#160;    <span class="keywordtype">size_t</span> <a class="code" href="struct_vma_pool_stats.html#aa0b5cb45cef6f18571cefb03b9a230e7">blockCount</a>;</div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a2e5612d871d64c5624087b837a338c34">VmaPoolStats</a>;</div><div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160;</div><div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160;VkResult <a class="code" href="vk__mem__alloc_8h.html#a5c8770ded7c59c8caac6de0c2cb00b50">vmaCreatePool</a>(</div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a>* pCreateInfo,</div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a>* pPool);</div><div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160;</div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160;<span class="keywordtype">void</span> <a class="code" href="vk__mem__alloc_8h.html#a5485779c8f1948238fc4e92232fa65e1">vmaDestroyPool</a>(</div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool);</div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160;</div><div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160;<span class="keywordtype">void</span> <a class="code" href="vk__mem__alloc_8h.html#ae8bf76997b234ef68aad922616df4153">vmaGetPoolStats</a>(</div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool,</div><div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160;    <a class="code" href="struct_vma_pool_stats.html">VmaPoolStats</a>* pPoolStats);</div><div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160;</div><div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160;<span class="keywordtype">void</span> <a class="code" href="vk__mem__alloc_8h.html#a736bd6cbda886f36c891727e73bd4024">vmaMakePoolAllocationsLost</a>(</div><div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool,</div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160;    <span class="keywordtype">size_t</span>* pLostAllocationCount);</div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160;</div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160;VkResult <a class="code" href="vk__mem__alloc_8h.html#ad535935619c7a549bf837e1bb0068f89">vmaCheckPoolCorruption</a>(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="code" href="struct_vma_pool.html">VmaPool</a> pool);</div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160;</div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160;VK_DEFINE_HANDLE(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a>)</div><div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160;</div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160;</div><div class="line"><a name="l02118"></a><span class="lineno"><a class="line" href="struct_vma_allocation_info.html"> 2118</a></span>&#160;typedef struct <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> {</div><div class="line"><a name="l02123"></a><span class="lineno"><a class="line" href="struct_vma_allocation_info.html#a7f6b0aa58c135e488e6b40a388dad9d5"> 2123</a></span>&#160;    uint32_t <a class="code" href="struct_vma_allocation_info.html#a7f6b0aa58c135e488e6b40a388dad9d5">memoryType</a>;</div><div class="line"><a name="l02132"></a><span class="lineno"><a class="line" href="struct_vma_allocation_info.html#ae0bfb7dfdf79a76ffefc9a94677a2f67"> 2132</a></span>&#160;    VkDeviceMemory <a class="code" href="struct_vma_allocation_info.html#ae0bfb7dfdf79a76ffefc9a94677a2f67">deviceMemory</a>;</div><div class="line"><a name="l02137"></a><span class="lineno"><a class="line" href="struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268"> 2137</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268">offset</a>;</div><div class="line"><a name="l02142"></a><span class="lineno"><a class="line" href="struct_vma_allocation_info.html#aac76d113a6a5ccbb09fea00fb25fd18f"> 2142</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_allocation_info.html#aac76d113a6a5ccbb09fea00fb25fd18f">size</a>;</div><div class="line"><a name="l02151"></a><span class="lineno"><a class="line" href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2"> 2151</a></span>&#160;    <span class="keywordtype">void</span>* <a class="code" href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2">pMappedData</a>;</div><div class="line"><a name="l02156"></a><span class="lineno"><a class="line" href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13"> 2156</a></span>&#160;    <span class="keywordtype">void</span>* <a class="code" href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13">pUserData</a>;</div><div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a795e6ff02a21d5486c0565f403dd9255">VmaAllocationInfo</a>;</div><div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>&#160;</div><div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>&#160;VkResult <a class="code" href="vk__mem__alloc_8h.html#abf28077dbf82d0908b8acbe8ee8dd9b8">vmaAllocateMemory</a>(</div><div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements* pVkMemoryRequirements,</div><div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pCreateInfo,</div><div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation,</div><div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo);</div><div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160;</div><div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160;VkResult <a class="code" href="vk__mem__alloc_8h.html#a7fdf64415b6c3d83c454f28d2c53df7b">vmaAllocateMemoryForBuffer</a>(</div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>&#160;    VkBuffer buffer,</div><div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pCreateInfo,</div><div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation,</div><div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo);</div><div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>&#160;</div><div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>&#160;VkResult <a class="code" href="vk__mem__alloc_8h.html#a0faa3f9e5fb233d29d1e00390650febb">vmaAllocateMemoryForImage</a>(</div><div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>&#160;    VkImage image,</div><div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pCreateInfo,</div><div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation,</div><div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo);</div><div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>&#160;</div><div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>&#160;<span class="keywordtype">void</span> <a class="code" href="vk__mem__alloc_8h.html#a11f0fbc034fa81a4efedd73d61ce7568">vmaFreeMemory</a>(</div><div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation);</div><div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>&#160;</div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>&#160;<span class="keywordtype">void</span> <a class="code" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b">vmaGetAllocationInfo</a>(</div><div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div><div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo);</div><div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>&#160;</div><div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>&#160;VkBool32 <a class="code" href="vk__mem__alloc_8h.html#a43d8ba9673c846f049089a5029d5c73a">vmaTouchAllocation</a>(</div><div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation);</div><div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>&#160;</div><div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>&#160;<span class="keywordtype">void</span> <a class="code" href="vk__mem__alloc_8h.html#af9147d31ffc11d62fc187bde283ed14f">vmaSetAllocationUserData</a>(</div><div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div><div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>&#160;    <span class="keywordtype">void</span>* pUserData);</div><div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>&#160;</div><div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>&#160;<span class="keywordtype">void</span> <a class="code" href="vk__mem__alloc_8h.html#ae5c9657d9e94756269145b01c05d16f1">vmaCreateLostAllocation</a>(</div><div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation);</div><div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>&#160;</div><div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>&#160;VkResult <a class="code" href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069">vmaMapMemory</a>(</div><div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div><div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>&#160;    <span class="keywordtype">void</span>** ppData);</div><div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>&#160;</div><div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>&#160;<span class="keywordtype">void</span> <a class="code" href="vk__mem__alloc_8h.html#a9bc268595cb33f6ec4d519cfce81ff45">vmaUnmapMemory</a>(</div><div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation);</div><div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>&#160;</div><div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>&#160;<span class="keywordtype">void</span> <a class="code" href="vk__mem__alloc_8h.html#abc34ee6f021f459aff885f3758c435de">vmaFlushAllocation</a>(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkDeviceSize offset, VkDeviceSize size);</div><div class="line"><a name="l02333"></a><span class="lineno"> 2333</span>&#160;</div><div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>&#160;<span class="keywordtype">void</span> <a class="code" href="vk__mem__alloc_8h.html#a0d0eb0c1102268fa9a476d12ecbe4006">vmaInvalidateAllocation</a>(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkDeviceSize offset, VkDeviceSize size);</div><div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>&#160;</div><div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>&#160;VkResult <a class="code" href="vk__mem__alloc_8h.html#a49329a7f030dafcf82f7b73334c22e98">vmaCheckCorruption</a>(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t memoryTypeBits);</div><div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>&#160;</div><div class="line"><a name="l02367"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info.html"> 2367</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_defragmentation_info.html">VmaDefragmentationInfo</a> {</div><div class="line"><a name="l02372"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info.html#acb311c940a777270e67e1b81c5ab6a1d"> 2372</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_defragmentation_info.html#acb311c940a777270e67e1b81c5ab6a1d">maxBytesToMove</a>;</div><div class="line"><a name="l02377"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info.html#aa7c7304e13c71f604c907196c4e28fbc"> 2377</a></span>&#160;    uint32_t <a class="code" href="struct_vma_defragmentation_info.html#aa7c7304e13c71f604c907196c4e28fbc">maxAllocationsToMove</a>;</div><div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#ae67f8573a0cf20f16f0a1eecbca566a0">VmaDefragmentationInfo</a>;</div><div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>&#160;</div><div class="line"><a name="l02381"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_stats.html"> 2381</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a> {</div><div class="line"><a name="l02383"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_stats.html#a36f9d5df2a10ba2a36b16e126d60572d"> 2383</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_defragmentation_stats.html#a36f9d5df2a10ba2a36b16e126d60572d">bytesMoved</a>;</div><div class="line"><a name="l02385"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_stats.html#ab0cb9ac0dbc106c77e384ea676422f28"> 2385</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_defragmentation_stats.html#ab0cb9ac0dbc106c77e384ea676422f28">bytesFreed</a>;</div><div class="line"><a name="l02387"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_stats.html#aefeabf130022008eadd75999478af3f9"> 2387</a></span>&#160;    uint32_t <a class="code" href="struct_vma_defragmentation_stats.html#aefeabf130022008eadd75999478af3f9">allocationsMoved</a>;</div><div class="line"><a name="l02389"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_stats.html#a0113f1877904a5d1ee8f409216ff276b"> 2389</a></span>&#160;    uint32_t <a class="code" href="struct_vma_defragmentation_stats.html#a0113f1877904a5d1ee8f409216ff276b">deviceMemoryBlocksFreed</a>;</div><div class="line"><a name="l02390"></a><span class="lineno"> 2390</span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#ab0f9b06441c840fee560de4a2967f8c9">VmaDefragmentationStats</a>;</div><div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>&#160;</div><div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>&#160;VkResult <a class="code" href="vk__mem__alloc_8h.html#a6aced90fcc7b39882b6654a740a0b9bb">vmaDefragment</a>(</div><div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations,</div><div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div><div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>&#160;    VkBool32* pAllocationsChanged,</div><div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_defragmentation_info.html">VmaDefragmentationInfo</a> *pDefragmentationInfo,</div><div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pDefragmentationStats);</div><div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>&#160;</div><div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>&#160;VkResult <a class="code" href="vk__mem__alloc_8h.html#a6b0929b914b60cf2d45cac4bf3547470">vmaBindBufferMemory</a>(</div><div class="line"><a name="l02499"></a><span class="lineno"> 2499</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l02500"></a><span class="lineno"> 2500</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div><div class="line"><a name="l02501"></a><span class="lineno"> 2501</span>&#160;    VkBuffer buffer);</div><div class="line"><a name="l02502"></a><span class="lineno"> 2502</span>&#160;</div><div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>&#160;VkResult <a class="code" href="vk__mem__alloc_8h.html#a3d3ca45799923aa5d138e9e5f9eb2da5">vmaBindImageMemory</a>(</div><div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div><div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>&#160;    VkImage image);</div><div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>&#160;</div><div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>&#160;VkResult <a class="code" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(</div><div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>&#160;    <span class="keyword">const</span> VkBufferCreateInfo* pBufferCreateInfo,</div><div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pAllocationCreateInfo,</div><div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>&#160;    VkBuffer* pBuffer,</div><div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation,</div><div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo);</div><div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>&#160;</div><div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>&#160;<span class="keywordtype">void</span> <a class="code" href="vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77">vmaDestroyBuffer</a>(</div><div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>&#160;    VkBuffer buffer,</div><div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation);</div><div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>&#160;</div><div class="line"><a name="l02571"></a><span class="lineno"> 2571</span>&#160;VkResult <a class="code" href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73">vmaCreateImage</a>(</div><div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>&#160;    <span class="keyword">const</span> VkImageCreateInfo* pImageCreateInfo,</div><div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pAllocationCreateInfo,</div><div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>&#160;    VkImage* pImage,</div><div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation,</div><div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo);</div><div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>&#160;</div><div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>&#160;<span class="keywordtype">void</span> <a class="code" href="vk__mem__alloc_8h.html#ae50d2cb3b4a3bfd4dd40987234e50e7e">vmaDestroyImage</a>(</div><div class="line"><a name="l02591"></a><span class="lineno"> 2591</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div><div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>&#160;    VkImage image,</div><div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation);</div><div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>&#160;</div><div class="line"><a name="l02595"></a><span class="lineno"> 2595</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>&#160;}</div><div class="line"><a name="l02597"></a><span class="lineno"> 2597</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>&#160;</div><div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>&#160;<span class="preprocessor">#endif // AMD_VULKAN_MEMORY_ALLOCATOR_H</span></div><div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>&#160;</div><div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>&#160;<span class="comment">// For Visual Studio IntelliSense.</span></div><div class="line"><a name="l02602"></a><span class="lineno"> 2602</span>&#160;<span class="preprocessor">#if defined(__cplusplus) &amp;&amp; defined(__INTELLISENSE__)</span></div><div class="line"><a name="l02603"></a><span class="lineno"> 2603</span>&#160;<span class="preprocessor">#define VMA_IMPLEMENTATION</span></div><div class="line"><a name="l02604"></a><span class="lineno"> 2604</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02605"></a><span class="lineno"> 2605</span>&#160;</div><div class="line"><a name="l02606"></a><span class="lineno"> 2606</span>&#160;<span class="preprocessor">#ifdef VMA_IMPLEMENTATION</span></div><div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>&#160;<span class="preprocessor">#undef VMA_IMPLEMENTATION</span></div><div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>&#160;</div><div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div><div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>&#160;<span class="preprocessor">#include &lt;cstdlib&gt;</span></div><div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>&#160;<span class="preprocessor">#include &lt;cstring&gt;</span></div><div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>&#160;</div><div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>&#160;<span class="comment">/*******************************************************************************</span></div><div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>&#160;<span class="comment">CONFIGURATION SECTION</span></div><div class="line"><a name="l02615"></a><span class="lineno"> 2615</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>&#160;<span class="comment">Define some of these macros before each #include of this header or change them</span></div><div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>&#160;<span class="comment">here if you need other then default behavior depending on your environment.</span></div><div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l02619"></a><span class="lineno"> 2619</span>&#160;</div><div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>&#160;<span class="comment">Define this macro to 1 to make the library fetch pointers to Vulkan functions</span></div><div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>&#160;<span class="comment">internally, like:</span></div><div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02624"></a><span class="lineno"> 2624</span>&#160;<span class="comment">    vulkanFunctions.vkAllocateMemory = &amp;vkAllocateMemory;</span></div><div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02626"></a><span class="lineno"> 2626</span>&#160;<span class="comment">Define to 0 if you are going to provide you own pointers to Vulkan functions via</span></div><div class="line"><a name="l02627"></a><span class="lineno"> 2627</span>&#160;<span class="comment">VmaAllocatorCreateInfo::pVulkanFunctions.</span></div><div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>&#160;<span class="preprocessor">#if !defined(VMA_STATIC_VULKAN_FUNCTIONS) &amp;&amp; !defined(VK_NO_PROTOTYPES)</span></div><div class="line"><a name="l02630"></a><span class="lineno"> 2630</span>&#160;<span class="preprocessor">#define VMA_STATIC_VULKAN_FUNCTIONS 1</span></div><div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02632"></a><span class="lineno"> 2632</span>&#160;</div><div class="line"><a name="l02633"></a><span class="lineno"> 2633</span>&#160;<span class="comment">// Define this macro to 1 to make the library use STL containers instead of its own implementation.</span></div><div class="line"><a name="l02634"></a><span class="lineno"> 2634</span>&#160;<span class="comment">//#define VMA_USE_STL_CONTAINERS 1</span></div><div class="line"><a name="l02635"></a><span class="lineno"> 2635</span>&#160;</div><div class="line"><a name="l02636"></a><span class="lineno"> 2636</span>&#160;<span class="comment">/* Set this macro to 1 to make the library including and using STL containers:</span></div><div class="line"><a name="l02637"></a><span class="lineno"> 2637</span>&#160;<span class="comment">std::pair, std::vector, std::list, std::unordered_map.</span></div><div class="line"><a name="l02638"></a><span class="lineno"> 2638</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>&#160;<span class="comment">Set it to 0 or undefined to make the library using its own implementation of</span></div><div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>&#160;<span class="comment">the containers.</span></div><div class="line"><a name="l02641"></a><span class="lineno"> 2641</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>&#160;<span class="preprocessor">#if VMA_USE_STL_CONTAINERS</span></div><div class="line"><a name="l02643"></a><span class="lineno"> 2643</span>&#160;<span class="preprocessor">   #define VMA_USE_STL_VECTOR 1</span></div><div class="line"><a name="l02644"></a><span class="lineno"> 2644</span>&#160;<span class="preprocessor">   #define VMA_USE_STL_UNORDERED_MAP 1</span></div><div class="line"><a name="l02645"></a><span class="lineno"> 2645</span>&#160;<span class="preprocessor">   #define VMA_USE_STL_LIST 1</span></div><div class="line"><a name="l02646"></a><span class="lineno"> 2646</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02647"></a><span class="lineno"> 2647</span>&#160;</div><div class="line"><a name="l02648"></a><span class="lineno"> 2648</span>&#160;<span class="preprocessor">#if VMA_USE_STL_VECTOR</span></div><div class="line"><a name="l02649"></a><span class="lineno"> 2649</span>&#160;<span class="preprocessor">   #include &lt;vector&gt;</span></div><div class="line"><a name="l02650"></a><span class="lineno"> 2650</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02651"></a><span class="lineno"> 2651</span>&#160;</div><div class="line"><a name="l02652"></a><span class="lineno"> 2652</span>&#160;<span class="preprocessor">#if VMA_USE_STL_UNORDERED_MAP</span></div><div class="line"><a name="l02653"></a><span class="lineno"> 2653</span>&#160;<span class="preprocessor">   #include &lt;unordered_map&gt;</span></div><div class="line"><a name="l02654"></a><span class="lineno"> 2654</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02655"></a><span class="lineno"> 2655</span>&#160;</div><div class="line"><a name="l02656"></a><span class="lineno"> 2656</span>&#160;<span class="preprocessor">#if VMA_USE_STL_LIST</span></div><div class="line"><a name="l02657"></a><span class="lineno"> 2657</span>&#160;<span class="preprocessor">   #include &lt;list&gt;</span></div><div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02659"></a><span class="lineno"> 2659</span>&#160;</div><div class="line"><a name="l02660"></a><span class="lineno"> 2660</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l02661"></a><span class="lineno"> 2661</span>&#160;<span class="comment">Following headers are used in this CONFIGURATION section only, so feel free to</span></div><div class="line"><a name="l02662"></a><span class="lineno"> 2662</span>&#160;<span class="comment">remove them if not needed.</span></div><div class="line"><a name="l02663"></a><span class="lineno"> 2663</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l02664"></a><span class="lineno"> 2664</span>&#160;<span class="preprocessor">#include &lt;cassert&gt;</span> <span class="comment">// for assert</span></div><div class="line"><a name="l02665"></a><span class="lineno"> 2665</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span> <span class="comment">// for min, max</span></div><div class="line"><a name="l02666"></a><span class="lineno"> 2666</span>&#160;<span class="preprocessor">#include &lt;mutex&gt;</span> <span class="comment">// for std::mutex</span></div><div class="line"><a name="l02667"></a><span class="lineno"> 2667</span>&#160;<span class="preprocessor">#include &lt;atomic&gt;</span> <span class="comment">// for std::atomic</span></div><div class="line"><a name="l02668"></a><span class="lineno"> 2668</span>&#160;</div><div class="line"><a name="l02669"></a><span class="lineno"> 2669</span>&#160;<span class="preprocessor">#ifndef VMA_NULL</span></div><div class="line"><a name="l02670"></a><span class="lineno"> 2670</span>&#160;   <span class="comment">// Value used as null pointer. Define it to e.g.: nullptr, NULL, 0, (void*)0.</span></div><div class="line"><a name="l02671"></a><span class="lineno"> 2671</span>&#160;<span class="preprocessor">   #define VMA_NULL   nullptr</span></div><div class="line"><a name="l02672"></a><span class="lineno"> 2672</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02673"></a><span class="lineno"> 2673</span>&#160;</div><div class="line"><a name="l02674"></a><span class="lineno"> 2674</span>&#160;<span class="preprocessor">#if defined(__APPLE__) || defined(__ANDROID__)</span></div><div class="line"><a name="l02675"></a><span class="lineno"> 2675</span>&#160;<span class="preprocessor">#include &lt;cstdlib&gt;</span></div><div class="line"><a name="l02676"></a><span class="lineno"> 2676</span>&#160;<span class="keywordtype">void</span> *aligned_alloc(<span class="keywordtype">size_t</span> alignment, <span class="keywordtype">size_t</span> size)</div><div class="line"><a name="l02677"></a><span class="lineno"> 2677</span>&#160;{</div><div class="line"><a name="l02678"></a><span class="lineno"> 2678</span>&#160;    <span class="comment">// alignment must be &gt;= sizeof(void*)</span></div><div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>&#160;    <span class="keywordflow">if</span>(alignment &lt; <span class="keyword">sizeof</span>(<span class="keywordtype">void</span>*))</div><div class="line"><a name="l02680"></a><span class="lineno"> 2680</span>&#160;    {</div><div class="line"><a name="l02681"></a><span class="lineno"> 2681</span>&#160;        alignment = <span class="keyword">sizeof</span>(<span class="keywordtype">void</span>*);</div><div class="line"><a name="l02682"></a><span class="lineno"> 2682</span>&#160;    }</div><div class="line"><a name="l02683"></a><span class="lineno"> 2683</span>&#160;</div><div class="line"><a name="l02684"></a><span class="lineno"> 2684</span>&#160;    <span class="keywordtype">void</span> *pointer;</div><div class="line"><a name="l02685"></a><span class="lineno"> 2685</span>&#160;    <span class="keywordflow">if</span>(posix_memalign(&amp;pointer, alignment, size) == 0)</div><div class="line"><a name="l02686"></a><span class="lineno"> 2686</span>&#160;        <span class="keywordflow">return</span> pointer;</div><div class="line"><a name="l02687"></a><span class="lineno"> 2687</span>&#160;    <span class="keywordflow">return</span> VMA_NULL;</div><div class="line"><a name="l02688"></a><span class="lineno"> 2688</span>&#160;}</div><div class="line"><a name="l02689"></a><span class="lineno"> 2689</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02690"></a><span class="lineno"> 2690</span>&#160;</div><div class="line"><a name="l02691"></a><span class="lineno"> 2691</span>&#160;<span class="comment">// If your compiler is not compatible with C++11 and definition of</span></div><div class="line"><a name="l02692"></a><span class="lineno"> 2692</span>&#160;<span class="comment">// aligned_alloc() function is missing, uncommeting following line may help:</span></div><div class="line"><a name="l02693"></a><span class="lineno"> 2693</span>&#160;</div><div class="line"><a name="l02694"></a><span class="lineno"> 2694</span>&#160;<span class="comment">//#include &lt;malloc.h&gt;</span></div><div class="line"><a name="l02695"></a><span class="lineno"> 2695</span>&#160;</div><div class="line"><a name="l02696"></a><span class="lineno"> 2696</span>&#160;<span class="comment">// Normal assert to check for programmer&#39;s errors, especially in Debug configuration.</span></div><div class="line"><a name="l02697"></a><span class="lineno"> 2697</span>&#160;<span class="preprocessor">#ifndef VMA_ASSERT</span></div><div class="line"><a name="l02698"></a><span class="lineno"> 2698</span>&#160;<span class="preprocessor">   #ifdef _DEBUG</span></div><div class="line"><a name="l02699"></a><span class="lineno"> 2699</span>&#160;<span class="preprocessor">       #define VMA_ASSERT(expr)         assert(expr)</span></div><div class="line"><a name="l02700"></a><span class="lineno"> 2700</span>&#160;<span class="preprocessor">   #else</span></div><div class="line"><a name="l02701"></a><span class="lineno"> 2701</span>&#160;<span class="preprocessor">       #define VMA_ASSERT(expr)</span></div><div class="line"><a name="l02702"></a><span class="lineno"> 2702</span>&#160;<span class="preprocessor">   #endif</span></div><div class="line"><a name="l02703"></a><span class="lineno"> 2703</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02704"></a><span class="lineno"> 2704</span>&#160;</div><div class="line"><a name="l02705"></a><span class="lineno"> 2705</span>&#160;<span class="comment">// Assert that will be called very often, like inside data structures e.g. operator[].</span></div><div class="line"><a name="l02706"></a><span class="lineno"> 2706</span>&#160;<span class="comment">// Making it non-empty can make program slow.</span></div><div class="line"><a name="l02707"></a><span class="lineno"> 2707</span>&#160;<span class="preprocessor">#ifndef VMA_HEAVY_ASSERT</span></div><div class="line"><a name="l02708"></a><span class="lineno"> 2708</span>&#160;<span class="preprocessor">   #ifdef _DEBUG</span></div><div class="line"><a name="l02709"></a><span class="lineno"> 2709</span>&#160;<span class="preprocessor">       #define VMA_HEAVY_ASSERT(expr)   //VMA_ASSERT(expr)</span></div><div class="line"><a name="l02710"></a><span class="lineno"> 2710</span>&#160;<span class="preprocessor">   #else</span></div><div class="line"><a name="l02711"></a><span class="lineno"> 2711</span>&#160;<span class="preprocessor">       #define VMA_HEAVY_ASSERT(expr)</span></div><div class="line"><a name="l02712"></a><span class="lineno"> 2712</span>&#160;<span class="preprocessor">   #endif</span></div><div class="line"><a name="l02713"></a><span class="lineno"> 2713</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02714"></a><span class="lineno"> 2714</span>&#160;</div><div class="line"><a name="l02715"></a><span class="lineno"> 2715</span>&#160;<span class="preprocessor">#ifndef VMA_ALIGN_OF</span></div><div class="line"><a name="l02716"></a><span class="lineno"> 2716</span>&#160;<span class="preprocessor">   #define VMA_ALIGN_OF(type)       (__alignof(type))</span></div><div class="line"><a name="l02717"></a><span class="lineno"> 2717</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02718"></a><span class="lineno"> 2718</span>&#160;</div><div class="line"><a name="l02719"></a><span class="lineno"> 2719</span>&#160;<span class="preprocessor">#ifndef VMA_SYSTEM_ALIGNED_MALLOC</span></div><div class="line"><a name="l02720"></a><span class="lineno"> 2720</span>&#160;<span class="preprocessor">   #if defined(_WIN32)</span></div><div class="line"><a name="l02721"></a><span class="lineno"> 2721</span>&#160;<span class="preprocessor">       #define VMA_SYSTEM_ALIGNED_MALLOC(size, alignment)   (_aligned_malloc((size), (alignment)))</span></div><div class="line"><a name="l02722"></a><span class="lineno"> 2722</span>&#160;<span class="preprocessor">   #else</span></div><div class="line"><a name="l02723"></a><span class="lineno"> 2723</span>&#160;<span class="preprocessor">       #define VMA_SYSTEM_ALIGNED_MALLOC(size, alignment)   (aligned_alloc((alignment), (size) ))</span></div><div class="line"><a name="l02724"></a><span class="lineno"> 2724</span>&#160;<span class="preprocessor">   #endif</span></div><div class="line"><a name="l02725"></a><span class="lineno"> 2725</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02726"></a><span class="lineno"> 2726</span>&#160;</div><div class="line"><a name="l02727"></a><span class="lineno"> 2727</span>&#160;<span class="preprocessor">#ifndef VMA_SYSTEM_FREE</span></div><div class="line"><a name="l02728"></a><span class="lineno"> 2728</span>&#160;<span class="preprocessor">   #if defined(_WIN32)</span></div><div class="line"><a name="l02729"></a><span class="lineno"> 2729</span>&#160;<span class="preprocessor">       #define VMA_SYSTEM_FREE(ptr)   _aligned_free(ptr)</span></div><div class="line"><a name="l02730"></a><span class="lineno"> 2730</span>&#160;<span class="preprocessor">   #else</span></div><div class="line"><a name="l02731"></a><span class="lineno"> 2731</span>&#160;<span class="preprocessor">       #define VMA_SYSTEM_FREE(ptr)   free(ptr)</span></div><div class="line"><a name="l02732"></a><span class="lineno"> 2732</span>&#160;<span class="preprocessor">   #endif</span></div><div class="line"><a name="l02733"></a><span class="lineno"> 2733</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02734"></a><span class="lineno"> 2734</span>&#160;</div><div class="line"><a name="l02735"></a><span class="lineno"> 2735</span>&#160;<span class="preprocessor">#ifndef VMA_MIN</span></div><div class="line"><a name="l02736"></a><span class="lineno"> 2736</span>&#160;<span class="preprocessor">   #define VMA_MIN(v1, v2)    (std::min((v1), (v2)))</span></div><div class="line"><a name="l02737"></a><span class="lineno"> 2737</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02738"></a><span class="lineno"> 2738</span>&#160;</div><div class="line"><a name="l02739"></a><span class="lineno"> 2739</span>&#160;<span class="preprocessor">#ifndef VMA_MAX</span></div><div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>&#160;<span class="preprocessor">   #define VMA_MAX(v1, v2)    (std::max((v1), (v2)))</span></div><div class="line"><a name="l02741"></a><span class="lineno"> 2741</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02742"></a><span class="lineno"> 2742</span>&#160;</div><div class="line"><a name="l02743"></a><span class="lineno"> 2743</span>&#160;<span class="preprocessor">#ifndef VMA_SWAP</span></div><div class="line"><a name="l02744"></a><span class="lineno"> 2744</span>&#160;<span class="preprocessor">   #define VMA_SWAP(v1, v2)   std::swap((v1), (v2))</span></div><div class="line"><a name="l02745"></a><span class="lineno"> 2745</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02746"></a><span class="lineno"> 2746</span>&#160;</div><div class="line"><a name="l02747"></a><span class="lineno"> 2747</span>&#160;<span class="preprocessor">#ifndef VMA_SORT</span></div><div class="line"><a name="l02748"></a><span class="lineno"> 2748</span>&#160;<span class="preprocessor">   #define VMA_SORT(beg, end, cmp)  std::sort(beg, end, cmp)</span></div><div class="line"><a name="l02749"></a><span class="lineno"> 2749</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02750"></a><span class="lineno"> 2750</span>&#160;</div><div class="line"><a name="l02751"></a><span class="lineno"> 2751</span>&#160;<span class="preprocessor">#ifndef VMA_DEBUG_LOG</span></div><div class="line"><a name="l02752"></a><span class="lineno"> 2752</span>&#160;<span class="preprocessor">   #define VMA_DEBUG_LOG(format, ...)</span></div><div class="line"><a name="l02753"></a><span class="lineno"> 2753</span>&#160;   <span class="comment">/*</span></div><div class="line"><a name="l02754"></a><span class="lineno"> 2754</span>&#160;<span class="comment">   #define VMA_DEBUG_LOG(format, ...) do { \</span></div><div class="line"><a name="l02755"></a><span class="lineno"> 2755</span>&#160;<span class="comment">       printf(format, __VA_ARGS__); \</span></div><div class="line"><a name="l02756"></a><span class="lineno"> 2756</span>&#160;<span class="comment">       printf(&quot;\n&quot;); \</span></div><div class="line"><a name="l02757"></a><span class="lineno"> 2757</span>&#160;<span class="comment">   } while(false)</span></div><div class="line"><a name="l02758"></a><span class="lineno"> 2758</span>&#160;<span class="comment">   */</span></div><div class="line"><a name="l02759"></a><span class="lineno"> 2759</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02760"></a><span class="lineno"> 2760</span>&#160;</div><div class="line"><a name="l02761"></a><span class="lineno"> 2761</span>&#160;<span class="comment">// Define this macro to 1 to enable functions: vmaBuildStatsString, vmaFreeStatsString.</span></div><div class="line"><a name="l02762"></a><span class="lineno"> 2762</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></div><div class="line"><a name="l02763"></a><span class="lineno"> 2763</span>&#160;    <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> VmaUint32ToStr(<span class="keywordtype">char</span>* outStr, <span class="keywordtype">size_t</span> strLen, uint32_t num)</div><div class="line"><a name="l02764"></a><span class="lineno"> 2764</span>&#160;    {</div><div class="line"><a name="l02765"></a><span class="lineno"> 2765</span>&#160;        snprintf(outStr, strLen, <span class="stringliteral">&quot;%u&quot;</span>, static_cast&lt;unsigned int&gt;(num));</div><div class="line"><a name="l02766"></a><span class="lineno"> 2766</span>&#160;    }</div><div class="line"><a name="l02767"></a><span class="lineno"> 2767</span>&#160;    <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> VmaUint64ToStr(<span class="keywordtype">char</span>* outStr, <span class="keywordtype">size_t</span> strLen, uint64_t num)</div><div class="line"><a name="l02768"></a><span class="lineno"> 2768</span>&#160;    {</div><div class="line"><a name="l02769"></a><span class="lineno"> 2769</span>&#160;        snprintf(outStr, strLen, <span class="stringliteral">&quot;%llu&quot;</span>, static_cast&lt;unsigned long long&gt;(num));</div><div class="line"><a name="l02770"></a><span class="lineno"> 2770</span>&#160;    }</div><div class="line"><a name="l02771"></a><span class="lineno"> 2771</span>&#160;    <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> VmaPtrToStr(<span class="keywordtype">char</span>* outStr, <span class="keywordtype">size_t</span> strLen, <span class="keyword">const</span> <span class="keywordtype">void</span>* ptr)</div><div class="line"><a name="l02772"></a><span class="lineno"> 2772</span>&#160;    {</div><div class="line"><a name="l02773"></a><span class="lineno"> 2773</span>&#160;        snprintf(outStr, strLen, <span class="stringliteral">&quot;%p&quot;</span>, ptr);</div><div class="line"><a name="l02774"></a><span class="lineno"> 2774</span>&#160;    }</div><div class="line"><a name="l02775"></a><span class="lineno"> 2775</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02776"></a><span class="lineno"> 2776</span>&#160;</div><div class="line"><a name="l02777"></a><span class="lineno"> 2777</span>&#160;<span class="preprocessor">#ifndef VMA_MUTEX</span></div><div class="line"><a name="l02778"></a><span class="lineno"> 2778</span>&#160;    <span class="keyword">class </span>VmaMutex</div><div class="line"><a name="l02779"></a><span class="lineno"> 2779</span>&#160;    {</div><div class="line"><a name="l02780"></a><span class="lineno"> 2780</span>&#160;    <span class="keyword">public</span>:</div><div class="line"><a name="l02781"></a><span class="lineno"> 2781</span>&#160;        VmaMutex() { }</div><div class="line"><a name="l02782"></a><span class="lineno"> 2782</span>&#160;        ~VmaMutex() { }</div><div class="line"><a name="l02783"></a><span class="lineno"> 2783</span>&#160;        <span class="keywordtype">void</span> Lock() { m_Mutex.lock(); }</div><div class="line"><a name="l02784"></a><span class="lineno"> 2784</span>&#160;        <span class="keywordtype">void</span> Unlock() { m_Mutex.unlock(); }</div><div class="line"><a name="l02785"></a><span class="lineno"> 2785</span>&#160;    <span class="keyword">private</span>:</div><div class="line"><a name="l02786"></a><span class="lineno"> 2786</span>&#160;        std::mutex m_Mutex;</div><div class="line"><a name="l02787"></a><span class="lineno"> 2787</span>&#160;    };</div><div class="line"><a name="l02788"></a><span class="lineno"> 2788</span>&#160;<span class="preprocessor">    #define VMA_MUTEX VmaMutex</span></div><div class="line"><a name="l02789"></a><span class="lineno"> 2789</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02790"></a><span class="lineno"> 2790</span>&#160;</div><div class="line"><a name="l02791"></a><span class="lineno"> 2791</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l02792"></a><span class="lineno"> 2792</span>&#160;<span class="comment">If providing your own implementation, you need to implement a subset of std::atomic:</span></div><div class="line"><a name="l02793"></a><span class="lineno"> 2793</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02794"></a><span class="lineno"> 2794</span>&#160;<span class="comment">- Constructor(uint32_t desired)</span></div><div class="line"><a name="l02795"></a><span class="lineno"> 2795</span>&#160;<span class="comment">- uint32_t load() const</span></div><div class="line"><a name="l02796"></a><span class="lineno"> 2796</span>&#160;<span class="comment">- void store(uint32_t desired)</span></div><div class="line"><a name="l02797"></a><span class="lineno"> 2797</span>&#160;<span class="comment">- bool compare_exchange_weak(uint32_t&amp; expected, uint32_t desired)</span></div><div class="line"><a name="l02798"></a><span class="lineno"> 2798</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l02799"></a><span class="lineno"> 2799</span>&#160;<span class="preprocessor">#ifndef VMA_ATOMIC_UINT32</span></div><div class="line"><a name="l02800"></a><span class="lineno"> 2800</span>&#160;<span class="preprocessor">   #define VMA_ATOMIC_UINT32 std::atomic&lt;uint32_t&gt;</span></div><div class="line"><a name="l02801"></a><span class="lineno"> 2801</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02802"></a><span class="lineno"> 2802</span>&#160;</div><div class="line"><a name="l02803"></a><span class="lineno"> 2803</span>&#160;<span class="preprocessor">#ifndef VMA_BEST_FIT</span></div><div class="line"><a name="l02804"></a><span class="lineno"> 2804</span>&#160;</div><div class="line"><a name="l02816"></a><span class="lineno"> 2816</span>&#160;<span class="preprocessor">    #define VMA_BEST_FIT (1)</span></div><div class="line"><a name="l02817"></a><span class="lineno"> 2817</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02818"></a><span class="lineno"> 2818</span>&#160;</div><div class="line"><a name="l02819"></a><span class="lineno"> 2819</span>&#160;<span class="preprocessor">#ifndef VMA_DEBUG_ALWAYS_DEDICATED_MEMORY</span></div><div class="line"><a name="l02820"></a><span class="lineno"> 2820</span>&#160;</div><div class="line"><a name="l02824"></a><span class="lineno"> 2824</span>&#160;<span class="preprocessor">    #define VMA_DEBUG_ALWAYS_DEDICATED_MEMORY (0)</span></div><div class="line"><a name="l02825"></a><span class="lineno"> 2825</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02826"></a><span class="lineno"> 2826</span>&#160;</div><div class="line"><a name="l02827"></a><span class="lineno"> 2827</span>&#160;<span class="preprocessor">#ifndef VMA_DEBUG_ALIGNMENT</span></div><div class="line"><a name="l02828"></a><span class="lineno"> 2828</span>&#160;</div><div class="line"><a name="l02832"></a><span class="lineno"> 2832</span>&#160;<span class="preprocessor">    #define VMA_DEBUG_ALIGNMENT (1)</span></div><div class="line"><a name="l02833"></a><span class="lineno"> 2833</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02834"></a><span class="lineno"> 2834</span>&#160;</div><div class="line"><a name="l02835"></a><span class="lineno"> 2835</span>&#160;<span class="preprocessor">#ifndef VMA_DEBUG_MARGIN</span></div><div class="line"><a name="l02836"></a><span class="lineno"> 2836</span>&#160;</div><div class="line"><a name="l02840"></a><span class="lineno"> 2840</span>&#160;<span class="preprocessor">    #define VMA_DEBUG_MARGIN (0)</span></div><div class="line"><a name="l02841"></a><span class="lineno"> 2841</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02842"></a><span class="lineno"> 2842</span>&#160;</div><div class="line"><a name="l02843"></a><span class="lineno"> 2843</span>&#160;<span class="preprocessor">#ifndef VMA_DEBUG_INITIALIZE_ALLOCATIONS</span></div><div class="line"><a name="l02844"></a><span class="lineno"> 2844</span>&#160;</div><div class="line"><a name="l02848"></a><span class="lineno"> 2848</span>&#160;<span class="preprocessor">    #define VMA_DEBUG_INITIALIZE_ALLOCATIONS (0)</span></div><div class="line"><a name="l02849"></a><span class="lineno"> 2849</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02850"></a><span class="lineno"> 2850</span>&#160;</div><div class="line"><a name="l02851"></a><span class="lineno"> 2851</span>&#160;<span class="preprocessor">#ifndef VMA_DEBUG_DETECT_CORRUPTION</span></div><div class="line"><a name="l02852"></a><span class="lineno"> 2852</span>&#160;</div><div class="line"><a name="l02857"></a><span class="lineno"> 2857</span>&#160;<span class="preprocessor">    #define VMA_DEBUG_DETECT_CORRUPTION (0)</span></div><div class="line"><a name="l02858"></a><span class="lineno"> 2858</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02859"></a><span class="lineno"> 2859</span>&#160;</div><div class="line"><a name="l02860"></a><span class="lineno"> 2860</span>&#160;<span class="preprocessor">#ifndef VMA_DEBUG_GLOBAL_MUTEX</span></div><div class="line"><a name="l02861"></a><span class="lineno"> 2861</span>&#160;</div><div class="line"><a name="l02865"></a><span class="lineno"> 2865</span>&#160;<span class="preprocessor">    #define VMA_DEBUG_GLOBAL_MUTEX (0)</span></div><div class="line"><a name="l02866"></a><span class="lineno"> 2866</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02867"></a><span class="lineno"> 2867</span>&#160;</div><div class="line"><a name="l02868"></a><span class="lineno"> 2868</span>&#160;<span class="preprocessor">#ifndef VMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY</span></div><div class="line"><a name="l02869"></a><span class="lineno"> 2869</span>&#160;</div><div class="line"><a name="l02873"></a><span class="lineno"> 2873</span>&#160;<span class="preprocessor">    #define VMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY (1)</span></div><div class="line"><a name="l02874"></a><span class="lineno"> 2874</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02875"></a><span class="lineno"> 2875</span>&#160;</div><div class="line"><a name="l02876"></a><span class="lineno"> 2876</span>&#160;<span class="preprocessor">#ifndef VMA_SMALL_HEAP_MAX_SIZE</span></div><div class="line"><a name="l02877"></a><span class="lineno"> 2877</span>&#160;<span class="preprocessor">   #define VMA_SMALL_HEAP_MAX_SIZE (1024ull * 1024 * 1024)</span></div><div class="line"><a name="l02879"></a><span class="lineno"> 2879</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02880"></a><span class="lineno"> 2880</span>&#160;</div><div class="line"><a name="l02881"></a><span class="lineno"> 2881</span>&#160;<span class="preprocessor">#ifndef VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE</span></div><div class="line"><a name="l02882"></a><span class="lineno"> 2882</span>&#160;<span class="preprocessor">   #define VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE (256ull * 1024 * 1024)</span></div><div class="line"><a name="l02884"></a><span class="lineno"> 2884</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02885"></a><span class="lineno"> 2885</span>&#160;</div><div class="line"><a name="l02886"></a><span class="lineno"> 2886</span>&#160;<span class="preprocessor">#ifndef VMA_CLASS_NO_COPY</span></div><div class="line"><a name="l02887"></a><span class="lineno"> 2887</span>&#160;<span class="preprocessor">    #define VMA_CLASS_NO_COPY(className) \</span></div><div class="line"><a name="l02888"></a><span class="lineno"> 2888</span>&#160;<span class="preprocessor">        private: \</span></div><div class="line"><a name="l02889"></a><span class="lineno"> 2889</span>&#160;<span class="preprocessor">            className(const className&amp;) = delete; \</span></div><div class="line"><a name="l02890"></a><span class="lineno"> 2890</span>&#160;<span class="preprocessor">            className&amp; operator=(const className&amp;) = delete;</span></div><div class="line"><a name="l02891"></a><span class="lineno"> 2891</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02892"></a><span class="lineno"> 2892</span>&#160;</div><div class="line"><a name="l02893"></a><span class="lineno"> 2893</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> uint32_t VMA_FRAME_INDEX_LOST = UINT32_MAX;</div><div class="line"><a name="l02894"></a><span class="lineno"> 2894</span>&#160;</div><div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>&#160;<span class="comment">// Decimal 2139416166, float NaN, little-endian binary 66 E6 84 7F.</span></div><div class="line"><a name="l02896"></a><span class="lineno"> 2896</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> uint32_t VMA_CORRUPTION_DETECTION_MAGIC_VALUE = 0x7F84E666;</div><div class="line"><a name="l02897"></a><span class="lineno"> 2897</span>&#160;</div><div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> uint8_t VMA_ALLOCATION_FILL_PATTERN_CREATED   = 0xDC;</div><div class="line"><a name="l02899"></a><span class="lineno"> 2899</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> uint8_t VMA_ALLOCATION_FILL_PATTERN_DESTROYED = 0xEF;</div><div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>&#160;</div><div class="line"><a name="l02901"></a><span class="lineno"> 2901</span>&#160;<span class="comment">/*******************************************************************************</span></div><div class="line"><a name="l02902"></a><span class="lineno"> 2902</span>&#160;<span class="comment">END OF CONFIGURATION</span></div><div class="line"><a name="l02903"></a><span class="lineno"> 2903</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l02904"></a><span class="lineno"> 2904</span>&#160;</div><div class="line"><a name="l02905"></a><span class="lineno"> 2905</span>&#160;<span class="keyword">static</span> VkAllocationCallbacks VmaEmptyAllocationCallbacks = {</div><div class="line"><a name="l02906"></a><span class="lineno"> 2906</span>&#160;    VMA_NULL, VMA_NULL, VMA_NULL, VMA_NULL, VMA_NULL, VMA_NULL };</div><div class="line"><a name="l02907"></a><span class="lineno"> 2907</span>&#160;</div><div class="line"><a name="l02908"></a><span class="lineno"> 2908</span>&#160;<span class="comment">// Returns number of bits set to 1 in (v).</span></div><div class="line"><a name="l02909"></a><span class="lineno"> 2909</span>&#160;<span class="keyword">static</span> <span class="keyword">inline</span> uint32_t VmaCountBitsSet(uint32_t v)</div><div class="line"><a name="l02910"></a><span class="lineno"> 2910</span>&#160;{</div><div class="line"><a name="l02911"></a><span class="lineno"> 2911</span>&#160;    uint32_t c = v - ((v &gt;&gt; 1) &amp; 0x55555555);</div><div class="line"><a name="l02912"></a><span class="lineno"> 2912</span>&#160;    c = ((c &gt;&gt;  2) &amp; 0x33333333) + (c &amp; 0x33333333);</div><div class="line"><a name="l02913"></a><span class="lineno"> 2913</span>&#160;    c = ((c &gt;&gt;  4) + c) &amp; 0x0F0F0F0F;</div><div class="line"><a name="l02914"></a><span class="lineno"> 2914</span>&#160;    c = ((c &gt;&gt;  8) + c) &amp; 0x00FF00FF;</div><div class="line"><a name="l02915"></a><span class="lineno"> 2915</span>&#160;    c = ((c &gt;&gt; 16) + c) &amp; 0x0000FFFF;</div><div class="line"><a name="l02916"></a><span class="lineno"> 2916</span>&#160;    <span class="keywordflow">return</span> c;</div><div class="line"><a name="l02917"></a><span class="lineno"> 2917</span>&#160;}</div><div class="line"><a name="l02918"></a><span class="lineno"> 2918</span>&#160;</div><div class="line"><a name="l02919"></a><span class="lineno"> 2919</span>&#160;<span class="comment">// Aligns given value up to nearest multiply of align value. For example: VmaAlignUp(11, 8) = 16.</span></div><div class="line"><a name="l02920"></a><span class="lineno"> 2920</span>&#160;<span class="comment">// Use types like uint32_t, uint64_t as T.</span></div><div class="line"><a name="l02921"></a><span class="lineno"> 2921</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l02922"></a><span class="lineno"> 2922</span>&#160;<span class="keyword">static</span> <span class="keyword">inline</span> T VmaAlignUp(T val, T align)</div><div class="line"><a name="l02923"></a><span class="lineno"> 2923</span>&#160;{</div><div class="line"><a name="l02924"></a><span class="lineno"> 2924</span>&#160;    <span class="keywordflow">return</span> (val + align - 1) / align * align;</div><div class="line"><a name="l02925"></a><span class="lineno"> 2925</span>&#160;}</div><div class="line"><a name="l02926"></a><span class="lineno"> 2926</span>&#160;<span class="comment">// Aligns given value down to nearest multiply of align value. For example: VmaAlignUp(11, 8) = 8.</span></div><div class="line"><a name="l02927"></a><span class="lineno"> 2927</span>&#160;<span class="comment">// Use types like uint32_t, uint64_t as T.</span></div><div class="line"><a name="l02928"></a><span class="lineno"> 2928</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l02929"></a><span class="lineno"> 2929</span>&#160;<span class="keyword">static</span> <span class="keyword">inline</span> T VmaAlignDown(T val, T align)</div><div class="line"><a name="l02930"></a><span class="lineno"> 2930</span>&#160;{</div><div class="line"><a name="l02931"></a><span class="lineno"> 2931</span>&#160;    <span class="keywordflow">return</span> val / align * align;</div><div class="line"><a name="l02932"></a><span class="lineno"> 2932</span>&#160;}</div><div class="line"><a name="l02933"></a><span class="lineno"> 2933</span>&#160;</div><div class="line"><a name="l02934"></a><span class="lineno"> 2934</span>&#160;<span class="comment">// Division with mathematical rounding to nearest number.</span></div><div class="line"><a name="l02935"></a><span class="lineno"> 2935</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l02936"></a><span class="lineno"> 2936</span>&#160;<span class="keyword">inline</span> T VmaRoundDiv(T x, T y)</div><div class="line"><a name="l02937"></a><span class="lineno"> 2937</span>&#160;{</div><div class="line"><a name="l02938"></a><span class="lineno"> 2938</span>&#160;    <span class="keywordflow">return</span> (x + (y / (T)2)) / y;</div><div class="line"><a name="l02939"></a><span class="lineno"> 2939</span>&#160;}</div><div class="line"><a name="l02940"></a><span class="lineno"> 2940</span>&#160;</div><div class="line"><a name="l02941"></a><span class="lineno"> 2941</span>&#160;<span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> VmaStrIsEmpty(<span class="keyword">const</span> <span class="keywordtype">char</span>* pStr)</div><div class="line"><a name="l02942"></a><span class="lineno"> 2942</span>&#160;{</div><div class="line"><a name="l02943"></a><span class="lineno"> 2943</span>&#160;    <span class="keywordflow">return</span> pStr == VMA_NULL || *pStr == <span class="charliteral">&#39;\0&#39;</span>;</div><div class="line"><a name="l02944"></a><span class="lineno"> 2944</span>&#160;}</div><div class="line"><a name="l02945"></a><span class="lineno"> 2945</span>&#160;</div><div class="line"><a name="l02946"></a><span class="lineno"> 2946</span>&#160;<span class="preprocessor">#ifndef VMA_SORT</span></div><div class="line"><a name="l02947"></a><span class="lineno"> 2947</span>&#160;</div><div class="line"><a name="l02948"></a><span class="lineno"> 2948</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> Iterator, <span class="keyword">typename</span> Compare&gt;</div><div class="line"><a name="l02949"></a><span class="lineno"> 2949</span>&#160;Iterator VmaQuickSortPartition(Iterator beg, Iterator end, Compare cmp)</div><div class="line"><a name="l02950"></a><span class="lineno"> 2950</span>&#160;{</div><div class="line"><a name="l02951"></a><span class="lineno"> 2951</span>&#160;    Iterator centerValue = end; --centerValue;</div><div class="line"><a name="l02952"></a><span class="lineno"> 2952</span>&#160;    Iterator insertIndex = beg;</div><div class="line"><a name="l02953"></a><span class="lineno"> 2953</span>&#160;    <span class="keywordflow">for</span>(Iterator memTypeIndex = beg; memTypeIndex &lt; centerValue; ++memTypeIndex)</div><div class="line"><a name="l02954"></a><span class="lineno"> 2954</span>&#160;    {</div><div class="line"><a name="l02955"></a><span class="lineno"> 2955</span>&#160;        <span class="keywordflow">if</span>(cmp(*memTypeIndex, *centerValue))</div><div class="line"><a name="l02956"></a><span class="lineno"> 2956</span>&#160;        {</div><div class="line"><a name="l02957"></a><span class="lineno"> 2957</span>&#160;            <span class="keywordflow">if</span>(insertIndex != memTypeIndex)</div><div class="line"><a name="l02958"></a><span class="lineno"> 2958</span>&#160;            {</div><div class="line"><a name="l02959"></a><span class="lineno"> 2959</span>&#160;                VMA_SWAP(*memTypeIndex, *insertIndex);</div><div class="line"><a name="l02960"></a><span class="lineno"> 2960</span>&#160;            }</div><div class="line"><a name="l02961"></a><span class="lineno"> 2961</span>&#160;            ++insertIndex;</div><div class="line"><a name="l02962"></a><span class="lineno"> 2962</span>&#160;        }</div><div class="line"><a name="l02963"></a><span class="lineno"> 2963</span>&#160;    }</div><div class="line"><a name="l02964"></a><span class="lineno"> 2964</span>&#160;    <span class="keywordflow">if</span>(insertIndex != centerValue)</div><div class="line"><a name="l02965"></a><span class="lineno"> 2965</span>&#160;    {</div><div class="line"><a name="l02966"></a><span class="lineno"> 2966</span>&#160;        VMA_SWAP(*insertIndex, *centerValue);</div><div class="line"><a name="l02967"></a><span class="lineno"> 2967</span>&#160;    }</div><div class="line"><a name="l02968"></a><span class="lineno"> 2968</span>&#160;    <span class="keywordflow">return</span> insertIndex;</div><div class="line"><a name="l02969"></a><span class="lineno"> 2969</span>&#160;}</div><div class="line"><a name="l02970"></a><span class="lineno"> 2970</span>&#160;</div><div class="line"><a name="l02971"></a><span class="lineno"> 2971</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> Iterator, <span class="keyword">typename</span> Compare&gt;</div><div class="line"><a name="l02972"></a><span class="lineno"> 2972</span>&#160;<span class="keywordtype">void</span> VmaQuickSort(Iterator beg, Iterator end, Compare cmp)</div><div class="line"><a name="l02973"></a><span class="lineno"> 2973</span>&#160;{</div><div class="line"><a name="l02974"></a><span class="lineno"> 2974</span>&#160;    <span class="keywordflow">if</span>(beg &lt; end)</div><div class="line"><a name="l02975"></a><span class="lineno"> 2975</span>&#160;    {</div><div class="line"><a name="l02976"></a><span class="lineno"> 2976</span>&#160;        Iterator it = VmaQuickSortPartition&lt;Iterator, Compare&gt;(beg, end, cmp);</div><div class="line"><a name="l02977"></a><span class="lineno"> 2977</span>&#160;        VmaQuickSort&lt;Iterator, Compare&gt;(beg, it, cmp);</div><div class="line"><a name="l02978"></a><span class="lineno"> 2978</span>&#160;        VmaQuickSort&lt;Iterator, Compare&gt;(it + 1, end, cmp);</div><div class="line"><a name="l02979"></a><span class="lineno"> 2979</span>&#160;    }</div><div class="line"><a name="l02980"></a><span class="lineno"> 2980</span>&#160;}</div><div class="line"><a name="l02981"></a><span class="lineno"> 2981</span>&#160;</div><div class="line"><a name="l02982"></a><span class="lineno"> 2982</span>&#160;<span class="preprocessor">#define VMA_SORT(beg, end, cmp) VmaQuickSort(beg, end, cmp)</span></div><div class="line"><a name="l02983"></a><span class="lineno"> 2983</span>&#160;</div><div class="line"><a name="l02984"></a><span class="lineno"> 2984</span>&#160;<span class="preprocessor">#endif // #ifndef VMA_SORT</span></div><div class="line"><a name="l02985"></a><span class="lineno"> 2985</span>&#160;</div><div class="line"><a name="l02986"></a><span class="lineno"> 2986</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l02987"></a><span class="lineno"> 2987</span>&#160;<span class="comment">Returns true if two memory blocks occupy overlapping pages.</span></div><div class="line"><a name="l02988"></a><span class="lineno"> 2988</span>&#160;<span class="comment">ResourceA must be in less memory offset than ResourceB.</span></div><div class="line"><a name="l02989"></a><span class="lineno"> 2989</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02990"></a><span class="lineno"> 2990</span>&#160;<span class="comment">Algorithm is based on &quot;Vulkan 1.0.39 - A Specification (with all registered Vulkan extensions)&quot;</span></div><div class="line"><a name="l02991"></a><span class="lineno"> 2991</span>&#160;<span class="comment">chapter 11.6 &quot;Resource Memory Association&quot;, paragraph &quot;Buffer-Image Granularity&quot;.</span></div><div class="line"><a name="l02992"></a><span class="lineno"> 2992</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l02993"></a><span class="lineno"> 2993</span>&#160;<span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> VmaBlocksOnSamePage(</div><div class="line"><a name="l02994"></a><span class="lineno"> 2994</span>&#160;    VkDeviceSize resourceAOffset,</div><div class="line"><a name="l02995"></a><span class="lineno"> 2995</span>&#160;    VkDeviceSize resourceASize,</div><div class="line"><a name="l02996"></a><span class="lineno"> 2996</span>&#160;    VkDeviceSize resourceBOffset,</div><div class="line"><a name="l02997"></a><span class="lineno"> 2997</span>&#160;    VkDeviceSize pageSize)</div><div class="line"><a name="l02998"></a><span class="lineno"> 2998</span>&#160;{</div><div class="line"><a name="l02999"></a><span class="lineno"> 2999</span>&#160;    VMA_ASSERT(resourceAOffset + resourceASize &lt;= resourceBOffset &amp;&amp; resourceASize &gt; 0 &amp;&amp; pageSize &gt; 0);</div><div class="line"><a name="l03000"></a><span class="lineno"> 3000</span>&#160;    VkDeviceSize resourceAEnd = resourceAOffset + resourceASize - 1;</div><div class="line"><a name="l03001"></a><span class="lineno"> 3001</span>&#160;    VkDeviceSize resourceAEndPage = resourceAEnd &amp; ~(pageSize - 1);</div><div class="line"><a name="l03002"></a><span class="lineno"> 3002</span>&#160;    VkDeviceSize resourceBStart = resourceBOffset;</div><div class="line"><a name="l03003"></a><span class="lineno"> 3003</span>&#160;    VkDeviceSize resourceBStartPage = resourceBStart &amp; ~(pageSize - 1);</div><div class="line"><a name="l03004"></a><span class="lineno"> 3004</span>&#160;    <span class="keywordflow">return</span> resourceAEndPage == resourceBStartPage;</div><div class="line"><a name="l03005"></a><span class="lineno"> 3005</span>&#160;}</div><div class="line"><a name="l03006"></a><span class="lineno"> 3006</span>&#160;</div><div class="line"><a name="l03007"></a><span class="lineno"> 3007</span>&#160;<span class="keyword">enum</span> VmaSuballocationType</div><div class="line"><a name="l03008"></a><span class="lineno"> 3008</span>&#160;{</div><div class="line"><a name="l03009"></a><span class="lineno"> 3009</span>&#160;    VMA_SUBALLOCATION_TYPE_FREE = 0,</div><div class="line"><a name="l03010"></a><span class="lineno"> 3010</span>&#160;    VMA_SUBALLOCATION_TYPE_UNKNOWN = 1,</div><div class="line"><a name="l03011"></a><span class="lineno"> 3011</span>&#160;    VMA_SUBALLOCATION_TYPE_BUFFER = 2,</div><div class="line"><a name="l03012"></a><span class="lineno"> 3012</span>&#160;    VMA_SUBALLOCATION_TYPE_IMAGE_UNKNOWN = 3,</div><div class="line"><a name="l03013"></a><span class="lineno"> 3013</span>&#160;    VMA_SUBALLOCATION_TYPE_IMAGE_LINEAR = 4,</div><div class="line"><a name="l03014"></a><span class="lineno"> 3014</span>&#160;    VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL = 5,</div><div class="line"><a name="l03015"></a><span class="lineno"> 3015</span>&#160;    VMA_SUBALLOCATION_TYPE_MAX_ENUM = 0x7FFFFFFF</div><div class="line"><a name="l03016"></a><span class="lineno"> 3016</span>&#160;};</div><div class="line"><a name="l03017"></a><span class="lineno"> 3017</span>&#160;</div><div class="line"><a name="l03018"></a><span class="lineno"> 3018</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l03019"></a><span class="lineno"> 3019</span>&#160;<span class="comment">Returns true if given suballocation types could conflict and must respect</span></div><div class="line"><a name="l03020"></a><span class="lineno"> 3020</span>&#160;<span class="comment">VkPhysicalDeviceLimits::bufferImageGranularity. They conflict if one is buffer</span></div><div class="line"><a name="l03021"></a><span class="lineno"> 3021</span>&#160;<span class="comment">or linear image and another one is optimal image. If type is unknown, behave</span></div><div class="line"><a name="l03022"></a><span class="lineno"> 3022</span>&#160;<span class="comment">conservatively.</span></div><div class="line"><a name="l03023"></a><span class="lineno"> 3023</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l03024"></a><span class="lineno"> 3024</span>&#160;<span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> VmaIsBufferImageGranularityConflict(</div><div class="line"><a name="l03025"></a><span class="lineno"> 3025</span>&#160;    VmaSuballocationType suballocType1,</div><div class="line"><a name="l03026"></a><span class="lineno"> 3026</span>&#160;    VmaSuballocationType suballocType2)</div><div class="line"><a name="l03027"></a><span class="lineno"> 3027</span>&#160;{</div><div class="line"><a name="l03028"></a><span class="lineno"> 3028</span>&#160;    <span class="keywordflow">if</span>(suballocType1 &gt; suballocType2)</div><div class="line"><a name="l03029"></a><span class="lineno"> 3029</span>&#160;    {</div><div class="line"><a name="l03030"></a><span class="lineno"> 3030</span>&#160;        VMA_SWAP(suballocType1, suballocType2);</div><div class="line"><a name="l03031"></a><span class="lineno"> 3031</span>&#160;    }</div><div class="line"><a name="l03032"></a><span class="lineno"> 3032</span>&#160;    </div><div class="line"><a name="l03033"></a><span class="lineno"> 3033</span>&#160;    <span class="keywordflow">switch</span>(suballocType1)</div><div class="line"><a name="l03034"></a><span class="lineno"> 3034</span>&#160;    {</div><div class="line"><a name="l03035"></a><span class="lineno"> 3035</span>&#160;    <span class="keywordflow">case</span> VMA_SUBALLOCATION_TYPE_FREE:</div><div class="line"><a name="l03036"></a><span class="lineno"> 3036</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l03037"></a><span class="lineno"> 3037</span>&#160;    <span class="keywordflow">case</span> VMA_SUBALLOCATION_TYPE_UNKNOWN:</div><div class="line"><a name="l03038"></a><span class="lineno"> 3038</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l03039"></a><span class="lineno"> 3039</span>&#160;    <span class="keywordflow">case</span> VMA_SUBALLOCATION_TYPE_BUFFER:</div><div class="line"><a name="l03040"></a><span class="lineno"> 3040</span>&#160;        <span class="keywordflow">return</span></div><div class="line"><a name="l03041"></a><span class="lineno"> 3041</span>&#160;            suballocType2 == VMA_SUBALLOCATION_TYPE_IMAGE_UNKNOWN ||</div><div class="line"><a name="l03042"></a><span class="lineno"> 3042</span>&#160;            suballocType2 == VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL;</div><div class="line"><a name="l03043"></a><span class="lineno"> 3043</span>&#160;    <span class="keywordflow">case</span> VMA_SUBALLOCATION_TYPE_IMAGE_UNKNOWN:</div><div class="line"><a name="l03044"></a><span class="lineno"> 3044</span>&#160;        <span class="keywordflow">return</span></div><div class="line"><a name="l03045"></a><span class="lineno"> 3045</span>&#160;            suballocType2 == VMA_SUBALLOCATION_TYPE_IMAGE_UNKNOWN ||</div><div class="line"><a name="l03046"></a><span class="lineno"> 3046</span>&#160;            suballocType2 == VMA_SUBALLOCATION_TYPE_IMAGE_LINEAR ||</div><div class="line"><a name="l03047"></a><span class="lineno"> 3047</span>&#160;            suballocType2 == VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL;</div><div class="line"><a name="l03048"></a><span class="lineno"> 3048</span>&#160;    <span class="keywordflow">case</span> VMA_SUBALLOCATION_TYPE_IMAGE_LINEAR:</div><div class="line"><a name="l03049"></a><span class="lineno"> 3049</span>&#160;        <span class="keywordflow">return</span></div><div class="line"><a name="l03050"></a><span class="lineno"> 3050</span>&#160;            suballocType2 == VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL;</div><div class="line"><a name="l03051"></a><span class="lineno"> 3051</span>&#160;    <span class="keywordflow">case</span> VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL:</div><div class="line"><a name="l03052"></a><span class="lineno"> 3052</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l03053"></a><span class="lineno"> 3053</span>&#160;    <span class="keywordflow">default</span>:</div><div class="line"><a name="l03054"></a><span class="lineno"> 3054</span>&#160;        VMA_ASSERT(0);</div><div class="line"><a name="l03055"></a><span class="lineno"> 3055</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l03056"></a><span class="lineno"> 3056</span>&#160;    }</div><div class="line"><a name="l03057"></a><span class="lineno"> 3057</span>&#160;}</div><div class="line"><a name="l03058"></a><span class="lineno"> 3058</span>&#160;</div><div class="line"><a name="l03059"></a><span class="lineno"> 3059</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> VmaWriteMagicValue(<span class="keywordtype">void</span>* pData, VkDeviceSize offset)</div><div class="line"><a name="l03060"></a><span class="lineno"> 3060</span>&#160;{</div><div class="line"><a name="l03061"></a><span class="lineno"> 3061</span>&#160;    uint32_t* pDst = (uint32_t*)((<span class="keywordtype">char</span>*)pData + offset);</div><div class="line"><a name="l03062"></a><span class="lineno"> 3062</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> numberCount = VMA_DEBUG_MARGIN / <span class="keyword">sizeof</span>(uint32_t);</div><div class="line"><a name="l03063"></a><span class="lineno"> 3063</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; numberCount; ++i, ++pDst)</div><div class="line"><a name="l03064"></a><span class="lineno"> 3064</span>&#160;    {</div><div class="line"><a name="l03065"></a><span class="lineno"> 3065</span>&#160;        *pDst = VMA_CORRUPTION_DETECTION_MAGIC_VALUE;</div><div class="line"><a name="l03066"></a><span class="lineno"> 3066</span>&#160;    }</div><div class="line"><a name="l03067"></a><span class="lineno"> 3067</span>&#160;}</div><div class="line"><a name="l03068"></a><span class="lineno"> 3068</span>&#160;</div><div class="line"><a name="l03069"></a><span class="lineno"> 3069</span>&#160;<span class="keyword">static</span> <span class="keywordtype">bool</span> VmaValidateMagicValue(<span class="keyword">const</span> <span class="keywordtype">void</span>* pData, VkDeviceSize offset)</div><div class="line"><a name="l03070"></a><span class="lineno"> 3070</span>&#160;{</div><div class="line"><a name="l03071"></a><span class="lineno"> 3071</span>&#160;    <span class="keyword">const</span> uint32_t* pSrc = (<span class="keyword">const</span> uint32_t*)((<span class="keyword">const</span> <span class="keywordtype">char</span>*)pData + offset);</div><div class="line"><a name="l03072"></a><span class="lineno"> 3072</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> numberCount = VMA_DEBUG_MARGIN / <span class="keyword">sizeof</span>(uint32_t);</div><div class="line"><a name="l03073"></a><span class="lineno"> 3073</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; numberCount; ++i, ++pSrc)</div><div class="line"><a name="l03074"></a><span class="lineno"> 3074</span>&#160;    {</div><div class="line"><a name="l03075"></a><span class="lineno"> 3075</span>&#160;        <span class="keywordflow">if</span>(*pSrc != VMA_CORRUPTION_DETECTION_MAGIC_VALUE)</div><div class="line"><a name="l03076"></a><span class="lineno"> 3076</span>&#160;        {</div><div class="line"><a name="l03077"></a><span class="lineno"> 3077</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l03078"></a><span class="lineno"> 3078</span>&#160;        }</div><div class="line"><a name="l03079"></a><span class="lineno"> 3079</span>&#160;    }</div><div class="line"><a name="l03080"></a><span class="lineno"> 3080</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l03081"></a><span class="lineno"> 3081</span>&#160;}</div><div class="line"><a name="l03082"></a><span class="lineno"> 3082</span>&#160;</div><div class="line"><a name="l03083"></a><span class="lineno"> 3083</span>&#160;<span class="comment">// Helper RAII class to lock a mutex in constructor and unlock it in destructor (at the end of scope).</span></div><div class="line"><a name="l03084"></a><span class="lineno"> 3084</span>&#160;<span class="keyword">struct </span>VmaMutexLock</div><div class="line"><a name="l03085"></a><span class="lineno"> 3085</span>&#160;{</div><div class="line"><a name="l03086"></a><span class="lineno"> 3086</span>&#160;    VMA_CLASS_NO_COPY(VmaMutexLock)</div><div class="line"><a name="l03087"></a><span class="lineno"> 3087</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l03088"></a><span class="lineno"> 3088</span>&#160;    VmaMutexLock(VMA_MUTEX&amp; mutex, <span class="keywordtype">bool</span> useMutex) :</div><div class="line"><a name="l03089"></a><span class="lineno"> 3089</span>&#160;        m_pMutex(useMutex ? &amp;mutex : VMA_NULL)</div><div class="line"><a name="l03090"></a><span class="lineno"> 3090</span>&#160;    {</div><div class="line"><a name="l03091"></a><span class="lineno"> 3091</span>&#160;        <span class="keywordflow">if</span>(m_pMutex)</div><div class="line"><a name="l03092"></a><span class="lineno"> 3092</span>&#160;        {</div><div class="line"><a name="l03093"></a><span class="lineno"> 3093</span>&#160;            m_pMutex-&gt;Lock();</div><div class="line"><a name="l03094"></a><span class="lineno"> 3094</span>&#160;        }</div><div class="line"><a name="l03095"></a><span class="lineno"> 3095</span>&#160;    }</div><div class="line"><a name="l03096"></a><span class="lineno"> 3096</span>&#160;    </div><div class="line"><a name="l03097"></a><span class="lineno"> 3097</span>&#160;    ~VmaMutexLock()</div><div class="line"><a name="l03098"></a><span class="lineno"> 3098</span>&#160;    {</div><div class="line"><a name="l03099"></a><span class="lineno"> 3099</span>&#160;        <span class="keywordflow">if</span>(m_pMutex)</div><div class="line"><a name="l03100"></a><span class="lineno"> 3100</span>&#160;        {</div><div class="line"><a name="l03101"></a><span class="lineno"> 3101</span>&#160;            m_pMutex-&gt;Unlock();</div><div class="line"><a name="l03102"></a><span class="lineno"> 3102</span>&#160;        }</div><div class="line"><a name="l03103"></a><span class="lineno"> 3103</span>&#160;    }</div><div class="line"><a name="l03104"></a><span class="lineno"> 3104</span>&#160;</div><div class="line"><a name="l03105"></a><span class="lineno"> 3105</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l03106"></a><span class="lineno"> 3106</span>&#160;    VMA_MUTEX* m_pMutex;</div><div class="line"><a name="l03107"></a><span class="lineno"> 3107</span>&#160;};</div><div class="line"><a name="l03108"></a><span class="lineno"> 3108</span>&#160;</div><div class="line"><a name="l03109"></a><span class="lineno"> 3109</span>&#160;<span class="preprocessor">#if VMA_DEBUG_GLOBAL_MUTEX</span></div><div class="line"><a name="l03110"></a><span class="lineno"> 3110</span>&#160;    <span class="keyword">static</span> VMA_MUTEX gDebugGlobalMutex;</div><div class="line"><a name="l03111"></a><span class="lineno"> 3111</span>&#160;<span class="preprocessor">    #define VMA_DEBUG_GLOBAL_MUTEX_LOCK VmaMutexLock debugGlobalMutexLock(gDebugGlobalMutex, true);</span></div><div class="line"><a name="l03112"></a><span class="lineno"> 3112</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l03113"></a><span class="lineno"> 3113</span>&#160;<span class="preprocessor">    #define VMA_DEBUG_GLOBAL_MUTEX_LOCK</span></div><div class="line"><a name="l03114"></a><span class="lineno"> 3114</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l03115"></a><span class="lineno"> 3115</span>&#160;</div><div class="line"><a name="l03116"></a><span class="lineno"> 3116</span>&#160;<span class="comment">// Minimum size of a free suballocation to register it in the free suballocation collection.</span></div><div class="line"><a name="l03117"></a><span class="lineno"> 3117</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> VkDeviceSize VMA_MIN_FREE_SUBALLOCATION_SIZE_TO_REGISTER = 16;</div><div class="line"><a name="l03118"></a><span class="lineno"> 3118</span>&#160;</div><div class="line"><a name="l03119"></a><span class="lineno"> 3119</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l03120"></a><span class="lineno"> 3120</span>&#160;<span class="comment">Performs binary search and returns iterator to first element that is greater or</span></div><div class="line"><a name="l03121"></a><span class="lineno"> 3121</span>&#160;<span class="comment">equal to (key), according to comparison (cmp).</span></div><div class="line"><a name="l03122"></a><span class="lineno"> 3122</span>&#160;<span class="comment"></span></div><div class="line"><a name="l03123"></a><span class="lineno"> 3123</span>&#160;<span class="comment">Cmp should return true if first argument is less than second argument.</span></div><div class="line"><a name="l03124"></a><span class="lineno"> 3124</span>&#160;<span class="comment"></span></div><div class="line"><a name="l03125"></a><span class="lineno"> 3125</span>&#160;<span class="comment">Returned value is the found element, if present in the collection or place where</span></div><div class="line"><a name="l03126"></a><span class="lineno"> 3126</span>&#160;<span class="comment">new element with value (key) should be inserted.</span></div><div class="line"><a name="l03127"></a><span class="lineno"> 3127</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l03128"></a><span class="lineno"> 3128</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> CmpLess, <span class="keyword">typename</span> IterT, <span class="keyword">typename</span> KeyT&gt;</div><div class="line"><a name="l03129"></a><span class="lineno"> 3129</span>&#160;<span class="keyword">static</span> IterT VmaBinaryFindFirstNotLess(IterT beg, IterT end, <span class="keyword">const</span> KeyT &amp;key, CmpLess cmp)</div><div class="line"><a name="l03130"></a><span class="lineno"> 3130</span>&#160;{</div><div class="line"><a name="l03131"></a><span class="lineno"> 3131</span>&#160;    <span class="keywordtype">size_t</span> down = 0, up = (end - beg);</div><div class="line"><a name="l03132"></a><span class="lineno"> 3132</span>&#160;    <span class="keywordflow">while</span>(down &lt; up)</div><div class="line"><a name="l03133"></a><span class="lineno"> 3133</span>&#160;    {</div><div class="line"><a name="l03134"></a><span class="lineno"> 3134</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">size_t</span> mid = (down + up) / 2;</div><div class="line"><a name="l03135"></a><span class="lineno"> 3135</span>&#160;        <span class="keywordflow">if</span>(cmp(*(beg+mid), key))</div><div class="line"><a name="l03136"></a><span class="lineno"> 3136</span>&#160;        {</div><div class="line"><a name="l03137"></a><span class="lineno"> 3137</span>&#160;            down = mid + 1;</div><div class="line"><a name="l03138"></a><span class="lineno"> 3138</span>&#160;        }</div><div class="line"><a name="l03139"></a><span class="lineno"> 3139</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l03140"></a><span class="lineno"> 3140</span>&#160;        {</div><div class="line"><a name="l03141"></a><span class="lineno"> 3141</span>&#160;            up = mid;</div><div class="line"><a name="l03142"></a><span class="lineno"> 3142</span>&#160;        }</div><div class="line"><a name="l03143"></a><span class="lineno"> 3143</span>&#160;    }</div><div class="line"><a name="l03144"></a><span class="lineno"> 3144</span>&#160;    <span class="keywordflow">return</span> beg + down;</div><div class="line"><a name="l03145"></a><span class="lineno"> 3145</span>&#160;}</div><div class="line"><a name="l03146"></a><span class="lineno"> 3146</span>&#160;</div><div class="line"><a name="l03148"></a><span class="lineno"> 3148</span>&#160;<span class="comment">// Memory allocation</span></div><div class="line"><a name="l03149"></a><span class="lineno"> 3149</span>&#160;</div><div class="line"><a name="l03150"></a><span class="lineno"> 3150</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span>* VmaMalloc(<span class="keyword">const</span> VkAllocationCallbacks* pAllocationCallbacks, <span class="keywordtype">size_t</span> size, <span class="keywordtype">size_t</span> alignment)</div><div class="line"><a name="l03151"></a><span class="lineno"> 3151</span>&#160;{</div><div class="line"><a name="l03152"></a><span class="lineno"> 3152</span>&#160;    <span class="keywordflow">if</span>((pAllocationCallbacks != VMA_NULL) &amp;&amp;</div><div class="line"><a name="l03153"></a><span class="lineno"> 3153</span>&#160;        (pAllocationCallbacks-&gt;pfnAllocation != VMA_NULL))</div><div class="line"><a name="l03154"></a><span class="lineno"> 3154</span>&#160;    {</div><div class="line"><a name="l03155"></a><span class="lineno"> 3155</span>&#160;        <span class="keywordflow">return</span> (*pAllocationCallbacks-&gt;pfnAllocation)(</div><div class="line"><a name="l03156"></a><span class="lineno"> 3156</span>&#160;            pAllocationCallbacks-&gt;pUserData,</div><div class="line"><a name="l03157"></a><span class="lineno"> 3157</span>&#160;            size,</div><div class="line"><a name="l03158"></a><span class="lineno"> 3158</span>&#160;            alignment,</div><div class="line"><a name="l03159"></a><span class="lineno"> 3159</span>&#160;            VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);</div><div class="line"><a name="l03160"></a><span class="lineno"> 3160</span>&#160;    }</div><div class="line"><a name="l03161"></a><span class="lineno"> 3161</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l03162"></a><span class="lineno"> 3162</span>&#160;    {</div><div class="line"><a name="l03163"></a><span class="lineno"> 3163</span>&#160;        <span class="keywordflow">return</span> VMA_SYSTEM_ALIGNED_MALLOC(size, alignment);</div><div class="line"><a name="l03164"></a><span class="lineno"> 3164</span>&#160;    }</div><div class="line"><a name="l03165"></a><span class="lineno"> 3165</span>&#160;}</div><div class="line"><a name="l03166"></a><span class="lineno"> 3166</span>&#160;</div><div class="line"><a name="l03167"></a><span class="lineno"> 3167</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> VmaFree(<span class="keyword">const</span> VkAllocationCallbacks* pAllocationCallbacks, <span class="keywordtype">void</span>* ptr)</div><div class="line"><a name="l03168"></a><span class="lineno"> 3168</span>&#160;{</div><div class="line"><a name="l03169"></a><span class="lineno"> 3169</span>&#160;    <span class="keywordflow">if</span>((pAllocationCallbacks != VMA_NULL) &amp;&amp;</div><div class="line"><a name="l03170"></a><span class="lineno"> 3170</span>&#160;        (pAllocationCallbacks-&gt;pfnFree != VMA_NULL))</div><div class="line"><a name="l03171"></a><span class="lineno"> 3171</span>&#160;    {</div><div class="line"><a name="l03172"></a><span class="lineno"> 3172</span>&#160;        (*pAllocationCallbacks-&gt;pfnFree)(pAllocationCallbacks-&gt;pUserData, ptr);</div><div class="line"><a name="l03173"></a><span class="lineno"> 3173</span>&#160;    }</div><div class="line"><a name="l03174"></a><span class="lineno"> 3174</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l03175"></a><span class="lineno"> 3175</span>&#160;    {</div><div class="line"><a name="l03176"></a><span class="lineno"> 3176</span>&#160;        VMA_SYSTEM_FREE(ptr);</div><div class="line"><a name="l03177"></a><span class="lineno"> 3177</span>&#160;    }</div><div class="line"><a name="l03178"></a><span class="lineno"> 3178</span>&#160;}</div><div class="line"><a name="l03179"></a><span class="lineno"> 3179</span>&#160;</div><div class="line"><a name="l03180"></a><span class="lineno"> 3180</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03181"></a><span class="lineno"> 3181</span>&#160;<span class="keyword">static</span> T* VmaAllocate(<span class="keyword">const</span> VkAllocationCallbacks* pAllocationCallbacks)</div><div class="line"><a name="l03182"></a><span class="lineno"> 3182</span>&#160;{</div><div class="line"><a name="l03183"></a><span class="lineno"> 3183</span>&#160;    <span class="keywordflow">return</span> (T*)VmaMalloc(pAllocationCallbacks, <span class="keyword">sizeof</span>(T), VMA_ALIGN_OF(T));</div><div class="line"><a name="l03184"></a><span class="lineno"> 3184</span>&#160;}</div><div class="line"><a name="l03185"></a><span class="lineno"> 3185</span>&#160;</div><div class="line"><a name="l03186"></a><span class="lineno"> 3186</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03187"></a><span class="lineno"> 3187</span>&#160;<span class="keyword">static</span> T* VmaAllocateArray(<span class="keyword">const</span> VkAllocationCallbacks* pAllocationCallbacks, <span class="keywordtype">size_t</span> count)</div><div class="line"><a name="l03188"></a><span class="lineno"> 3188</span>&#160;{</div><div class="line"><a name="l03189"></a><span class="lineno"> 3189</span>&#160;    <span class="keywordflow">return</span> (T*)VmaMalloc(pAllocationCallbacks, <span class="keyword">sizeof</span>(T) * count, VMA_ALIGN_OF(T));</div><div class="line"><a name="l03190"></a><span class="lineno"> 3190</span>&#160;}</div><div class="line"><a name="l03191"></a><span class="lineno"> 3191</span>&#160;</div><div class="line"><a name="l03192"></a><span class="lineno"> 3192</span>&#160;<span class="preprocessor">#define vma_new(allocator, type)   new(VmaAllocate&lt;type&gt;(allocator))(type)</span></div><div class="line"><a name="l03193"></a><span class="lineno"> 3193</span>&#160;</div><div class="line"><a name="l03194"></a><span class="lineno"> 3194</span>&#160;<span class="preprocessor">#define vma_new_array(allocator, type, count)   new(VmaAllocateArray&lt;type&gt;((allocator), (count)))(type)</span></div><div class="line"><a name="l03195"></a><span class="lineno"> 3195</span>&#160;</div><div class="line"><a name="l03196"></a><span class="lineno"> 3196</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03197"></a><span class="lineno"> 3197</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> vma_delete(<span class="keyword">const</span> VkAllocationCallbacks* pAllocationCallbacks, T* ptr)</div><div class="line"><a name="l03198"></a><span class="lineno"> 3198</span>&#160;{</div><div class="line"><a name="l03199"></a><span class="lineno"> 3199</span>&#160;    ptr-&gt;~T();</div><div class="line"><a name="l03200"></a><span class="lineno"> 3200</span>&#160;    VmaFree(pAllocationCallbacks, ptr);</div><div class="line"><a name="l03201"></a><span class="lineno"> 3201</span>&#160;}</div><div class="line"><a name="l03202"></a><span class="lineno"> 3202</span>&#160;</div><div class="line"><a name="l03203"></a><span class="lineno"> 3203</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03204"></a><span class="lineno"> 3204</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> vma_delete_array(<span class="keyword">const</span> VkAllocationCallbacks* pAllocationCallbacks, T* ptr, <span class="keywordtype">size_t</span> count)</div><div class="line"><a name="l03205"></a><span class="lineno"> 3205</span>&#160;{</div><div class="line"><a name="l03206"></a><span class="lineno"> 3206</span>&#160;    <span class="keywordflow">if</span>(ptr != VMA_NULL)</div><div class="line"><a name="l03207"></a><span class="lineno"> 3207</span>&#160;    {</div><div class="line"><a name="l03208"></a><span class="lineno"> 3208</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = count; i--; )</div><div class="line"><a name="l03209"></a><span class="lineno"> 3209</span>&#160;        {</div><div class="line"><a name="l03210"></a><span class="lineno"> 3210</span>&#160;            ptr[i].~T();</div><div class="line"><a name="l03211"></a><span class="lineno"> 3211</span>&#160;        }</div><div class="line"><a name="l03212"></a><span class="lineno"> 3212</span>&#160;        VmaFree(pAllocationCallbacks, ptr);</div><div class="line"><a name="l03213"></a><span class="lineno"> 3213</span>&#160;    }</div><div class="line"><a name="l03214"></a><span class="lineno"> 3214</span>&#160;}</div><div class="line"><a name="l03215"></a><span class="lineno"> 3215</span>&#160;</div><div class="line"><a name="l03216"></a><span class="lineno"> 3216</span>&#160;<span class="comment">// STL-compatible allocator.</span></div><div class="line"><a name="l03217"></a><span class="lineno"> 3217</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03218"></a><span class="lineno"> 3218</span>&#160;<span class="keyword">class </span>VmaStlAllocator</div><div class="line"><a name="l03219"></a><span class="lineno"> 3219</span>&#160;{</div><div class="line"><a name="l03220"></a><span class="lineno"> 3220</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l03221"></a><span class="lineno"> 3221</span>&#160;    <span class="keyword">const</span> VkAllocationCallbacks* <span class="keyword">const</span> m_pCallbacks;</div><div class="line"><a name="l03222"></a><span class="lineno"> 3222</span>&#160;    <span class="keyword">typedef</span> T value_type;</div><div class="line"><a name="l03223"></a><span class="lineno"> 3223</span>&#160;    </div><div class="line"><a name="l03224"></a><span class="lineno"> 3224</span>&#160;    VmaStlAllocator(<span class="keyword">const</span> VkAllocationCallbacks* pCallbacks) : m_pCallbacks(pCallbacks) { }</div><div class="line"><a name="l03225"></a><span class="lineno"> 3225</span>&#160;    <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U&gt; VmaStlAllocator(<span class="keyword">const</span> VmaStlAllocator&lt;U&gt;&amp; src) : m_pCallbacks(src.m_pCallbacks) { }</div><div class="line"><a name="l03226"></a><span class="lineno"> 3226</span>&#160;</div><div class="line"><a name="l03227"></a><span class="lineno"> 3227</span>&#160;    T* allocate(<span class="keywordtype">size_t</span> n) { <span class="keywordflow">return</span> VmaAllocateArray&lt;T&gt;(m_pCallbacks, n); }</div><div class="line"><a name="l03228"></a><span class="lineno"> 3228</span>&#160;    <span class="keywordtype">void</span> deallocate(T* p, <span class="keywordtype">size_t</span> n) { VmaFree(m_pCallbacks, p); }</div><div class="line"><a name="l03229"></a><span class="lineno"> 3229</span>&#160;</div><div class="line"><a name="l03230"></a><span class="lineno"> 3230</span>&#160;    <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U&gt;</div><div class="line"><a name="l03231"></a><span class="lineno"> 3231</span>&#160;    <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> VmaStlAllocator&lt;U&gt;&amp; rhs)<span class="keyword"> const</span></div><div class="line"><a name="l03232"></a><span class="lineno"> 3232</span>&#160;<span class="keyword">    </span>{</div><div class="line"><a name="l03233"></a><span class="lineno"> 3233</span>&#160;        <span class="keywordflow">return</span> m_pCallbacks == rhs.m_pCallbacks;</div><div class="line"><a name="l03234"></a><span class="lineno"> 3234</span>&#160;    }</div><div class="line"><a name="l03235"></a><span class="lineno"> 3235</span>&#160;    <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U&gt;</div><div class="line"><a name="l03236"></a><span class="lineno"> 3236</span>&#160;    <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> VmaStlAllocator&lt;U&gt;&amp; rhs)<span class="keyword"> const</span></div><div class="line"><a name="l03237"></a><span class="lineno"> 3237</span>&#160;<span class="keyword">    </span>{</div><div class="line"><a name="l03238"></a><span class="lineno"> 3238</span>&#160;        <span class="keywordflow">return</span> m_pCallbacks != rhs.m_pCallbacks;</div><div class="line"><a name="l03239"></a><span class="lineno"> 3239</span>&#160;    }</div><div class="line"><a name="l03240"></a><span class="lineno"> 3240</span>&#160;</div><div class="line"><a name="l03241"></a><span class="lineno"> 3241</span>&#160;    VmaStlAllocator&amp; operator=(<span class="keyword">const</span> VmaStlAllocator&amp; x) = <span class="keyword">delete</span>;</div><div class="line"><a name="l03242"></a><span class="lineno"> 3242</span>&#160;};</div><div class="line"><a name="l03243"></a><span class="lineno"> 3243</span>&#160;</div><div class="line"><a name="l03244"></a><span class="lineno"> 3244</span>&#160;<span class="preprocessor">#if VMA_USE_STL_VECTOR</span></div><div class="line"><a name="l03245"></a><span class="lineno"> 3245</span>&#160;</div><div class="line"><a name="l03246"></a><span class="lineno"> 3246</span>&#160;<span class="preprocessor">#define VmaVector std::vector</span></div><div class="line"><a name="l03247"></a><span class="lineno"> 3247</span>&#160;</div><div class="line"><a name="l03248"></a><span class="lineno"> 3248</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> allocatorT&gt;</div><div class="line"><a name="l03249"></a><span class="lineno"> 3249</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> VmaVectorInsert(std::vector&lt;T, allocatorT&gt;&amp; vec, <span class="keywordtype">size_t</span> index, <span class="keyword">const</span> T&amp; item)</div><div class="line"><a name="l03250"></a><span class="lineno"> 3250</span>&#160;{</div><div class="line"><a name="l03251"></a><span class="lineno"> 3251</span>&#160;    vec.insert(vec.begin() + index, item);</div><div class="line"><a name="l03252"></a><span class="lineno"> 3252</span>&#160;}</div><div class="line"><a name="l03253"></a><span class="lineno"> 3253</span>&#160;</div><div class="line"><a name="l03254"></a><span class="lineno"> 3254</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> allocatorT&gt;</div><div class="line"><a name="l03255"></a><span class="lineno"> 3255</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> VmaVectorRemove(std::vector&lt;T, allocatorT&gt;&amp; vec, <span class="keywordtype">size_t</span> index)</div><div class="line"><a name="l03256"></a><span class="lineno"> 3256</span>&#160;{</div><div class="line"><a name="l03257"></a><span class="lineno"> 3257</span>&#160;    vec.erase(vec.begin() + index);</div><div class="line"><a name="l03258"></a><span class="lineno"> 3258</span>&#160;}</div><div class="line"><a name="l03259"></a><span class="lineno"> 3259</span>&#160;</div><div class="line"><a name="l03260"></a><span class="lineno"> 3260</span>&#160;<span class="preprocessor">#else // #if VMA_USE_STL_VECTOR</span></div><div class="line"><a name="l03261"></a><span class="lineno"> 3261</span>&#160;</div><div class="line"><a name="l03262"></a><span class="lineno"> 3262</span>&#160;<span class="comment">/* Class with interface compatible with subset of std::vector.</span></div><div class="line"><a name="l03263"></a><span class="lineno"> 3263</span>&#160;<span class="comment">T must be POD because constructors and destructors are not called and memcpy is</span></div><div class="line"><a name="l03264"></a><span class="lineno"> 3264</span>&#160;<span class="comment">used for these objects. */</span></div><div class="line"><a name="l03265"></a><span class="lineno"> 3265</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> AllocatorT&gt;</div><div class="line"><a name="l03266"></a><span class="lineno"> 3266</span>&#160;<span class="keyword">class </span>VmaVector</div><div class="line"><a name="l03267"></a><span class="lineno"> 3267</span>&#160;{</div><div class="line"><a name="l03268"></a><span class="lineno"> 3268</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l03269"></a><span class="lineno"> 3269</span>&#160;    <span class="keyword">typedef</span> T value_type;</div><div class="line"><a name="l03270"></a><span class="lineno"> 3270</span>&#160;</div><div class="line"><a name="l03271"></a><span class="lineno"> 3271</span>&#160;    VmaVector(<span class="keyword">const</span> AllocatorT&amp; allocator) :</div><div class="line"><a name="l03272"></a><span class="lineno"> 3272</span>&#160;        m_Allocator(allocator),</div><div class="line"><a name="l03273"></a><span class="lineno"> 3273</span>&#160;        m_pArray(VMA_NULL),</div><div class="line"><a name="l03274"></a><span class="lineno"> 3274</span>&#160;        m_Count(0),</div><div class="line"><a name="l03275"></a><span class="lineno"> 3275</span>&#160;        m_Capacity(0)</div><div class="line"><a name="l03276"></a><span class="lineno"> 3276</span>&#160;    {</div><div class="line"><a name="l03277"></a><span class="lineno"> 3277</span>&#160;    }</div><div class="line"><a name="l03278"></a><span class="lineno"> 3278</span>&#160;</div><div class="line"><a name="l03279"></a><span class="lineno"> 3279</span>&#160;    VmaVector(<span class="keywordtype">size_t</span> count, <span class="keyword">const</span> AllocatorT&amp; allocator) :</div><div class="line"><a name="l03280"></a><span class="lineno"> 3280</span>&#160;        m_Allocator(allocator),</div><div class="line"><a name="l03281"></a><span class="lineno"> 3281</span>&#160;        m_pArray(count ? (T*)VmaAllocateArray&lt;T&gt;(allocator.m_pCallbacks, count) : VMA_NULL),</div><div class="line"><a name="l03282"></a><span class="lineno"> 3282</span>&#160;        m_Count(count),</div><div class="line"><a name="l03283"></a><span class="lineno"> 3283</span>&#160;        m_Capacity(count)</div><div class="line"><a name="l03284"></a><span class="lineno"> 3284</span>&#160;    {</div><div class="line"><a name="l03285"></a><span class="lineno"> 3285</span>&#160;    }</div><div class="line"><a name="l03286"></a><span class="lineno"> 3286</span>&#160;    </div><div class="line"><a name="l03287"></a><span class="lineno"> 3287</span>&#160;    VmaVector(<span class="keyword">const</span> VmaVector&lt;T, AllocatorT&gt;&amp; src) :</div><div class="line"><a name="l03288"></a><span class="lineno"> 3288</span>&#160;        m_Allocator(src.m_Allocator),</div><div class="line"><a name="l03289"></a><span class="lineno"> 3289</span>&#160;        m_pArray(src.m_Count ? (T*)VmaAllocateArray&lt;T&gt;(src.m_Allocator.m_pCallbacks, src.m_Count) : VMA_NULL),</div><div class="line"><a name="l03290"></a><span class="lineno"> 3290</span>&#160;        m_Count(src.m_Count),</div><div class="line"><a name="l03291"></a><span class="lineno"> 3291</span>&#160;        m_Capacity(src.m_Count)</div><div class="line"><a name="l03292"></a><span class="lineno"> 3292</span>&#160;    {</div><div class="line"><a name="l03293"></a><span class="lineno"> 3293</span>&#160;        <span class="keywordflow">if</span>(m_Count != 0)</div><div class="line"><a name="l03294"></a><span class="lineno"> 3294</span>&#160;        {</div><div class="line"><a name="l03295"></a><span class="lineno"> 3295</span>&#160;            memcpy(m_pArray, src.m_pArray, m_Count * <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l03296"></a><span class="lineno"> 3296</span>&#160;        }</div><div class="line"><a name="l03297"></a><span class="lineno"> 3297</span>&#160;    }</div><div class="line"><a name="l03298"></a><span class="lineno"> 3298</span>&#160;    </div><div class="line"><a name="l03299"></a><span class="lineno"> 3299</span>&#160;    ~VmaVector()</div><div class="line"><a name="l03300"></a><span class="lineno"> 3300</span>&#160;    {</div><div class="line"><a name="l03301"></a><span class="lineno"> 3301</span>&#160;        VmaFree(m_Allocator.m_pCallbacks, m_pArray);</div><div class="line"><a name="l03302"></a><span class="lineno"> 3302</span>&#160;    }</div><div class="line"><a name="l03303"></a><span class="lineno"> 3303</span>&#160;</div><div class="line"><a name="l03304"></a><span class="lineno"> 3304</span>&#160;    VmaVector&amp; operator=(<span class="keyword">const</span> VmaVector&lt;T, AllocatorT&gt;&amp; rhs)</div><div class="line"><a name="l03305"></a><span class="lineno"> 3305</span>&#160;    {</div><div class="line"><a name="l03306"></a><span class="lineno"> 3306</span>&#160;        <span class="keywordflow">if</span>(&amp;rhs != <span class="keyword">this</span>)</div><div class="line"><a name="l03307"></a><span class="lineno"> 3307</span>&#160;        {</div><div class="line"><a name="l03308"></a><span class="lineno"> 3308</span>&#160;            resize(rhs.m_Count);</div><div class="line"><a name="l03309"></a><span class="lineno"> 3309</span>&#160;            <span class="keywordflow">if</span>(m_Count != 0)</div><div class="line"><a name="l03310"></a><span class="lineno"> 3310</span>&#160;            {</div><div class="line"><a name="l03311"></a><span class="lineno"> 3311</span>&#160;                memcpy(m_pArray, rhs.m_pArray, m_Count * <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l03312"></a><span class="lineno"> 3312</span>&#160;            }</div><div class="line"><a name="l03313"></a><span class="lineno"> 3313</span>&#160;        }</div><div class="line"><a name="l03314"></a><span class="lineno"> 3314</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l03315"></a><span class="lineno"> 3315</span>&#160;    }</div><div class="line"><a name="l03316"></a><span class="lineno"> 3316</span>&#160;    </div><div class="line"><a name="l03317"></a><span class="lineno"> 3317</span>&#160;    <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_Count == 0; }</div><div class="line"><a name="l03318"></a><span class="lineno"> 3318</span>&#160;    <span class="keywordtype">size_t</span> size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_Count; }</div><div class="line"><a name="l03319"></a><span class="lineno"> 3319</span>&#160;    T* data() { <span class="keywordflow">return</span> m_pArray; }</div><div class="line"><a name="l03320"></a><span class="lineno"> 3320</span>&#160;    <span class="keyword">const</span> T* data()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_pArray; }</div><div class="line"><a name="l03321"></a><span class="lineno"> 3321</span>&#160;    </div><div class="line"><a name="l03322"></a><span class="lineno"> 3322</span>&#160;    T&amp; operator[](<span class="keywordtype">size_t</span> index)</div><div class="line"><a name="l03323"></a><span class="lineno"> 3323</span>&#160;    {</div><div class="line"><a name="l03324"></a><span class="lineno"> 3324</span>&#160;        VMA_HEAVY_ASSERT(index &lt; m_Count);</div><div class="line"><a name="l03325"></a><span class="lineno"> 3325</span>&#160;        <span class="keywordflow">return</span> m_pArray[index];</div><div class="line"><a name="l03326"></a><span class="lineno"> 3326</span>&#160;    }</div><div class="line"><a name="l03327"></a><span class="lineno"> 3327</span>&#160;    <span class="keyword">const</span> T&amp; operator[](<span class="keywordtype">size_t</span> index)<span class="keyword"> const</span></div><div class="line"><a name="l03328"></a><span class="lineno"> 3328</span>&#160;<span class="keyword">    </span>{</div><div class="line"><a name="l03329"></a><span class="lineno"> 3329</span>&#160;        VMA_HEAVY_ASSERT(index &lt; m_Count);</div><div class="line"><a name="l03330"></a><span class="lineno"> 3330</span>&#160;        <span class="keywordflow">return</span> m_pArray[index];</div><div class="line"><a name="l03331"></a><span class="lineno"> 3331</span>&#160;    }</div><div class="line"><a name="l03332"></a><span class="lineno"> 3332</span>&#160;</div><div class="line"><a name="l03333"></a><span class="lineno"> 3333</span>&#160;    T&amp; front()</div><div class="line"><a name="l03334"></a><span class="lineno"> 3334</span>&#160;    {</div><div class="line"><a name="l03335"></a><span class="lineno"> 3335</span>&#160;        VMA_HEAVY_ASSERT(m_Count &gt; 0);</div><div class="line"><a name="l03336"></a><span class="lineno"> 3336</span>&#160;        <span class="keywordflow">return</span> m_pArray[0];</div><div class="line"><a name="l03337"></a><span class="lineno"> 3337</span>&#160;    }</div><div class="line"><a name="l03338"></a><span class="lineno"> 3338</span>&#160;    <span class="keyword">const</span> T&amp; front()<span class="keyword"> const</span></div><div class="line"><a name="l03339"></a><span class="lineno"> 3339</span>&#160;<span class="keyword">    </span>{</div><div class="line"><a name="l03340"></a><span class="lineno"> 3340</span>&#160;        VMA_HEAVY_ASSERT(m_Count &gt; 0);</div><div class="line"><a name="l03341"></a><span class="lineno"> 3341</span>&#160;        <span class="keywordflow">return</span> m_pArray[0];</div><div class="line"><a name="l03342"></a><span class="lineno"> 3342</span>&#160;    }</div><div class="line"><a name="l03343"></a><span class="lineno"> 3343</span>&#160;    T&amp; back()</div><div class="line"><a name="l03344"></a><span class="lineno"> 3344</span>&#160;    {</div><div class="line"><a name="l03345"></a><span class="lineno"> 3345</span>&#160;        VMA_HEAVY_ASSERT(m_Count &gt; 0);</div><div class="line"><a name="l03346"></a><span class="lineno"> 3346</span>&#160;        <span class="keywordflow">return</span> m_pArray[m_Count - 1];</div><div class="line"><a name="l03347"></a><span class="lineno"> 3347</span>&#160;    }</div><div class="line"><a name="l03348"></a><span class="lineno"> 3348</span>&#160;    <span class="keyword">const</span> T&amp; back()<span class="keyword"> const</span></div><div class="line"><a name="l03349"></a><span class="lineno"> 3349</span>&#160;<span class="keyword">    </span>{</div><div class="line"><a name="l03350"></a><span class="lineno"> 3350</span>&#160;        VMA_HEAVY_ASSERT(m_Count &gt; 0);</div><div class="line"><a name="l03351"></a><span class="lineno"> 3351</span>&#160;        <span class="keywordflow">return</span> m_pArray[m_Count - 1];</div><div class="line"><a name="l03352"></a><span class="lineno"> 3352</span>&#160;    }</div><div class="line"><a name="l03353"></a><span class="lineno"> 3353</span>&#160;</div><div class="line"><a name="l03354"></a><span class="lineno"> 3354</span>&#160;    <span class="keywordtype">void</span> reserve(<span class="keywordtype">size_t</span> newCapacity, <span class="keywordtype">bool</span> freeMemory = <span class="keyword">false</span>)</div><div class="line"><a name="l03355"></a><span class="lineno"> 3355</span>&#160;    {</div><div class="line"><a name="l03356"></a><span class="lineno"> 3356</span>&#160;        newCapacity = VMA_MAX(newCapacity, m_Count);</div><div class="line"><a name="l03357"></a><span class="lineno"> 3357</span>&#160;        </div><div class="line"><a name="l03358"></a><span class="lineno"> 3358</span>&#160;        <span class="keywordflow">if</span>((newCapacity &lt; m_Capacity) &amp;&amp; !freeMemory)</div><div class="line"><a name="l03359"></a><span class="lineno"> 3359</span>&#160;        {</div><div class="line"><a name="l03360"></a><span class="lineno"> 3360</span>&#160;            newCapacity = m_Capacity;</div><div class="line"><a name="l03361"></a><span class="lineno"> 3361</span>&#160;        }</div><div class="line"><a name="l03362"></a><span class="lineno"> 3362</span>&#160;        </div><div class="line"><a name="l03363"></a><span class="lineno"> 3363</span>&#160;        <span class="keywordflow">if</span>(newCapacity != m_Capacity)</div><div class="line"><a name="l03364"></a><span class="lineno"> 3364</span>&#160;        {</div><div class="line"><a name="l03365"></a><span class="lineno"> 3365</span>&#160;            T* <span class="keyword">const</span> newArray = newCapacity ? VmaAllocateArray&lt;T&gt;(m_Allocator, newCapacity) : VMA_NULL;</div><div class="line"><a name="l03366"></a><span class="lineno"> 3366</span>&#160;            <span class="keywordflow">if</span>(m_Count != 0)</div><div class="line"><a name="l03367"></a><span class="lineno"> 3367</span>&#160;            {</div><div class="line"><a name="l03368"></a><span class="lineno"> 3368</span>&#160;                memcpy(newArray, m_pArray, m_Count * <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l03369"></a><span class="lineno"> 3369</span>&#160;            }</div><div class="line"><a name="l03370"></a><span class="lineno"> 3370</span>&#160;            VmaFree(m_Allocator.m_pCallbacks, m_pArray);</div><div class="line"><a name="l03371"></a><span class="lineno"> 3371</span>&#160;            m_Capacity = newCapacity;</div><div class="line"><a name="l03372"></a><span class="lineno"> 3372</span>&#160;            m_pArray = newArray;</div><div class="line"><a name="l03373"></a><span class="lineno"> 3373</span>&#160;        }</div><div class="line"><a name="l03374"></a><span class="lineno"> 3374</span>&#160;    }</div><div class="line"><a name="l03375"></a><span class="lineno"> 3375</span>&#160;</div><div class="line"><a name="l03376"></a><span class="lineno"> 3376</span>&#160;    <span class="keywordtype">void</span> resize(<span class="keywordtype">size_t</span> newCount, <span class="keywordtype">bool</span> freeMemory = <span class="keyword">false</span>)</div><div class="line"><a name="l03377"></a><span class="lineno"> 3377</span>&#160;    {</div><div class="line"><a name="l03378"></a><span class="lineno"> 3378</span>&#160;        <span class="keywordtype">size_t</span> newCapacity = m_Capacity;</div><div class="line"><a name="l03379"></a><span class="lineno"> 3379</span>&#160;        <span class="keywordflow">if</span>(newCount &gt; m_Capacity)</div><div class="line"><a name="l03380"></a><span class="lineno"> 3380</span>&#160;        {</div><div class="line"><a name="l03381"></a><span class="lineno"> 3381</span>&#160;            newCapacity = VMA_MAX(newCount, VMA_MAX(m_Capacity * 3 / 2, (<span class="keywordtype">size_t</span>)8));</div><div class="line"><a name="l03382"></a><span class="lineno"> 3382</span>&#160;        }</div><div class="line"><a name="l03383"></a><span class="lineno"> 3383</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span>(freeMemory)</div><div class="line"><a name="l03384"></a><span class="lineno"> 3384</span>&#160;        {</div><div class="line"><a name="l03385"></a><span class="lineno"> 3385</span>&#160;            newCapacity = newCount;</div><div class="line"><a name="l03386"></a><span class="lineno"> 3386</span>&#160;        }</div><div class="line"><a name="l03387"></a><span class="lineno"> 3387</span>&#160;</div><div class="line"><a name="l03388"></a><span class="lineno"> 3388</span>&#160;        <span class="keywordflow">if</span>(newCapacity != m_Capacity)</div><div class="line"><a name="l03389"></a><span class="lineno"> 3389</span>&#160;        {</div><div class="line"><a name="l03390"></a><span class="lineno"> 3390</span>&#160;            T* <span class="keyword">const</span> newArray = newCapacity ? VmaAllocateArray&lt;T&gt;(m_Allocator.m_pCallbacks, newCapacity) : VMA_NULL;</div><div class="line"><a name="l03391"></a><span class="lineno"> 3391</span>&#160;            <span class="keyword">const</span> <span class="keywordtype">size_t</span> elementsToCopy = VMA_MIN(m_Count, newCount);</div><div class="line"><a name="l03392"></a><span class="lineno"> 3392</span>&#160;            <span class="keywordflow">if</span>(elementsToCopy != 0)</div><div class="line"><a name="l03393"></a><span class="lineno"> 3393</span>&#160;            {</div><div class="line"><a name="l03394"></a><span class="lineno"> 3394</span>&#160;                memcpy(newArray, m_pArray, elementsToCopy * <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l03395"></a><span class="lineno"> 3395</span>&#160;            }</div><div class="line"><a name="l03396"></a><span class="lineno"> 3396</span>&#160;            VmaFree(m_Allocator.m_pCallbacks, m_pArray);</div><div class="line"><a name="l03397"></a><span class="lineno"> 3397</span>&#160;            m_Capacity = newCapacity;</div><div class="line"><a name="l03398"></a><span class="lineno"> 3398</span>&#160;            m_pArray = newArray;</div><div class="line"><a name="l03399"></a><span class="lineno"> 3399</span>&#160;        }</div><div class="line"><a name="l03400"></a><span class="lineno"> 3400</span>&#160;</div><div class="line"><a name="l03401"></a><span class="lineno"> 3401</span>&#160;        m_Count = newCount;</div><div class="line"><a name="l03402"></a><span class="lineno"> 3402</span>&#160;    }</div><div class="line"><a name="l03403"></a><span class="lineno"> 3403</span>&#160;</div><div class="line"><a name="l03404"></a><span class="lineno"> 3404</span>&#160;    <span class="keywordtype">void</span> clear(<span class="keywordtype">bool</span> freeMemory = <span class="keyword">false</span>)</div><div class="line"><a name="l03405"></a><span class="lineno"> 3405</span>&#160;    {</div><div class="line"><a name="l03406"></a><span class="lineno"> 3406</span>&#160;        resize(0, freeMemory);</div><div class="line"><a name="l03407"></a><span class="lineno"> 3407</span>&#160;    }</div><div class="line"><a name="l03408"></a><span class="lineno"> 3408</span>&#160;</div><div class="line"><a name="l03409"></a><span class="lineno"> 3409</span>&#160;    <span class="keywordtype">void</span> insert(<span class="keywordtype">size_t</span> index, <span class="keyword">const</span> T&amp; src)</div><div class="line"><a name="l03410"></a><span class="lineno"> 3410</span>&#160;    {</div><div class="line"><a name="l03411"></a><span class="lineno"> 3411</span>&#160;        VMA_HEAVY_ASSERT(index &lt;= m_Count);</div><div class="line"><a name="l03412"></a><span class="lineno"> 3412</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">size_t</span> oldCount = size();</div><div class="line"><a name="l03413"></a><span class="lineno"> 3413</span>&#160;        resize(oldCount + 1);</div><div class="line"><a name="l03414"></a><span class="lineno"> 3414</span>&#160;        <span class="keywordflow">if</span>(index &lt; oldCount)</div><div class="line"><a name="l03415"></a><span class="lineno"> 3415</span>&#160;        {</div><div class="line"><a name="l03416"></a><span class="lineno"> 3416</span>&#160;            memmove(m_pArray + (index + 1), m_pArray + index, (oldCount - index) * <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l03417"></a><span class="lineno"> 3417</span>&#160;        }</div><div class="line"><a name="l03418"></a><span class="lineno"> 3418</span>&#160;        m_pArray[index] = src;</div><div class="line"><a name="l03419"></a><span class="lineno"> 3419</span>&#160;    }</div><div class="line"><a name="l03420"></a><span class="lineno"> 3420</span>&#160;</div><div class="line"><a name="l03421"></a><span class="lineno"> 3421</span>&#160;    <span class="keywordtype">void</span> <span class="keyword">remove</span>(<span class="keywordtype">size_t</span> index)</div><div class="line"><a name="l03422"></a><span class="lineno"> 3422</span>&#160;    {</div><div class="line"><a name="l03423"></a><span class="lineno"> 3423</span>&#160;        VMA_HEAVY_ASSERT(index &lt; m_Count);</div><div class="line"><a name="l03424"></a><span class="lineno"> 3424</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">size_t</span> oldCount = size();</div><div class="line"><a name="l03425"></a><span class="lineno"> 3425</span>&#160;        <span class="keywordflow">if</span>(index &lt; oldCount - 1)</div><div class="line"><a name="l03426"></a><span class="lineno"> 3426</span>&#160;        {</div><div class="line"><a name="l03427"></a><span class="lineno"> 3427</span>&#160;            memmove(m_pArray + index, m_pArray + (index + 1), (oldCount - index - 1) * <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l03428"></a><span class="lineno"> 3428</span>&#160;        }</div><div class="line"><a name="l03429"></a><span class="lineno"> 3429</span>&#160;        resize(oldCount - 1);</div><div class="line"><a name="l03430"></a><span class="lineno"> 3430</span>&#160;    }</div><div class="line"><a name="l03431"></a><span class="lineno"> 3431</span>&#160;</div><div class="line"><a name="l03432"></a><span class="lineno"> 3432</span>&#160;    <span class="keywordtype">void</span> push_back(<span class="keyword">const</span> T&amp; src)</div><div class="line"><a name="l03433"></a><span class="lineno"> 3433</span>&#160;    {</div><div class="line"><a name="l03434"></a><span class="lineno"> 3434</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">size_t</span> newIndex = size();</div><div class="line"><a name="l03435"></a><span class="lineno"> 3435</span>&#160;        resize(newIndex + 1);</div><div class="line"><a name="l03436"></a><span class="lineno"> 3436</span>&#160;        m_pArray[newIndex] = src;</div><div class="line"><a name="l03437"></a><span class="lineno"> 3437</span>&#160;    }</div><div class="line"><a name="l03438"></a><span class="lineno"> 3438</span>&#160;</div><div class="line"><a name="l03439"></a><span class="lineno"> 3439</span>&#160;    <span class="keywordtype">void</span> pop_back()</div><div class="line"><a name="l03440"></a><span class="lineno"> 3440</span>&#160;    {</div><div class="line"><a name="l03441"></a><span class="lineno"> 3441</span>&#160;        VMA_HEAVY_ASSERT(m_Count &gt; 0);</div><div class="line"><a name="l03442"></a><span class="lineno"> 3442</span>&#160;        resize(size() - 1);</div><div class="line"><a name="l03443"></a><span class="lineno"> 3443</span>&#160;    }</div><div class="line"><a name="l03444"></a><span class="lineno"> 3444</span>&#160;</div><div class="line"><a name="l03445"></a><span class="lineno"> 3445</span>&#160;    <span class="keywordtype">void</span> push_front(<span class="keyword">const</span> T&amp; src)</div><div class="line"><a name="l03446"></a><span class="lineno"> 3446</span>&#160;    {</div><div class="line"><a name="l03447"></a><span class="lineno"> 3447</span>&#160;        insert(0, src);</div><div class="line"><a name="l03448"></a><span class="lineno"> 3448</span>&#160;    }</div><div class="line"><a name="l03449"></a><span class="lineno"> 3449</span>&#160;</div><div class="line"><a name="l03450"></a><span class="lineno"> 3450</span>&#160;    <span class="keywordtype">void</span> pop_front()</div><div class="line"><a name="l03451"></a><span class="lineno"> 3451</span>&#160;    {</div><div class="line"><a name="l03452"></a><span class="lineno"> 3452</span>&#160;        VMA_HEAVY_ASSERT(m_Count &gt; 0);</div><div class="line"><a name="l03453"></a><span class="lineno"> 3453</span>&#160;        <span class="keyword">remove</span>(0);</div><div class="line"><a name="l03454"></a><span class="lineno"> 3454</span>&#160;    }</div><div class="line"><a name="l03455"></a><span class="lineno"> 3455</span>&#160;</div><div class="line"><a name="l03456"></a><span class="lineno"> 3456</span>&#160;    <span class="keyword">typedef</span> T* iterator;</div><div class="line"><a name="l03457"></a><span class="lineno"> 3457</span>&#160;</div><div class="line"><a name="l03458"></a><span class="lineno"> 3458</span>&#160;    iterator begin() { <span class="keywordflow">return</span> m_pArray; }</div><div class="line"><a name="l03459"></a><span class="lineno"> 3459</span>&#160;    iterator end() { <span class="keywordflow">return</span> m_pArray + m_Count; }</div><div class="line"><a name="l03460"></a><span class="lineno"> 3460</span>&#160;</div><div class="line"><a name="l03461"></a><span class="lineno"> 3461</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l03462"></a><span class="lineno"> 3462</span>&#160;    AllocatorT m_Allocator;</div><div class="line"><a name="l03463"></a><span class="lineno"> 3463</span>&#160;    T* m_pArray;</div><div class="line"><a name="l03464"></a><span class="lineno"> 3464</span>&#160;    <span class="keywordtype">size_t</span> m_Count;</div><div class="line"><a name="l03465"></a><span class="lineno"> 3465</span>&#160;    <span class="keywordtype">size_t</span> m_Capacity;</div><div class="line"><a name="l03466"></a><span class="lineno"> 3466</span>&#160;};</div><div class="line"><a name="l03467"></a><span class="lineno"> 3467</span>&#160;</div><div class="line"><a name="l03468"></a><span class="lineno"> 3468</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> allocatorT&gt;</div><div class="line"><a name="l03469"></a><span class="lineno"> 3469</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> VmaVectorInsert(VmaVector&lt;T, allocatorT&gt;&amp; vec, <span class="keywordtype">size_t</span> index, <span class="keyword">const</span> T&amp; item)</div><div class="line"><a name="l03470"></a><span class="lineno"> 3470</span>&#160;{</div><div class="line"><a name="l03471"></a><span class="lineno"> 3471</span>&#160;    vec.insert(index, item);</div><div class="line"><a name="l03472"></a><span class="lineno"> 3472</span>&#160;}</div><div class="line"><a name="l03473"></a><span class="lineno"> 3473</span>&#160;</div><div class="line"><a name="l03474"></a><span class="lineno"> 3474</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> allocatorT&gt;</div><div class="line"><a name="l03475"></a><span class="lineno"> 3475</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> VmaVectorRemove(VmaVector&lt;T, allocatorT&gt;&amp; vec, <span class="keywordtype">size_t</span> index)</div><div class="line"><a name="l03476"></a><span class="lineno"> 3476</span>&#160;{</div><div class="line"><a name="l03477"></a><span class="lineno"> 3477</span>&#160;    vec.remove(index);</div><div class="line"><a name="l03478"></a><span class="lineno"> 3478</span>&#160;}</div><div class="line"><a name="l03479"></a><span class="lineno"> 3479</span>&#160;</div><div class="line"><a name="l03480"></a><span class="lineno"> 3480</span>&#160;<span class="preprocessor">#endif // #if VMA_USE_STL_VECTOR</span></div><div class="line"><a name="l03481"></a><span class="lineno"> 3481</span>&#160;</div><div class="line"><a name="l03482"></a><span class="lineno"> 3482</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CmpLess, <span class="keyword">typename</span> VectorT&gt;</div><div class="line"><a name="l03483"></a><span class="lineno"> 3483</span>&#160;<span class="keywordtype">size_t</span> VmaVectorInsertSorted(VectorT&amp; vector, <span class="keyword">const</span> <span class="keyword">typename</span> VectorT::value_type&amp; value)</div><div class="line"><a name="l03484"></a><span class="lineno"> 3484</span>&#160;{</div><div class="line"><a name="l03485"></a><span class="lineno"> 3485</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> indexToInsert = VmaBinaryFindFirstNotLess(</div><div class="line"><a name="l03486"></a><span class="lineno"> 3486</span>&#160;        vector.data(),</div><div class="line"><a name="l03487"></a><span class="lineno"> 3487</span>&#160;        vector.data() + vector.size(),</div><div class="line"><a name="l03488"></a><span class="lineno"> 3488</span>&#160;        value,</div><div class="line"><a name="l03489"></a><span class="lineno"> 3489</span>&#160;        CmpLess()) - vector.data();</div><div class="line"><a name="l03490"></a><span class="lineno"> 3490</span>&#160;    VmaVectorInsert(vector, indexToInsert, value);</div><div class="line"><a name="l03491"></a><span class="lineno"> 3491</span>&#160;    <span class="keywordflow">return</span> indexToInsert;</div><div class="line"><a name="l03492"></a><span class="lineno"> 3492</span>&#160;}</div><div class="line"><a name="l03493"></a><span class="lineno"> 3493</span>&#160;</div><div class="line"><a name="l03494"></a><span class="lineno"> 3494</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CmpLess, <span class="keyword">typename</span> VectorT&gt;</div><div class="line"><a name="l03495"></a><span class="lineno"> 3495</span>&#160;<span class="keywordtype">bool</span> VmaVectorRemoveSorted(VectorT&amp; vector, <span class="keyword">const</span> <span class="keyword">typename</span> VectorT::value_type&amp; value)</div><div class="line"><a name="l03496"></a><span class="lineno"> 3496</span>&#160;{</div><div class="line"><a name="l03497"></a><span class="lineno"> 3497</span>&#160;    CmpLess comparator;</div><div class="line"><a name="l03498"></a><span class="lineno"> 3498</span>&#160;    <span class="keyword">typename</span> VectorT::iterator it = VmaBinaryFindFirstNotLess(</div><div class="line"><a name="l03499"></a><span class="lineno"> 3499</span>&#160;        vector.begin(),</div><div class="line"><a name="l03500"></a><span class="lineno"> 3500</span>&#160;        vector.end(),</div><div class="line"><a name="l03501"></a><span class="lineno"> 3501</span>&#160;        value,</div><div class="line"><a name="l03502"></a><span class="lineno"> 3502</span>&#160;        comparator);</div><div class="line"><a name="l03503"></a><span class="lineno"> 3503</span>&#160;    <span class="keywordflow">if</span>((it != vector.end()) &amp;&amp; !comparator(*it, value) &amp;&amp; !comparator(value, *it))</div><div class="line"><a name="l03504"></a><span class="lineno"> 3504</span>&#160;    {</div><div class="line"><a name="l03505"></a><span class="lineno"> 3505</span>&#160;        <span class="keywordtype">size_t</span> indexToRemove = it - vector.begin();</div><div class="line"><a name="l03506"></a><span class="lineno"> 3506</span>&#160;        VmaVectorRemove(vector, indexToRemove);</div><div class="line"><a name="l03507"></a><span class="lineno"> 3507</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l03508"></a><span class="lineno"> 3508</span>&#160;    }</div><div class="line"><a name="l03509"></a><span class="lineno"> 3509</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l03510"></a><span class="lineno"> 3510</span>&#160;}</div><div class="line"><a name="l03511"></a><span class="lineno"> 3511</span>&#160;</div><div class="line"><a name="l03512"></a><span class="lineno"> 3512</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CmpLess, <span class="keyword">typename</span> IterT, <span class="keyword">typename</span> KeyT&gt;</div><div class="line"><a name="l03513"></a><span class="lineno"> 3513</span>&#160;IterT VmaVectorFindSorted(<span class="keyword">const</span> IterT&amp; beg, <span class="keyword">const</span> IterT&amp; end, <span class="keyword">const</span> KeyT&amp; value)</div><div class="line"><a name="l03514"></a><span class="lineno"> 3514</span>&#160;{</div><div class="line"><a name="l03515"></a><span class="lineno"> 3515</span>&#160;    CmpLess comparator;</div><div class="line"><a name="l03516"></a><span class="lineno"> 3516</span>&#160;    <span class="keyword">typename</span> IterT it = VmaBinaryFindFirstNotLess&lt;CmpLess, IterT, KeyT&gt;(</div><div class="line"><a name="l03517"></a><span class="lineno"> 3517</span>&#160;        beg, end, value, comparator);</div><div class="line"><a name="l03518"></a><span class="lineno"> 3518</span>&#160;    <span class="keywordflow">if</span>(it == end ||</div><div class="line"><a name="l03519"></a><span class="lineno"> 3519</span>&#160;        !comparator(*it, value) &amp;&amp; !comparator(value, *it))</div><div class="line"><a name="l03520"></a><span class="lineno"> 3520</span>&#160;    {</div><div class="line"><a name="l03521"></a><span class="lineno"> 3521</span>&#160;        <span class="keywordflow">return</span> it;</div><div class="line"><a name="l03522"></a><span class="lineno"> 3522</span>&#160;    }</div><div class="line"><a name="l03523"></a><span class="lineno"> 3523</span>&#160;    <span class="keywordflow">return</span> end;</div><div class="line"><a name="l03524"></a><span class="lineno"> 3524</span>&#160;}</div><div class="line"><a name="l03525"></a><span class="lineno"> 3525</span>&#160;</div><div class="line"><a name="l03527"></a><span class="lineno"> 3527</span>&#160;<span class="comment">// class VmaPoolAllocator</span></div><div class="line"><a name="l03528"></a><span class="lineno"> 3528</span>&#160;</div><div class="line"><a name="l03529"></a><span class="lineno"> 3529</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l03530"></a><span class="lineno"> 3530</span>&#160;<span class="comment">Allocator for objects of type T using a list of arrays (pools) to speed up</span></div><div class="line"><a name="l03531"></a><span class="lineno"> 3531</span>&#160;<span class="comment">allocation. Number of elements that can be allocated is not bounded because</span></div><div class="line"><a name="l03532"></a><span class="lineno"> 3532</span>&#160;<span class="comment">allocator can create multiple blocks.</span></div><div class="line"><a name="l03533"></a><span class="lineno"> 3533</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l03534"></a><span class="lineno"> 3534</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03535"></a><span class="lineno"> 3535</span>&#160;<span class="keyword">class </span>VmaPoolAllocator</div><div class="line"><a name="l03536"></a><span class="lineno"> 3536</span>&#160;{</div><div class="line"><a name="l03537"></a><span class="lineno"> 3537</span>&#160;    VMA_CLASS_NO_COPY(VmaPoolAllocator)</div><div class="line"><a name="l03538"></a><span class="lineno"> 3538</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l03539"></a><span class="lineno"> 3539</span>&#160;    VmaPoolAllocator(<span class="keyword">const</span> VkAllocationCallbacks* pAllocationCallbacks, <span class="keywordtype">size_t</span> itemsPerBlock);</div><div class="line"><a name="l03540"></a><span class="lineno"> 3540</span>&#160;    ~VmaPoolAllocator();</div><div class="line"><a name="l03541"></a><span class="lineno"> 3541</span>&#160;    <span class="keywordtype">void</span> Clear();</div><div class="line"><a name="l03542"></a><span class="lineno"> 3542</span>&#160;    T* Alloc();</div><div class="line"><a name="l03543"></a><span class="lineno"> 3543</span>&#160;    <span class="keywordtype">void</span> Free(T* ptr);</div><div class="line"><a name="l03544"></a><span class="lineno"> 3544</span>&#160;</div><div class="line"><a name="l03545"></a><span class="lineno"> 3545</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l03546"></a><span class="lineno"> 3546</span>&#160;    <span class="keyword">union </span>Item</div><div class="line"><a name="l03547"></a><span class="lineno"> 3547</span>&#160;    {</div><div class="line"><a name="l03548"></a><span class="lineno"> 3548</span>&#160;        uint32_t NextFreeIndex;</div><div class="line"><a name="l03549"></a><span class="lineno"> 3549</span>&#160;        T Value;</div><div class="line"><a name="l03550"></a><span class="lineno"> 3550</span>&#160;    };</div><div class="line"><a name="l03551"></a><span class="lineno"> 3551</span>&#160;</div><div class="line"><a name="l03552"></a><span class="lineno"> 3552</span>&#160;    <span class="keyword">struct </span>ItemBlock</div><div class="line"><a name="l03553"></a><span class="lineno"> 3553</span>&#160;    {</div><div class="line"><a name="l03554"></a><span class="lineno"> 3554</span>&#160;        Item* pItems;</div><div class="line"><a name="l03555"></a><span class="lineno"> 3555</span>&#160;        uint32_t FirstFreeIndex;</div><div class="line"><a name="l03556"></a><span class="lineno"> 3556</span>&#160;    };</div><div class="line"><a name="l03557"></a><span class="lineno"> 3557</span>&#160;    </div><div class="line"><a name="l03558"></a><span class="lineno"> 3558</span>&#160;    <span class="keyword">const</span> VkAllocationCallbacks* m_pAllocationCallbacks;</div><div class="line"><a name="l03559"></a><span class="lineno"> 3559</span>&#160;    <span class="keywordtype">size_t</span> m_ItemsPerBlock;</div><div class="line"><a name="l03560"></a><span class="lineno"> 3560</span>&#160;    VmaVector&lt; ItemBlock, VmaStlAllocator&lt;ItemBlock&gt; &gt; m_ItemBlocks;</div><div class="line"><a name="l03561"></a><span class="lineno"> 3561</span>&#160;</div><div class="line"><a name="l03562"></a><span class="lineno"> 3562</span>&#160;    ItemBlock&amp; CreateNewBlock();</div><div class="line"><a name="l03563"></a><span class="lineno"> 3563</span>&#160;};</div><div class="line"><a name="l03564"></a><span class="lineno"> 3564</span>&#160;</div><div class="line"><a name="l03565"></a><span class="lineno"> 3565</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03566"></a><span class="lineno"> 3566</span>&#160;VmaPoolAllocator&lt;T&gt;::VmaPoolAllocator(<span class="keyword">const</span> VkAllocationCallbacks* pAllocationCallbacks, <span class="keywordtype">size_t</span> itemsPerBlock) :</div><div class="line"><a name="l03567"></a><span class="lineno"> 3567</span>&#160;    m_pAllocationCallbacks(pAllocationCallbacks),</div><div class="line"><a name="l03568"></a><span class="lineno"> 3568</span>&#160;    m_ItemsPerBlock(itemsPerBlock),</div><div class="line"><a name="l03569"></a><span class="lineno"> 3569</span>&#160;    m_ItemBlocks(VmaStlAllocator&lt;ItemBlock&gt;(pAllocationCallbacks))</div><div class="line"><a name="l03570"></a><span class="lineno"> 3570</span>&#160;{</div><div class="line"><a name="l03571"></a><span class="lineno"> 3571</span>&#160;    VMA_ASSERT(itemsPerBlock &gt; 0);</div><div class="line"><a name="l03572"></a><span class="lineno"> 3572</span>&#160;}</div><div class="line"><a name="l03573"></a><span class="lineno"> 3573</span>&#160;</div><div class="line"><a name="l03574"></a><span class="lineno"> 3574</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03575"></a><span class="lineno"> 3575</span>&#160;VmaPoolAllocator&lt;T&gt;::~VmaPoolAllocator()</div><div class="line"><a name="l03576"></a><span class="lineno"> 3576</span>&#160;{</div><div class="line"><a name="l03577"></a><span class="lineno"> 3577</span>&#160;    Clear();</div><div class="line"><a name="l03578"></a><span class="lineno"> 3578</span>&#160;}</div><div class="line"><a name="l03579"></a><span class="lineno"> 3579</span>&#160;</div><div class="line"><a name="l03580"></a><span class="lineno"> 3580</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03581"></a><span class="lineno"> 3581</span>&#160;<span class="keywordtype">void</span> VmaPoolAllocator&lt;T&gt;::Clear()</div><div class="line"><a name="l03582"></a><span class="lineno"> 3582</span>&#160;{</div><div class="line"><a name="l03583"></a><span class="lineno"> 3583</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_ItemBlocks.size(); i--; )</div><div class="line"><a name="l03584"></a><span class="lineno"> 3584</span>&#160;        vma_delete_array(m_pAllocationCallbacks, m_ItemBlocks[i].pItems, m_ItemsPerBlock);</div><div class="line"><a name="l03585"></a><span class="lineno"> 3585</span>&#160;    m_ItemBlocks.clear();</div><div class="line"><a name="l03586"></a><span class="lineno"> 3586</span>&#160;}</div><div class="line"><a name="l03587"></a><span class="lineno"> 3587</span>&#160;</div><div class="line"><a name="l03588"></a><span class="lineno"> 3588</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03589"></a><span class="lineno"> 3589</span>&#160;T* VmaPoolAllocator&lt;T&gt;::Alloc()</div><div class="line"><a name="l03590"></a><span class="lineno"> 3590</span>&#160;{</div><div class="line"><a name="l03591"></a><span class="lineno"> 3591</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_ItemBlocks.size(); i--; )</div><div class="line"><a name="l03592"></a><span class="lineno"> 3592</span>&#160;    {</div><div class="line"><a name="l03593"></a><span class="lineno"> 3593</span>&#160;        ItemBlock&amp; block = m_ItemBlocks[i];</div><div class="line"><a name="l03594"></a><span class="lineno"> 3594</span>&#160;        <span class="comment">// This block has some free items: Use first one.</span></div><div class="line"><a name="l03595"></a><span class="lineno"> 3595</span>&#160;        <span class="keywordflow">if</span>(block.FirstFreeIndex != UINT32_MAX)</div><div class="line"><a name="l03596"></a><span class="lineno"> 3596</span>&#160;        {</div><div class="line"><a name="l03597"></a><span class="lineno"> 3597</span>&#160;            Item* <span class="keyword">const</span> pItem = &amp;block.pItems[block.FirstFreeIndex];</div><div class="line"><a name="l03598"></a><span class="lineno"> 3598</span>&#160;            block.FirstFreeIndex = pItem-&gt;NextFreeIndex;</div><div class="line"><a name="l03599"></a><span class="lineno"> 3599</span>&#160;            <span class="keywordflow">return</span> &amp;pItem-&gt;Value;</div><div class="line"><a name="l03600"></a><span class="lineno"> 3600</span>&#160;        }</div><div class="line"><a name="l03601"></a><span class="lineno"> 3601</span>&#160;    }</div><div class="line"><a name="l03602"></a><span class="lineno"> 3602</span>&#160;</div><div class="line"><a name="l03603"></a><span class="lineno"> 3603</span>&#160;    <span class="comment">// No block has free item: Create new one and use it.</span></div><div class="line"><a name="l03604"></a><span class="lineno"> 3604</span>&#160;    ItemBlock&amp; newBlock = CreateNewBlock();</div><div class="line"><a name="l03605"></a><span class="lineno"> 3605</span>&#160;    Item* <span class="keyword">const</span> pItem = &amp;newBlock.pItems[0];</div><div class="line"><a name="l03606"></a><span class="lineno"> 3606</span>&#160;    newBlock.FirstFreeIndex = pItem-&gt;NextFreeIndex;</div><div class="line"><a name="l03607"></a><span class="lineno"> 3607</span>&#160;    <span class="keywordflow">return</span> &amp;pItem-&gt;Value;</div><div class="line"><a name="l03608"></a><span class="lineno"> 3608</span>&#160;}</div><div class="line"><a name="l03609"></a><span class="lineno"> 3609</span>&#160;</div><div class="line"><a name="l03610"></a><span class="lineno"> 3610</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03611"></a><span class="lineno"> 3611</span>&#160;<span class="keywordtype">void</span> VmaPoolAllocator&lt;T&gt;::Free(T* ptr)</div><div class="line"><a name="l03612"></a><span class="lineno"> 3612</span>&#160;{</div><div class="line"><a name="l03613"></a><span class="lineno"> 3613</span>&#160;    <span class="comment">// Search all memory blocks to find ptr.</span></div><div class="line"><a name="l03614"></a><span class="lineno"> 3614</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; m_ItemBlocks.size(); ++i)</div><div class="line"><a name="l03615"></a><span class="lineno"> 3615</span>&#160;    {</div><div class="line"><a name="l03616"></a><span class="lineno"> 3616</span>&#160;        ItemBlock&amp; block = m_ItemBlocks[i];</div><div class="line"><a name="l03617"></a><span class="lineno"> 3617</span>&#160;        </div><div class="line"><a name="l03618"></a><span class="lineno"> 3618</span>&#160;        <span class="comment">// Casting to union.</span></div><div class="line"><a name="l03619"></a><span class="lineno"> 3619</span>&#160;        Item* pItemPtr;</div><div class="line"><a name="l03620"></a><span class="lineno"> 3620</span>&#160;        memcpy(&amp;pItemPtr, &amp;ptr, <span class="keyword">sizeof</span>(pItemPtr));</div><div class="line"><a name="l03621"></a><span class="lineno"> 3621</span>&#160;        </div><div class="line"><a name="l03622"></a><span class="lineno"> 3622</span>&#160;        <span class="comment">// Check if pItemPtr is in address range of this block.</span></div><div class="line"><a name="l03623"></a><span class="lineno"> 3623</span>&#160;        <span class="keywordflow">if</span>((pItemPtr &gt;= block.pItems) &amp;&amp; (pItemPtr &lt; block.pItems + m_ItemsPerBlock))</div><div class="line"><a name="l03624"></a><span class="lineno"> 3624</span>&#160;        {</div><div class="line"><a name="l03625"></a><span class="lineno"> 3625</span>&#160;            <span class="keyword">const</span> uint32_t index = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(pItemPtr - block.pItems);</div><div class="line"><a name="l03626"></a><span class="lineno"> 3626</span>&#160;            pItemPtr-&gt;NextFreeIndex = block.FirstFreeIndex;</div><div class="line"><a name="l03627"></a><span class="lineno"> 3627</span>&#160;            block.FirstFreeIndex = index;</div><div class="line"><a name="l03628"></a><span class="lineno"> 3628</span>&#160;            <span class="keywordflow">return</span>;</div><div class="line"><a name="l03629"></a><span class="lineno"> 3629</span>&#160;        }</div><div class="line"><a name="l03630"></a><span class="lineno"> 3630</span>&#160;    }</div><div class="line"><a name="l03631"></a><span class="lineno"> 3631</span>&#160;    VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Pointer doesn&#39;t belong to this memory pool.&quot;</span>);</div><div class="line"><a name="l03632"></a><span class="lineno"> 3632</span>&#160;}</div><div class="line"><a name="l03633"></a><span class="lineno"> 3633</span>&#160;</div><div class="line"><a name="l03634"></a><span class="lineno"> 3634</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03635"></a><span class="lineno"> 3635</span>&#160;<span class="keyword">typename</span> VmaPoolAllocator&lt;T&gt;::ItemBlock&amp; VmaPoolAllocator&lt;T&gt;::CreateNewBlock()</div><div class="line"><a name="l03636"></a><span class="lineno"> 3636</span>&#160;{</div><div class="line"><a name="l03637"></a><span class="lineno"> 3637</span>&#160;    ItemBlock newBlock = {</div><div class="line"><a name="l03638"></a><span class="lineno"> 3638</span>&#160;        vma_new_array(m_pAllocationCallbacks, Item, m_ItemsPerBlock), 0 };</div><div class="line"><a name="l03639"></a><span class="lineno"> 3639</span>&#160;</div><div class="line"><a name="l03640"></a><span class="lineno"> 3640</span>&#160;    m_ItemBlocks.push_back(newBlock);</div><div class="line"><a name="l03641"></a><span class="lineno"> 3641</span>&#160;</div><div class="line"><a name="l03642"></a><span class="lineno"> 3642</span>&#160;    <span class="comment">// Setup singly-linked list of all free items in this block.</span></div><div class="line"><a name="l03643"></a><span class="lineno"> 3643</span>&#160;    <span class="keywordflow">for</span>(uint32_t i = 0; i &lt; m_ItemsPerBlock - 1; ++i)</div><div class="line"><a name="l03644"></a><span class="lineno"> 3644</span>&#160;        newBlock.pItems[i].NextFreeIndex = i + 1;</div><div class="line"><a name="l03645"></a><span class="lineno"> 3645</span>&#160;    newBlock.pItems[m_ItemsPerBlock - 1].NextFreeIndex = UINT32_MAX;</div><div class="line"><a name="l03646"></a><span class="lineno"> 3646</span>&#160;    <span class="keywordflow">return</span> m_ItemBlocks.back();</div><div class="line"><a name="l03647"></a><span class="lineno"> 3647</span>&#160;}</div><div class="line"><a name="l03648"></a><span class="lineno"> 3648</span>&#160;</div><div class="line"><a name="l03650"></a><span class="lineno"> 3650</span>&#160;<span class="comment">// class VmaRawList, VmaList</span></div><div class="line"><a name="l03651"></a><span class="lineno"> 3651</span>&#160;</div><div class="line"><a name="l03652"></a><span class="lineno"> 3652</span>&#160;<span class="preprocessor">#if VMA_USE_STL_LIST</span></div><div class="line"><a name="l03653"></a><span class="lineno"> 3653</span>&#160;</div><div class="line"><a name="l03654"></a><span class="lineno"> 3654</span>&#160;<span class="preprocessor">#define VmaList std::list</span></div><div class="line"><a name="l03655"></a><span class="lineno"> 3655</span>&#160;</div><div class="line"><a name="l03656"></a><span class="lineno"> 3656</span>&#160;<span class="preprocessor">#else // #if VMA_USE_STL_LIST</span></div><div class="line"><a name="l03657"></a><span class="lineno"> 3657</span>&#160;</div><div class="line"><a name="l03658"></a><span class="lineno"> 3658</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03659"></a><span class="lineno"> 3659</span>&#160;<span class="keyword">struct </span>VmaListItem</div><div class="line"><a name="l03660"></a><span class="lineno"> 3660</span>&#160;{</div><div class="line"><a name="l03661"></a><span class="lineno"> 3661</span>&#160;    VmaListItem* pPrev;</div><div class="line"><a name="l03662"></a><span class="lineno"> 3662</span>&#160;    VmaListItem* pNext;</div><div class="line"><a name="l03663"></a><span class="lineno"> 3663</span>&#160;    T Value;</div><div class="line"><a name="l03664"></a><span class="lineno"> 3664</span>&#160;};</div><div class="line"><a name="l03665"></a><span class="lineno"> 3665</span>&#160;</div><div class="line"><a name="l03666"></a><span class="lineno"> 3666</span>&#160;<span class="comment">// Doubly linked list.</span></div><div class="line"><a name="l03667"></a><span class="lineno"> 3667</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03668"></a><span class="lineno"> 3668</span>&#160;<span class="keyword">class </span>VmaRawList</div><div class="line"><a name="l03669"></a><span class="lineno"> 3669</span>&#160;{</div><div class="line"><a name="l03670"></a><span class="lineno"> 3670</span>&#160;    VMA_CLASS_NO_COPY(VmaRawList)</div><div class="line"><a name="l03671"></a><span class="lineno"> 3671</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l03672"></a><span class="lineno"> 3672</span>&#160;    <span class="keyword">typedef</span> VmaListItem&lt;T&gt; ItemType;</div><div class="line"><a name="l03673"></a><span class="lineno"> 3673</span>&#160;</div><div class="line"><a name="l03674"></a><span class="lineno"> 3674</span>&#160;    VmaRawList(<span class="keyword">const</span> VkAllocationCallbacks* pAllocationCallbacks);</div><div class="line"><a name="l03675"></a><span class="lineno"> 3675</span>&#160;    ~VmaRawList();</div><div class="line"><a name="l03676"></a><span class="lineno"> 3676</span>&#160;    <span class="keywordtype">void</span> Clear();</div><div class="line"><a name="l03677"></a><span class="lineno"> 3677</span>&#160;</div><div class="line"><a name="l03678"></a><span class="lineno"> 3678</span>&#160;    <span class="keywordtype">size_t</span> GetCount()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_Count; }</div><div class="line"><a name="l03679"></a><span class="lineno"> 3679</span>&#160;    <span class="keywordtype">bool</span> IsEmpty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_Count == 0; }</div><div class="line"><a name="l03680"></a><span class="lineno"> 3680</span>&#160;</div><div class="line"><a name="l03681"></a><span class="lineno"> 3681</span>&#160;    ItemType* Front() { <span class="keywordflow">return</span> m_pFront; }</div><div class="line"><a name="l03682"></a><span class="lineno"> 3682</span>&#160;    <span class="keyword">const</span> ItemType* Front()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_pFront; }</div><div class="line"><a name="l03683"></a><span class="lineno"> 3683</span>&#160;    ItemType* Back() { <span class="keywordflow">return</span> m_pBack; }</div><div class="line"><a name="l03684"></a><span class="lineno"> 3684</span>&#160;    <span class="keyword">const</span> ItemType* Back()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_pBack; }</div><div class="line"><a name="l03685"></a><span class="lineno"> 3685</span>&#160;</div><div class="line"><a name="l03686"></a><span class="lineno"> 3686</span>&#160;    ItemType* PushBack();</div><div class="line"><a name="l03687"></a><span class="lineno"> 3687</span>&#160;    ItemType* PushFront();</div><div class="line"><a name="l03688"></a><span class="lineno"> 3688</span>&#160;    ItemType* PushBack(<span class="keyword">const</span> T&amp; value);</div><div class="line"><a name="l03689"></a><span class="lineno"> 3689</span>&#160;    ItemType* PushFront(<span class="keyword">const</span> T&amp; value);</div><div class="line"><a name="l03690"></a><span class="lineno"> 3690</span>&#160;    <span class="keywordtype">void</span> PopBack();</div><div class="line"><a name="l03691"></a><span class="lineno"> 3691</span>&#160;    <span class="keywordtype">void</span> PopFront();</div><div class="line"><a name="l03692"></a><span class="lineno"> 3692</span>&#160;    </div><div class="line"><a name="l03693"></a><span class="lineno"> 3693</span>&#160;    <span class="comment">// Item can be null - it means PushBack.</span></div><div class="line"><a name="l03694"></a><span class="lineno"> 3694</span>&#160;    ItemType* InsertBefore(ItemType* pItem);</div><div class="line"><a name="l03695"></a><span class="lineno"> 3695</span>&#160;    <span class="comment">// Item can be null - it means PushFront.</span></div><div class="line"><a name="l03696"></a><span class="lineno"> 3696</span>&#160;    ItemType* InsertAfter(ItemType* pItem);</div><div class="line"><a name="l03697"></a><span class="lineno"> 3697</span>&#160;</div><div class="line"><a name="l03698"></a><span class="lineno"> 3698</span>&#160;    ItemType* InsertBefore(ItemType* pItem, <span class="keyword">const</span> T&amp; value);</div><div class="line"><a name="l03699"></a><span class="lineno"> 3699</span>&#160;    ItemType* InsertAfter(ItemType* pItem, <span class="keyword">const</span> T&amp; value);</div><div class="line"><a name="l03700"></a><span class="lineno"> 3700</span>&#160;</div><div class="line"><a name="l03701"></a><span class="lineno"> 3701</span>&#160;    <span class="keywordtype">void</span> Remove(ItemType* pItem);</div><div class="line"><a name="l03702"></a><span class="lineno"> 3702</span>&#160;</div><div class="line"><a name="l03703"></a><span class="lineno"> 3703</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l03704"></a><span class="lineno"> 3704</span>&#160;    <span class="keyword">const</span> VkAllocationCallbacks* <span class="keyword">const</span> m_pAllocationCallbacks;</div><div class="line"><a name="l03705"></a><span class="lineno"> 3705</span>&#160;    VmaPoolAllocator&lt;ItemType&gt; m_ItemAllocator;</div><div class="line"><a name="l03706"></a><span class="lineno"> 3706</span>&#160;    ItemType* m_pFront;</div><div class="line"><a name="l03707"></a><span class="lineno"> 3707</span>&#160;    ItemType* m_pBack;</div><div class="line"><a name="l03708"></a><span class="lineno"> 3708</span>&#160;    <span class="keywordtype">size_t</span> m_Count;</div><div class="line"><a name="l03709"></a><span class="lineno"> 3709</span>&#160;};</div><div class="line"><a name="l03710"></a><span class="lineno"> 3710</span>&#160;</div><div class="line"><a name="l03711"></a><span class="lineno"> 3711</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03712"></a><span class="lineno"> 3712</span>&#160;VmaRawList&lt;T&gt;::VmaRawList(<span class="keyword">const</span> VkAllocationCallbacks* pAllocationCallbacks) :</div><div class="line"><a name="l03713"></a><span class="lineno"> 3713</span>&#160;    m_pAllocationCallbacks(pAllocationCallbacks),</div><div class="line"><a name="l03714"></a><span class="lineno"> 3714</span>&#160;    m_ItemAllocator(pAllocationCallbacks, 128),</div><div class="line"><a name="l03715"></a><span class="lineno"> 3715</span>&#160;    m_pFront(VMA_NULL),</div><div class="line"><a name="l03716"></a><span class="lineno"> 3716</span>&#160;    m_pBack(VMA_NULL),</div><div class="line"><a name="l03717"></a><span class="lineno"> 3717</span>&#160;    m_Count(0)</div><div class="line"><a name="l03718"></a><span class="lineno"> 3718</span>&#160;{</div><div class="line"><a name="l03719"></a><span class="lineno"> 3719</span>&#160;}</div><div class="line"><a name="l03720"></a><span class="lineno"> 3720</span>&#160;</div><div class="line"><a name="l03721"></a><span class="lineno"> 3721</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03722"></a><span class="lineno"> 3722</span>&#160;VmaRawList&lt;T&gt;::~VmaRawList()</div><div class="line"><a name="l03723"></a><span class="lineno"> 3723</span>&#160;{</div><div class="line"><a name="l03724"></a><span class="lineno"> 3724</span>&#160;    <span class="comment">// Intentionally not calling Clear, because that would be unnecessary</span></div><div class="line"><a name="l03725"></a><span class="lineno"> 3725</span>&#160;    <span class="comment">// computations to return all items to m_ItemAllocator as free.</span></div><div class="line"><a name="l03726"></a><span class="lineno"> 3726</span>&#160;}</div><div class="line"><a name="l03727"></a><span class="lineno"> 3727</span>&#160;</div><div class="line"><a name="l03728"></a><span class="lineno"> 3728</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03729"></a><span class="lineno"> 3729</span>&#160;<span class="keywordtype">void</span> VmaRawList&lt;T&gt;::Clear()</div><div class="line"><a name="l03730"></a><span class="lineno"> 3730</span>&#160;{</div><div class="line"><a name="l03731"></a><span class="lineno"> 3731</span>&#160;    <span class="keywordflow">if</span>(IsEmpty() == <span class="keyword">false</span>)</div><div class="line"><a name="l03732"></a><span class="lineno"> 3732</span>&#160;    {</div><div class="line"><a name="l03733"></a><span class="lineno"> 3733</span>&#160;        ItemType* pItem = m_pBack;</div><div class="line"><a name="l03734"></a><span class="lineno"> 3734</span>&#160;        <span class="keywordflow">while</span>(pItem != VMA_NULL)</div><div class="line"><a name="l03735"></a><span class="lineno"> 3735</span>&#160;        {</div><div class="line"><a name="l03736"></a><span class="lineno"> 3736</span>&#160;            ItemType* <span class="keyword">const</span> pPrevItem = pItem-&gt;pPrev;</div><div class="line"><a name="l03737"></a><span class="lineno"> 3737</span>&#160;            m_ItemAllocator.Free(pItem);</div><div class="line"><a name="l03738"></a><span class="lineno"> 3738</span>&#160;            pItem = pPrevItem;</div><div class="line"><a name="l03739"></a><span class="lineno"> 3739</span>&#160;        }</div><div class="line"><a name="l03740"></a><span class="lineno"> 3740</span>&#160;        m_pFront = VMA_NULL;</div><div class="line"><a name="l03741"></a><span class="lineno"> 3741</span>&#160;        m_pBack = VMA_NULL;</div><div class="line"><a name="l03742"></a><span class="lineno"> 3742</span>&#160;        m_Count = 0;</div><div class="line"><a name="l03743"></a><span class="lineno"> 3743</span>&#160;    }</div><div class="line"><a name="l03744"></a><span class="lineno"> 3744</span>&#160;}</div><div class="line"><a name="l03745"></a><span class="lineno"> 3745</span>&#160;</div><div class="line"><a name="l03746"></a><span class="lineno"> 3746</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03747"></a><span class="lineno"> 3747</span>&#160;VmaListItem&lt;T&gt;* VmaRawList&lt;T&gt;::PushBack()</div><div class="line"><a name="l03748"></a><span class="lineno"> 3748</span>&#160;{</div><div class="line"><a name="l03749"></a><span class="lineno"> 3749</span>&#160;    ItemType* <span class="keyword">const</span> pNewItem = m_ItemAllocator.Alloc();</div><div class="line"><a name="l03750"></a><span class="lineno"> 3750</span>&#160;    pNewItem-&gt;pNext = VMA_NULL;</div><div class="line"><a name="l03751"></a><span class="lineno"> 3751</span>&#160;    <span class="keywordflow">if</span>(IsEmpty())</div><div class="line"><a name="l03752"></a><span class="lineno"> 3752</span>&#160;    {</div><div class="line"><a name="l03753"></a><span class="lineno"> 3753</span>&#160;        pNewItem-&gt;pPrev = VMA_NULL;</div><div class="line"><a name="l03754"></a><span class="lineno"> 3754</span>&#160;        m_pFront = pNewItem;</div><div class="line"><a name="l03755"></a><span class="lineno"> 3755</span>&#160;        m_pBack = pNewItem;</div><div class="line"><a name="l03756"></a><span class="lineno"> 3756</span>&#160;        m_Count = 1;</div><div class="line"><a name="l03757"></a><span class="lineno"> 3757</span>&#160;    }</div><div class="line"><a name="l03758"></a><span class="lineno"> 3758</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l03759"></a><span class="lineno"> 3759</span>&#160;    {</div><div class="line"><a name="l03760"></a><span class="lineno"> 3760</span>&#160;        pNewItem-&gt;pPrev = m_pBack;</div><div class="line"><a name="l03761"></a><span class="lineno"> 3761</span>&#160;        m_pBack-&gt;pNext = pNewItem;</div><div class="line"><a name="l03762"></a><span class="lineno"> 3762</span>&#160;        m_pBack = pNewItem;</div><div class="line"><a name="l03763"></a><span class="lineno"> 3763</span>&#160;        ++m_Count;</div><div class="line"><a name="l03764"></a><span class="lineno"> 3764</span>&#160;    }</div><div class="line"><a name="l03765"></a><span class="lineno"> 3765</span>&#160;    <span class="keywordflow">return</span> pNewItem;</div><div class="line"><a name="l03766"></a><span class="lineno"> 3766</span>&#160;}</div><div class="line"><a name="l03767"></a><span class="lineno"> 3767</span>&#160;</div><div class="line"><a name="l03768"></a><span class="lineno"> 3768</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03769"></a><span class="lineno"> 3769</span>&#160;VmaListItem&lt;T&gt;* VmaRawList&lt;T&gt;::PushFront()</div><div class="line"><a name="l03770"></a><span class="lineno"> 3770</span>&#160;{</div><div class="line"><a name="l03771"></a><span class="lineno"> 3771</span>&#160;    ItemType* <span class="keyword">const</span> pNewItem = m_ItemAllocator.Alloc();</div><div class="line"><a name="l03772"></a><span class="lineno"> 3772</span>&#160;    pNewItem-&gt;pPrev = VMA_NULL;</div><div class="line"><a name="l03773"></a><span class="lineno"> 3773</span>&#160;    <span class="keywordflow">if</span>(IsEmpty())</div><div class="line"><a name="l03774"></a><span class="lineno"> 3774</span>&#160;    {</div><div class="line"><a name="l03775"></a><span class="lineno"> 3775</span>&#160;        pNewItem-&gt;pNext = VMA_NULL;</div><div class="line"><a name="l03776"></a><span class="lineno"> 3776</span>&#160;        m_pFront = pNewItem;</div><div class="line"><a name="l03777"></a><span class="lineno"> 3777</span>&#160;        m_pBack = pNewItem;</div><div class="line"><a name="l03778"></a><span class="lineno"> 3778</span>&#160;        m_Count = 1;</div><div class="line"><a name="l03779"></a><span class="lineno"> 3779</span>&#160;    }</div><div class="line"><a name="l03780"></a><span class="lineno"> 3780</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l03781"></a><span class="lineno"> 3781</span>&#160;    {</div><div class="line"><a name="l03782"></a><span class="lineno"> 3782</span>&#160;        pNewItem-&gt;pNext = m_pFront;</div><div class="line"><a name="l03783"></a><span class="lineno"> 3783</span>&#160;        m_pFront-&gt;pPrev = pNewItem;</div><div class="line"><a name="l03784"></a><span class="lineno"> 3784</span>&#160;        m_pFront = pNewItem;</div><div class="line"><a name="l03785"></a><span class="lineno"> 3785</span>&#160;        ++m_Count;</div><div class="line"><a name="l03786"></a><span class="lineno"> 3786</span>&#160;    }</div><div class="line"><a name="l03787"></a><span class="lineno"> 3787</span>&#160;    <span class="keywordflow">return</span> pNewItem;</div><div class="line"><a name="l03788"></a><span class="lineno"> 3788</span>&#160;}</div><div class="line"><a name="l03789"></a><span class="lineno"> 3789</span>&#160;</div><div class="line"><a name="l03790"></a><span class="lineno"> 3790</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03791"></a><span class="lineno"> 3791</span>&#160;VmaListItem&lt;T&gt;* VmaRawList&lt;T&gt;::PushBack(<span class="keyword">const</span> T&amp; value)</div><div class="line"><a name="l03792"></a><span class="lineno"> 3792</span>&#160;{</div><div class="line"><a name="l03793"></a><span class="lineno"> 3793</span>&#160;    ItemType* <span class="keyword">const</span> pNewItem = PushBack();</div><div class="line"><a name="l03794"></a><span class="lineno"> 3794</span>&#160;    pNewItem-&gt;Value = value;</div><div class="line"><a name="l03795"></a><span class="lineno"> 3795</span>&#160;    <span class="keywordflow">return</span> pNewItem;</div><div class="line"><a name="l03796"></a><span class="lineno"> 3796</span>&#160;}</div><div class="line"><a name="l03797"></a><span class="lineno"> 3797</span>&#160;</div><div class="line"><a name="l03798"></a><span class="lineno"> 3798</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03799"></a><span class="lineno"> 3799</span>&#160;VmaListItem&lt;T&gt;* VmaRawList&lt;T&gt;::PushFront(<span class="keyword">const</span> T&amp; value)</div><div class="line"><a name="l03800"></a><span class="lineno"> 3800</span>&#160;{</div><div class="line"><a name="l03801"></a><span class="lineno"> 3801</span>&#160;    ItemType* <span class="keyword">const</span> pNewItem = PushFront();</div><div class="line"><a name="l03802"></a><span class="lineno"> 3802</span>&#160;    pNewItem-&gt;Value = value;</div><div class="line"><a name="l03803"></a><span class="lineno"> 3803</span>&#160;    <span class="keywordflow">return</span> pNewItem;</div><div class="line"><a name="l03804"></a><span class="lineno"> 3804</span>&#160;}</div><div class="line"><a name="l03805"></a><span class="lineno"> 3805</span>&#160;</div><div class="line"><a name="l03806"></a><span class="lineno"> 3806</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03807"></a><span class="lineno"> 3807</span>&#160;<span class="keywordtype">void</span> VmaRawList&lt;T&gt;::PopBack()</div><div class="line"><a name="l03808"></a><span class="lineno"> 3808</span>&#160;{</div><div class="line"><a name="l03809"></a><span class="lineno"> 3809</span>&#160;    VMA_HEAVY_ASSERT(m_Count &gt; 0);</div><div class="line"><a name="l03810"></a><span class="lineno"> 3810</span>&#160;    ItemType* <span class="keyword">const</span> pBackItem = m_pBack;</div><div class="line"><a name="l03811"></a><span class="lineno"> 3811</span>&#160;    ItemType* <span class="keyword">const</span> pPrevItem = pBackItem-&gt;pPrev;</div><div class="line"><a name="l03812"></a><span class="lineno"> 3812</span>&#160;    <span class="keywordflow">if</span>(pPrevItem != VMA_NULL)</div><div class="line"><a name="l03813"></a><span class="lineno"> 3813</span>&#160;    {</div><div class="line"><a name="l03814"></a><span class="lineno"> 3814</span>&#160;        pPrevItem-&gt;pNext = VMA_NULL;</div><div class="line"><a name="l03815"></a><span class="lineno"> 3815</span>&#160;    }</div><div class="line"><a name="l03816"></a><span class="lineno"> 3816</span>&#160;    m_pBack = pPrevItem;</div><div class="line"><a name="l03817"></a><span class="lineno"> 3817</span>&#160;    m_ItemAllocator.Free(pBackItem);</div><div class="line"><a name="l03818"></a><span class="lineno"> 3818</span>&#160;    --m_Count;</div><div class="line"><a name="l03819"></a><span class="lineno"> 3819</span>&#160;}</div><div class="line"><a name="l03820"></a><span class="lineno"> 3820</span>&#160;</div><div class="line"><a name="l03821"></a><span class="lineno"> 3821</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03822"></a><span class="lineno"> 3822</span>&#160;<span class="keywordtype">void</span> VmaRawList&lt;T&gt;::PopFront()</div><div class="line"><a name="l03823"></a><span class="lineno"> 3823</span>&#160;{</div><div class="line"><a name="l03824"></a><span class="lineno"> 3824</span>&#160;    VMA_HEAVY_ASSERT(m_Count &gt; 0);</div><div class="line"><a name="l03825"></a><span class="lineno"> 3825</span>&#160;    ItemType* <span class="keyword">const</span> pFrontItem = m_pFront;</div><div class="line"><a name="l03826"></a><span class="lineno"> 3826</span>&#160;    ItemType* <span class="keyword">const</span> pNextItem = pFrontItem-&gt;pNext;</div><div class="line"><a name="l03827"></a><span class="lineno"> 3827</span>&#160;    <span class="keywordflow">if</span>(pNextItem != VMA_NULL)</div><div class="line"><a name="l03828"></a><span class="lineno"> 3828</span>&#160;    {</div><div class="line"><a name="l03829"></a><span class="lineno"> 3829</span>&#160;        pNextItem-&gt;pPrev = VMA_NULL;</div><div class="line"><a name="l03830"></a><span class="lineno"> 3830</span>&#160;    }</div><div class="line"><a name="l03831"></a><span class="lineno"> 3831</span>&#160;    m_pFront = pNextItem;</div><div class="line"><a name="l03832"></a><span class="lineno"> 3832</span>&#160;    m_ItemAllocator.Free(pFrontItem);</div><div class="line"><a name="l03833"></a><span class="lineno"> 3833</span>&#160;    --m_Count;</div><div class="line"><a name="l03834"></a><span class="lineno"> 3834</span>&#160;}</div><div class="line"><a name="l03835"></a><span class="lineno"> 3835</span>&#160;</div><div class="line"><a name="l03836"></a><span class="lineno"> 3836</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03837"></a><span class="lineno"> 3837</span>&#160;<span class="keywordtype">void</span> VmaRawList&lt;T&gt;::Remove(ItemType* pItem)</div><div class="line"><a name="l03838"></a><span class="lineno"> 3838</span>&#160;{</div><div class="line"><a name="l03839"></a><span class="lineno"> 3839</span>&#160;    VMA_HEAVY_ASSERT(pItem != VMA_NULL);</div><div class="line"><a name="l03840"></a><span class="lineno"> 3840</span>&#160;    VMA_HEAVY_ASSERT(m_Count &gt; 0);</div><div class="line"><a name="l03841"></a><span class="lineno"> 3841</span>&#160;</div><div class="line"><a name="l03842"></a><span class="lineno"> 3842</span>&#160;    <span class="keywordflow">if</span>(pItem-&gt;pPrev != VMA_NULL)</div><div class="line"><a name="l03843"></a><span class="lineno"> 3843</span>&#160;    {</div><div class="line"><a name="l03844"></a><span class="lineno"> 3844</span>&#160;        pItem-&gt;pPrev-&gt;pNext = pItem-&gt;pNext;</div><div class="line"><a name="l03845"></a><span class="lineno"> 3845</span>&#160;    }</div><div class="line"><a name="l03846"></a><span class="lineno"> 3846</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l03847"></a><span class="lineno"> 3847</span>&#160;    {</div><div class="line"><a name="l03848"></a><span class="lineno"> 3848</span>&#160;        VMA_HEAVY_ASSERT(m_pFront == pItem);</div><div class="line"><a name="l03849"></a><span class="lineno"> 3849</span>&#160;        m_pFront = pItem-&gt;pNext;</div><div class="line"><a name="l03850"></a><span class="lineno"> 3850</span>&#160;    }</div><div class="line"><a name="l03851"></a><span class="lineno"> 3851</span>&#160;</div><div class="line"><a name="l03852"></a><span class="lineno"> 3852</span>&#160;    <span class="keywordflow">if</span>(pItem-&gt;pNext != VMA_NULL)</div><div class="line"><a name="l03853"></a><span class="lineno"> 3853</span>&#160;    {</div><div class="line"><a name="l03854"></a><span class="lineno"> 3854</span>&#160;        pItem-&gt;pNext-&gt;pPrev = pItem-&gt;pPrev;</div><div class="line"><a name="l03855"></a><span class="lineno"> 3855</span>&#160;    }</div><div class="line"><a name="l03856"></a><span class="lineno"> 3856</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l03857"></a><span class="lineno"> 3857</span>&#160;    {</div><div class="line"><a name="l03858"></a><span class="lineno"> 3858</span>&#160;        VMA_HEAVY_ASSERT(m_pBack == pItem);</div><div class="line"><a name="l03859"></a><span class="lineno"> 3859</span>&#160;        m_pBack = pItem-&gt;pPrev;</div><div class="line"><a name="l03860"></a><span class="lineno"> 3860</span>&#160;    }</div><div class="line"><a name="l03861"></a><span class="lineno"> 3861</span>&#160;</div><div class="line"><a name="l03862"></a><span class="lineno"> 3862</span>&#160;    m_ItemAllocator.Free(pItem);</div><div class="line"><a name="l03863"></a><span class="lineno"> 3863</span>&#160;    --m_Count;</div><div class="line"><a name="l03864"></a><span class="lineno"> 3864</span>&#160;}</div><div class="line"><a name="l03865"></a><span class="lineno"> 3865</span>&#160;</div><div class="line"><a name="l03866"></a><span class="lineno"> 3866</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03867"></a><span class="lineno"> 3867</span>&#160;VmaListItem&lt;T&gt;* VmaRawList&lt;T&gt;::InsertBefore(ItemType* pItem)</div><div class="line"><a name="l03868"></a><span class="lineno"> 3868</span>&#160;{</div><div class="line"><a name="l03869"></a><span class="lineno"> 3869</span>&#160;    <span class="keywordflow">if</span>(pItem != VMA_NULL)</div><div class="line"><a name="l03870"></a><span class="lineno"> 3870</span>&#160;    {</div><div class="line"><a name="l03871"></a><span class="lineno"> 3871</span>&#160;        ItemType* <span class="keyword">const</span> prevItem = pItem-&gt;pPrev;</div><div class="line"><a name="l03872"></a><span class="lineno"> 3872</span>&#160;        ItemType* <span class="keyword">const</span> newItem = m_ItemAllocator.Alloc();</div><div class="line"><a name="l03873"></a><span class="lineno"> 3873</span>&#160;        newItem-&gt;pPrev = prevItem;</div><div class="line"><a name="l03874"></a><span class="lineno"> 3874</span>&#160;        newItem-&gt;pNext = pItem;</div><div class="line"><a name="l03875"></a><span class="lineno"> 3875</span>&#160;        pItem-&gt;pPrev = newItem;</div><div class="line"><a name="l03876"></a><span class="lineno"> 3876</span>&#160;        <span class="keywordflow">if</span>(prevItem != VMA_NULL)</div><div class="line"><a name="l03877"></a><span class="lineno"> 3877</span>&#160;        {</div><div class="line"><a name="l03878"></a><span class="lineno"> 3878</span>&#160;            prevItem-&gt;pNext = newItem;</div><div class="line"><a name="l03879"></a><span class="lineno"> 3879</span>&#160;        }</div><div class="line"><a name="l03880"></a><span class="lineno"> 3880</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l03881"></a><span class="lineno"> 3881</span>&#160;        {</div><div class="line"><a name="l03882"></a><span class="lineno"> 3882</span>&#160;            VMA_HEAVY_ASSERT(m_pFront == pItem);</div><div class="line"><a name="l03883"></a><span class="lineno"> 3883</span>&#160;            m_pFront = newItem;</div><div class="line"><a name="l03884"></a><span class="lineno"> 3884</span>&#160;        }</div><div class="line"><a name="l03885"></a><span class="lineno"> 3885</span>&#160;        ++m_Count;</div><div class="line"><a name="l03886"></a><span class="lineno"> 3886</span>&#160;        <span class="keywordflow">return</span> newItem;</div><div class="line"><a name="l03887"></a><span class="lineno"> 3887</span>&#160;    }</div><div class="line"><a name="l03888"></a><span class="lineno"> 3888</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l03889"></a><span class="lineno"> 3889</span>&#160;        <span class="keywordflow">return</span> PushBack();</div><div class="line"><a name="l03890"></a><span class="lineno"> 3890</span>&#160;}</div><div class="line"><a name="l03891"></a><span class="lineno"> 3891</span>&#160;</div><div class="line"><a name="l03892"></a><span class="lineno"> 3892</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03893"></a><span class="lineno"> 3893</span>&#160;VmaListItem&lt;T&gt;* VmaRawList&lt;T&gt;::InsertAfter(ItemType* pItem)</div><div class="line"><a name="l03894"></a><span class="lineno"> 3894</span>&#160;{</div><div class="line"><a name="l03895"></a><span class="lineno"> 3895</span>&#160;    <span class="keywordflow">if</span>(pItem != VMA_NULL)</div><div class="line"><a name="l03896"></a><span class="lineno"> 3896</span>&#160;    {</div><div class="line"><a name="l03897"></a><span class="lineno"> 3897</span>&#160;        ItemType* <span class="keyword">const</span> nextItem = pItem-&gt;pNext;</div><div class="line"><a name="l03898"></a><span class="lineno"> 3898</span>&#160;        ItemType* <span class="keyword">const</span> newItem = m_ItemAllocator.Alloc();</div><div class="line"><a name="l03899"></a><span class="lineno"> 3899</span>&#160;        newItem-&gt;pNext = nextItem;</div><div class="line"><a name="l03900"></a><span class="lineno"> 3900</span>&#160;        newItem-&gt;pPrev = pItem;</div><div class="line"><a name="l03901"></a><span class="lineno"> 3901</span>&#160;        pItem-&gt;pNext = newItem;</div><div class="line"><a name="l03902"></a><span class="lineno"> 3902</span>&#160;        <span class="keywordflow">if</span>(nextItem != VMA_NULL)</div><div class="line"><a name="l03903"></a><span class="lineno"> 3903</span>&#160;        {</div><div class="line"><a name="l03904"></a><span class="lineno"> 3904</span>&#160;            nextItem-&gt;pPrev = newItem;</div><div class="line"><a name="l03905"></a><span class="lineno"> 3905</span>&#160;        }</div><div class="line"><a name="l03906"></a><span class="lineno"> 3906</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l03907"></a><span class="lineno"> 3907</span>&#160;        {</div><div class="line"><a name="l03908"></a><span class="lineno"> 3908</span>&#160;            VMA_HEAVY_ASSERT(m_pBack == pItem);</div><div class="line"><a name="l03909"></a><span class="lineno"> 3909</span>&#160;            m_pBack = newItem;</div><div class="line"><a name="l03910"></a><span class="lineno"> 3910</span>&#160;        }</div><div class="line"><a name="l03911"></a><span class="lineno"> 3911</span>&#160;        ++m_Count;</div><div class="line"><a name="l03912"></a><span class="lineno"> 3912</span>&#160;        <span class="keywordflow">return</span> newItem;</div><div class="line"><a name="l03913"></a><span class="lineno"> 3913</span>&#160;    }</div><div class="line"><a name="l03914"></a><span class="lineno"> 3914</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l03915"></a><span class="lineno"> 3915</span>&#160;        <span class="keywordflow">return</span> PushFront();</div><div class="line"><a name="l03916"></a><span class="lineno"> 3916</span>&#160;}</div><div class="line"><a name="l03917"></a><span class="lineno"> 3917</span>&#160;</div><div class="line"><a name="l03918"></a><span class="lineno"> 3918</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03919"></a><span class="lineno"> 3919</span>&#160;VmaListItem&lt;T&gt;* VmaRawList&lt;T&gt;::InsertBefore(ItemType* pItem, <span class="keyword">const</span> T&amp; value)</div><div class="line"><a name="l03920"></a><span class="lineno"> 3920</span>&#160;{</div><div class="line"><a name="l03921"></a><span class="lineno"> 3921</span>&#160;    ItemType* <span class="keyword">const</span> newItem = InsertBefore(pItem);</div><div class="line"><a name="l03922"></a><span class="lineno"> 3922</span>&#160;    newItem-&gt;Value = value;</div><div class="line"><a name="l03923"></a><span class="lineno"> 3923</span>&#160;    <span class="keywordflow">return</span> newItem;</div><div class="line"><a name="l03924"></a><span class="lineno"> 3924</span>&#160;}</div><div class="line"><a name="l03925"></a><span class="lineno"> 3925</span>&#160;</div><div class="line"><a name="l03926"></a><span class="lineno"> 3926</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03927"></a><span class="lineno"> 3927</span>&#160;VmaListItem&lt;T&gt;* VmaRawList&lt;T&gt;::InsertAfter(ItemType* pItem, <span class="keyword">const</span> T&amp; value)</div><div class="line"><a name="l03928"></a><span class="lineno"> 3928</span>&#160;{</div><div class="line"><a name="l03929"></a><span class="lineno"> 3929</span>&#160;    ItemType* <span class="keyword">const</span> newItem = InsertAfter(pItem);</div><div class="line"><a name="l03930"></a><span class="lineno"> 3930</span>&#160;    newItem-&gt;Value = value;</div><div class="line"><a name="l03931"></a><span class="lineno"> 3931</span>&#160;    <span class="keywordflow">return</span> newItem;</div><div class="line"><a name="l03932"></a><span class="lineno"> 3932</span>&#160;}</div><div class="line"><a name="l03933"></a><span class="lineno"> 3933</span>&#160;</div><div class="line"><a name="l03934"></a><span class="lineno"> 3934</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> AllocatorT&gt;</div><div class="line"><a name="l03935"></a><span class="lineno"> 3935</span>&#160;<span class="keyword">class </span>VmaList</div><div class="line"><a name="l03936"></a><span class="lineno"> 3936</span>&#160;{</div><div class="line"><a name="l03937"></a><span class="lineno"> 3937</span>&#160;    VMA_CLASS_NO_COPY(VmaList)</div><div class="line"><a name="l03938"></a><span class="lineno"> 3938</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l03939"></a><span class="lineno"> 3939</span>&#160;    <span class="keyword">class </span>iterator</div><div class="line"><a name="l03940"></a><span class="lineno"> 3940</span>&#160;    {</div><div class="line"><a name="l03941"></a><span class="lineno"> 3941</span>&#160;    <span class="keyword">public</span>:</div><div class="line"><a name="l03942"></a><span class="lineno"> 3942</span>&#160;        iterator() :</div><div class="line"><a name="l03943"></a><span class="lineno"> 3943</span>&#160;            m_pList(VMA_NULL),</div><div class="line"><a name="l03944"></a><span class="lineno"> 3944</span>&#160;            m_pItem(VMA_NULL)</div><div class="line"><a name="l03945"></a><span class="lineno"> 3945</span>&#160;        {</div><div class="line"><a name="l03946"></a><span class="lineno"> 3946</span>&#160;        }</div><div class="line"><a name="l03947"></a><span class="lineno"> 3947</span>&#160;</div><div class="line"><a name="l03948"></a><span class="lineno"> 3948</span>&#160;        T&amp; operator*()<span class="keyword"> const</span></div><div class="line"><a name="l03949"></a><span class="lineno"> 3949</span>&#160;<span class="keyword">        </span>{</div><div class="line"><a name="l03950"></a><span class="lineno"> 3950</span>&#160;            VMA_HEAVY_ASSERT(m_pItem != VMA_NULL);</div><div class="line"><a name="l03951"></a><span class="lineno"> 3951</span>&#160;            <span class="keywordflow">return</span> m_pItem-&gt;Value;</div><div class="line"><a name="l03952"></a><span class="lineno"> 3952</span>&#160;        }</div><div class="line"><a name="l03953"></a><span class="lineno"> 3953</span>&#160;        T* operator-&gt;()<span class="keyword"> const</span></div><div class="line"><a name="l03954"></a><span class="lineno"> 3954</span>&#160;<span class="keyword">        </span>{</div><div class="line"><a name="l03955"></a><span class="lineno"> 3955</span>&#160;            VMA_HEAVY_ASSERT(m_pItem != VMA_NULL);</div><div class="line"><a name="l03956"></a><span class="lineno"> 3956</span>&#160;            <span class="keywordflow">return</span> &amp;m_pItem-&gt;Value;</div><div class="line"><a name="l03957"></a><span class="lineno"> 3957</span>&#160;        }</div><div class="line"><a name="l03958"></a><span class="lineno"> 3958</span>&#160;</div><div class="line"><a name="l03959"></a><span class="lineno"> 3959</span>&#160;        iterator&amp; operator++()</div><div class="line"><a name="l03960"></a><span class="lineno"> 3960</span>&#160;        {</div><div class="line"><a name="l03961"></a><span class="lineno"> 3961</span>&#160;            VMA_HEAVY_ASSERT(m_pItem != VMA_NULL);</div><div class="line"><a name="l03962"></a><span class="lineno"> 3962</span>&#160;            m_pItem = m_pItem-&gt;pNext;</div><div class="line"><a name="l03963"></a><span class="lineno"> 3963</span>&#160;            <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l03964"></a><span class="lineno"> 3964</span>&#160;        }</div><div class="line"><a name="l03965"></a><span class="lineno"> 3965</span>&#160;        iterator&amp; operator--()</div><div class="line"><a name="l03966"></a><span class="lineno"> 3966</span>&#160;        {</div><div class="line"><a name="l03967"></a><span class="lineno"> 3967</span>&#160;            <span class="keywordflow">if</span>(m_pItem != VMA_NULL)</div><div class="line"><a name="l03968"></a><span class="lineno"> 3968</span>&#160;            {</div><div class="line"><a name="l03969"></a><span class="lineno"> 3969</span>&#160;                m_pItem = m_pItem-&gt;pPrev;</div><div class="line"><a name="l03970"></a><span class="lineno"> 3970</span>&#160;            }</div><div class="line"><a name="l03971"></a><span class="lineno"> 3971</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l03972"></a><span class="lineno"> 3972</span>&#160;            {</div><div class="line"><a name="l03973"></a><span class="lineno"> 3973</span>&#160;                VMA_HEAVY_ASSERT(!m_pList-&gt;IsEmpty());</div><div class="line"><a name="l03974"></a><span class="lineno"> 3974</span>&#160;                m_pItem = m_pList-&gt;Back();</div><div class="line"><a name="l03975"></a><span class="lineno"> 3975</span>&#160;            }</div><div class="line"><a name="l03976"></a><span class="lineno"> 3976</span>&#160;            <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l03977"></a><span class="lineno"> 3977</span>&#160;        }</div><div class="line"><a name="l03978"></a><span class="lineno"> 3978</span>&#160;</div><div class="line"><a name="l03979"></a><span class="lineno"> 3979</span>&#160;        iterator operator++(<span class="keywordtype">int</span>)</div><div class="line"><a name="l03980"></a><span class="lineno"> 3980</span>&#160;        {</div><div class="line"><a name="l03981"></a><span class="lineno"> 3981</span>&#160;            iterator result = *<span class="keyword">this</span>;</div><div class="line"><a name="l03982"></a><span class="lineno"> 3982</span>&#160;            ++*<span class="keyword">this</span>;</div><div class="line"><a name="l03983"></a><span class="lineno"> 3983</span>&#160;            <span class="keywordflow">return</span> result;</div><div class="line"><a name="l03984"></a><span class="lineno"> 3984</span>&#160;        }</div><div class="line"><a name="l03985"></a><span class="lineno"> 3985</span>&#160;        iterator operator--(<span class="keywordtype">int</span>)</div><div class="line"><a name="l03986"></a><span class="lineno"> 3986</span>&#160;        {</div><div class="line"><a name="l03987"></a><span class="lineno"> 3987</span>&#160;            iterator result = *<span class="keyword">this</span>;</div><div class="line"><a name="l03988"></a><span class="lineno"> 3988</span>&#160;            --*<span class="keyword">this</span>;</div><div class="line"><a name="l03989"></a><span class="lineno"> 3989</span>&#160;            <span class="keywordflow">return</span> result;</div><div class="line"><a name="l03990"></a><span class="lineno"> 3990</span>&#160;        }</div><div class="line"><a name="l03991"></a><span class="lineno"> 3991</span>&#160;</div><div class="line"><a name="l03992"></a><span class="lineno"> 3992</span>&#160;        <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> iterator&amp; rhs)<span class="keyword"> const</span></div><div class="line"><a name="l03993"></a><span class="lineno"> 3993</span>&#160;<span class="keyword">        </span>{</div><div class="line"><a name="l03994"></a><span class="lineno"> 3994</span>&#160;            VMA_HEAVY_ASSERT(m_pList == rhs.m_pList);</div><div class="line"><a name="l03995"></a><span class="lineno"> 3995</span>&#160;            <span class="keywordflow">return</span> m_pItem == rhs.m_pItem;</div><div class="line"><a name="l03996"></a><span class="lineno"> 3996</span>&#160;        }</div><div class="line"><a name="l03997"></a><span class="lineno"> 3997</span>&#160;        <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> iterator&amp; rhs)<span class="keyword"> const</span></div><div class="line"><a name="l03998"></a><span class="lineno"> 3998</span>&#160;<span class="keyword">        </span>{</div><div class="line"><a name="l03999"></a><span class="lineno"> 3999</span>&#160;            VMA_HEAVY_ASSERT(m_pList == rhs.m_pList);</div><div class="line"><a name="l04000"></a><span class="lineno"> 4000</span>&#160;            <span class="keywordflow">return</span> m_pItem != rhs.m_pItem;</div><div class="line"><a name="l04001"></a><span class="lineno"> 4001</span>&#160;        }</div><div class="line"><a name="l04002"></a><span class="lineno"> 4002</span>&#160;        </div><div class="line"><a name="l04003"></a><span class="lineno"> 4003</span>&#160;    <span class="keyword">private</span>:</div><div class="line"><a name="l04004"></a><span class="lineno"> 4004</span>&#160;        VmaRawList&lt;T&gt;* m_pList;</div><div class="line"><a name="l04005"></a><span class="lineno"> 4005</span>&#160;        VmaListItem&lt;T&gt;* m_pItem;</div><div class="line"><a name="l04006"></a><span class="lineno"> 4006</span>&#160;</div><div class="line"><a name="l04007"></a><span class="lineno"> 4007</span>&#160;        iterator(VmaRawList&lt;T&gt;* pList, VmaListItem&lt;T&gt;* pItem) :</div><div class="line"><a name="l04008"></a><span class="lineno"> 4008</span>&#160;            m_pList(pList),</div><div class="line"><a name="l04009"></a><span class="lineno"> 4009</span>&#160;            m_pItem(pItem)</div><div class="line"><a name="l04010"></a><span class="lineno"> 4010</span>&#160;        {</div><div class="line"><a name="l04011"></a><span class="lineno"> 4011</span>&#160;        }</div><div class="line"><a name="l04012"></a><span class="lineno"> 4012</span>&#160;</div><div class="line"><a name="l04013"></a><span class="lineno"> 4013</span>&#160;        <span class="keyword">friend</span> <span class="keyword">class </span>VmaList&lt;T, AllocatorT&gt;;</div><div class="line"><a name="l04014"></a><span class="lineno"> 4014</span>&#160;    };</div><div class="line"><a name="l04015"></a><span class="lineno"> 4015</span>&#160;</div><div class="line"><a name="l04016"></a><span class="lineno"> 4016</span>&#160;    <span class="keyword">class </span>const_iterator</div><div class="line"><a name="l04017"></a><span class="lineno"> 4017</span>&#160;    {</div><div class="line"><a name="l04018"></a><span class="lineno"> 4018</span>&#160;    <span class="keyword">public</span>:</div><div class="line"><a name="l04019"></a><span class="lineno"> 4019</span>&#160;        const_iterator() :</div><div class="line"><a name="l04020"></a><span class="lineno"> 4020</span>&#160;            m_pList(VMA_NULL),</div><div class="line"><a name="l04021"></a><span class="lineno"> 4021</span>&#160;            m_pItem(VMA_NULL)</div><div class="line"><a name="l04022"></a><span class="lineno"> 4022</span>&#160;        {</div><div class="line"><a name="l04023"></a><span class="lineno"> 4023</span>&#160;        }</div><div class="line"><a name="l04024"></a><span class="lineno"> 4024</span>&#160;</div><div class="line"><a name="l04025"></a><span class="lineno"> 4025</span>&#160;        const_iterator(<span class="keyword">const</span> iterator&amp; src) :</div><div class="line"><a name="l04026"></a><span class="lineno"> 4026</span>&#160;            m_pList(src.m_pList),</div><div class="line"><a name="l04027"></a><span class="lineno"> 4027</span>&#160;            m_pItem(src.m_pItem)</div><div class="line"><a name="l04028"></a><span class="lineno"> 4028</span>&#160;        {</div><div class="line"><a name="l04029"></a><span class="lineno"> 4029</span>&#160;        }</div><div class="line"><a name="l04030"></a><span class="lineno"> 4030</span>&#160;        </div><div class="line"><a name="l04031"></a><span class="lineno"> 4031</span>&#160;        <span class="keyword">const</span> T&amp; operator*()<span class="keyword"> const</span></div><div class="line"><a name="l04032"></a><span class="lineno"> 4032</span>&#160;<span class="keyword">        </span>{</div><div class="line"><a name="l04033"></a><span class="lineno"> 4033</span>&#160;            VMA_HEAVY_ASSERT(m_pItem != VMA_NULL);</div><div class="line"><a name="l04034"></a><span class="lineno"> 4034</span>&#160;            <span class="keywordflow">return</span> m_pItem-&gt;Value;</div><div class="line"><a name="l04035"></a><span class="lineno"> 4035</span>&#160;        }</div><div class="line"><a name="l04036"></a><span class="lineno"> 4036</span>&#160;        <span class="keyword">const</span> T* operator-&gt;()<span class="keyword"> const</span></div><div class="line"><a name="l04037"></a><span class="lineno"> 4037</span>&#160;<span class="keyword">        </span>{</div><div class="line"><a name="l04038"></a><span class="lineno"> 4038</span>&#160;            VMA_HEAVY_ASSERT(m_pItem != VMA_NULL);</div><div class="line"><a name="l04039"></a><span class="lineno"> 4039</span>&#160;            <span class="keywordflow">return</span> &amp;m_pItem-&gt;Value;</div><div class="line"><a name="l04040"></a><span class="lineno"> 4040</span>&#160;        }</div><div class="line"><a name="l04041"></a><span class="lineno"> 4041</span>&#160;</div><div class="line"><a name="l04042"></a><span class="lineno"> 4042</span>&#160;        const_iterator&amp; operator++()</div><div class="line"><a name="l04043"></a><span class="lineno"> 4043</span>&#160;        {</div><div class="line"><a name="l04044"></a><span class="lineno"> 4044</span>&#160;            VMA_HEAVY_ASSERT(m_pItem != VMA_NULL);</div><div class="line"><a name="l04045"></a><span class="lineno"> 4045</span>&#160;            m_pItem = m_pItem-&gt;pNext;</div><div class="line"><a name="l04046"></a><span class="lineno"> 4046</span>&#160;            <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l04047"></a><span class="lineno"> 4047</span>&#160;        }</div><div class="line"><a name="l04048"></a><span class="lineno"> 4048</span>&#160;        const_iterator&amp; operator--()</div><div class="line"><a name="l04049"></a><span class="lineno"> 4049</span>&#160;        {</div><div class="line"><a name="l04050"></a><span class="lineno"> 4050</span>&#160;            <span class="keywordflow">if</span>(m_pItem != VMA_NULL)</div><div class="line"><a name="l04051"></a><span class="lineno"> 4051</span>&#160;            {</div><div class="line"><a name="l04052"></a><span class="lineno"> 4052</span>&#160;                m_pItem = m_pItem-&gt;pPrev;</div><div class="line"><a name="l04053"></a><span class="lineno"> 4053</span>&#160;            }</div><div class="line"><a name="l04054"></a><span class="lineno"> 4054</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l04055"></a><span class="lineno"> 4055</span>&#160;            {</div><div class="line"><a name="l04056"></a><span class="lineno"> 4056</span>&#160;                VMA_HEAVY_ASSERT(!m_pList-&gt;IsEmpty());</div><div class="line"><a name="l04057"></a><span class="lineno"> 4057</span>&#160;                m_pItem = m_pList-&gt;Back();</div><div class="line"><a name="l04058"></a><span class="lineno"> 4058</span>&#160;            }</div><div class="line"><a name="l04059"></a><span class="lineno"> 4059</span>&#160;            <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l04060"></a><span class="lineno"> 4060</span>&#160;        }</div><div class="line"><a name="l04061"></a><span class="lineno"> 4061</span>&#160;</div><div class="line"><a name="l04062"></a><span class="lineno"> 4062</span>&#160;        const_iterator operator++(<span class="keywordtype">int</span>)</div><div class="line"><a name="l04063"></a><span class="lineno"> 4063</span>&#160;        {</div><div class="line"><a name="l04064"></a><span class="lineno"> 4064</span>&#160;            const_iterator result = *<span class="keyword">this</span>;</div><div class="line"><a name="l04065"></a><span class="lineno"> 4065</span>&#160;            ++*<span class="keyword">this</span>;</div><div class="line"><a name="l04066"></a><span class="lineno"> 4066</span>&#160;            <span class="keywordflow">return</span> result;</div><div class="line"><a name="l04067"></a><span class="lineno"> 4067</span>&#160;        }</div><div class="line"><a name="l04068"></a><span class="lineno"> 4068</span>&#160;        const_iterator operator--(<span class="keywordtype">int</span>)</div><div class="line"><a name="l04069"></a><span class="lineno"> 4069</span>&#160;        {</div><div class="line"><a name="l04070"></a><span class="lineno"> 4070</span>&#160;            const_iterator result = *<span class="keyword">this</span>;</div><div class="line"><a name="l04071"></a><span class="lineno"> 4071</span>&#160;            --*<span class="keyword">this</span>;</div><div class="line"><a name="l04072"></a><span class="lineno"> 4072</span>&#160;            <span class="keywordflow">return</span> result;</div><div class="line"><a name="l04073"></a><span class="lineno"> 4073</span>&#160;        }</div><div class="line"><a name="l04074"></a><span class="lineno"> 4074</span>&#160;</div><div class="line"><a name="l04075"></a><span class="lineno"> 4075</span>&#160;        <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> const_iterator&amp; rhs)<span class="keyword"> const</span></div><div class="line"><a name="l04076"></a><span class="lineno"> 4076</span>&#160;<span class="keyword">        </span>{</div><div class="line"><a name="l04077"></a><span class="lineno"> 4077</span>&#160;            VMA_HEAVY_ASSERT(m_pList == rhs.m_pList);</div><div class="line"><a name="l04078"></a><span class="lineno"> 4078</span>&#160;            <span class="keywordflow">return</span> m_pItem == rhs.m_pItem;</div><div class="line"><a name="l04079"></a><span class="lineno"> 4079</span>&#160;        }</div><div class="line"><a name="l04080"></a><span class="lineno"> 4080</span>&#160;        <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> const_iterator&amp; rhs)<span class="keyword"> const</span></div><div class="line"><a name="l04081"></a><span class="lineno"> 4081</span>&#160;<span class="keyword">        </span>{</div><div class="line"><a name="l04082"></a><span class="lineno"> 4082</span>&#160;            VMA_HEAVY_ASSERT(m_pList == rhs.m_pList);</div><div class="line"><a name="l04083"></a><span class="lineno"> 4083</span>&#160;            <span class="keywordflow">return</span> m_pItem != rhs.m_pItem;</div><div class="line"><a name="l04084"></a><span class="lineno"> 4084</span>&#160;        }</div><div class="line"><a name="l04085"></a><span class="lineno"> 4085</span>&#160;        </div><div class="line"><a name="l04086"></a><span class="lineno"> 4086</span>&#160;    <span class="keyword">private</span>:</div><div class="line"><a name="l04087"></a><span class="lineno"> 4087</span>&#160;        const_iterator(<span class="keyword">const</span> VmaRawList&lt;T&gt;* pList, <span class="keyword">const</span> VmaListItem&lt;T&gt;* pItem) :</div><div class="line"><a name="l04088"></a><span class="lineno"> 4088</span>&#160;            m_pList(pList),</div><div class="line"><a name="l04089"></a><span class="lineno"> 4089</span>&#160;            m_pItem(pItem)</div><div class="line"><a name="l04090"></a><span class="lineno"> 4090</span>&#160;        {</div><div class="line"><a name="l04091"></a><span class="lineno"> 4091</span>&#160;        }</div><div class="line"><a name="l04092"></a><span class="lineno"> 4092</span>&#160;</div><div class="line"><a name="l04093"></a><span class="lineno"> 4093</span>&#160;        <span class="keyword">const</span> VmaRawList&lt;T&gt;* m_pList;</div><div class="line"><a name="l04094"></a><span class="lineno"> 4094</span>&#160;        <span class="keyword">const</span> VmaListItem&lt;T&gt;* m_pItem;</div><div class="line"><a name="l04095"></a><span class="lineno"> 4095</span>&#160;</div><div class="line"><a name="l04096"></a><span class="lineno"> 4096</span>&#160;        <span class="keyword">friend</span> <span class="keyword">class </span>VmaList&lt;T, AllocatorT&gt;;</div><div class="line"><a name="l04097"></a><span class="lineno"> 4097</span>&#160;    };</div><div class="line"><a name="l04098"></a><span class="lineno"> 4098</span>&#160;</div><div class="line"><a name="l04099"></a><span class="lineno"> 4099</span>&#160;    VmaList(<span class="keyword">const</span> AllocatorT&amp; allocator) : m_RawList(allocator.m_pCallbacks) { }</div><div class="line"><a name="l04100"></a><span class="lineno"> 4100</span>&#160;</div><div class="line"><a name="l04101"></a><span class="lineno"> 4101</span>&#160;    <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_RawList.IsEmpty(); }</div><div class="line"><a name="l04102"></a><span class="lineno"> 4102</span>&#160;    <span class="keywordtype">size_t</span> size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_RawList.GetCount(); }</div><div class="line"><a name="l04103"></a><span class="lineno"> 4103</span>&#160;</div><div class="line"><a name="l04104"></a><span class="lineno"> 4104</span>&#160;    iterator begin() { <span class="keywordflow">return</span> iterator(&amp;m_RawList, m_RawList.Front()); }</div><div class="line"><a name="l04105"></a><span class="lineno"> 4105</span>&#160;    iterator end() { <span class="keywordflow">return</span> iterator(&amp;m_RawList, VMA_NULL); }</div><div class="line"><a name="l04106"></a><span class="lineno"> 4106</span>&#160;</div><div class="line"><a name="l04107"></a><span class="lineno"> 4107</span>&#160;    const_iterator cbegin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(&amp;m_RawList, m_RawList.Front()); }</div><div class="line"><a name="l04108"></a><span class="lineno"> 4108</span>&#160;    const_iterator cend()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(&amp;m_RawList, VMA_NULL); }</div><div class="line"><a name="l04109"></a><span class="lineno"> 4109</span>&#160;</div><div class="line"><a name="l04110"></a><span class="lineno"> 4110</span>&#160;    <span class="keywordtype">void</span> clear() { m_RawList.Clear(); }</div><div class="line"><a name="l04111"></a><span class="lineno"> 4111</span>&#160;    <span class="keywordtype">void</span> push_back(<span class="keyword">const</span> T&amp; value) { m_RawList.PushBack(value); }</div><div class="line"><a name="l04112"></a><span class="lineno"> 4112</span>&#160;    <span class="keywordtype">void</span> erase(iterator it) { m_RawList.Remove(it.m_pItem); }</div><div class="line"><a name="l04113"></a><span class="lineno"> 4113</span>&#160;    iterator insert(iterator it, <span class="keyword">const</span> T&amp; value) { <span class="keywordflow">return</span> iterator(&amp;m_RawList, m_RawList.InsertBefore(it.m_pItem, value)); }</div><div class="line"><a name="l04114"></a><span class="lineno"> 4114</span>&#160;</div><div class="line"><a name="l04115"></a><span class="lineno"> 4115</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l04116"></a><span class="lineno"> 4116</span>&#160;    VmaRawList&lt;T&gt; m_RawList;</div><div class="line"><a name="l04117"></a><span class="lineno"> 4117</span>&#160;};</div><div class="line"><a name="l04118"></a><span class="lineno"> 4118</span>&#160;</div><div class="line"><a name="l04119"></a><span class="lineno"> 4119</span>&#160;<span class="preprocessor">#endif // #if VMA_USE_STL_LIST</span></div><div class="line"><a name="l04120"></a><span class="lineno"> 4120</span>&#160;</div><div class="line"><a name="l04122"></a><span class="lineno"> 4122</span>&#160;<span class="comment">// class VmaMap</span></div><div class="line"><a name="l04123"></a><span class="lineno"> 4123</span>&#160;</div><div class="line"><a name="l04124"></a><span class="lineno"> 4124</span>&#160;<span class="comment">// Unused in this version.</span></div><div class="line"><a name="l04125"></a><span class="lineno"> 4125</span>&#160;<span class="preprocessor">#if 0</span></div><div class="line"><a name="l04126"></a><span class="lineno"> 4126</span>&#160;</div><div class="line"><a name="l04127"></a><span class="lineno"> 4127</span>&#160;<span class="preprocessor">#if VMA_USE_STL_UNORDERED_MAP</span></div><div class="line"><a name="l04128"></a><span class="lineno"> 4128</span>&#160;</div><div class="line"><a name="l04129"></a><span class="lineno"> 4129</span>&#160;<span class="preprocessor">#define VmaPair std::pair</span></div><div class="line"><a name="l04130"></a><span class="lineno"> 4130</span>&#160;</div><div class="line"><a name="l04131"></a><span class="lineno"> 4131</span>&#160;<span class="preprocessor">#define VMA_MAP_TYPE(KeyT, ValueT) \</span></div><div class="line"><a name="l04132"></a><span class="lineno"> 4132</span>&#160;<span class="preprocessor">    std::unordered_map&lt; KeyT, ValueT, std::hash&lt;KeyT&gt;, std::equal_to&lt;KeyT&gt;, VmaStlAllocator&lt; std::pair&lt;KeyT, ValueT&gt; &gt; &gt;</span></div><div class="line"><a name="l04133"></a><span class="lineno"> 4133</span>&#160;</div><div class="line"><a name="l04134"></a><span class="lineno"> 4134</span>&#160;<span class="preprocessor">#else // #if VMA_USE_STL_UNORDERED_MAP</span></div><div class="line"><a name="l04135"></a><span class="lineno"> 4135</span>&#160;</div><div class="line"><a name="l04136"></a><span class="lineno"> 4136</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2&gt;</div><div class="line"><a name="l04137"></a><span class="lineno"> 4137</span>&#160;<span class="keyword">struct </span>VmaPair</div><div class="line"><a name="l04138"></a><span class="lineno"> 4138</span>&#160;{</div><div class="line"><a name="l04139"></a><span class="lineno"> 4139</span>&#160;    T1 first;</div><div class="line"><a name="l04140"></a><span class="lineno"> 4140</span>&#160;    T2 second;</div><div class="line"><a name="l04141"></a><span class="lineno"> 4141</span>&#160;</div><div class="line"><a name="l04142"></a><span class="lineno"> 4142</span>&#160;    VmaPair() : first(), second() { }</div><div class="line"><a name="l04143"></a><span class="lineno"> 4143</span>&#160;    VmaPair(<span class="keyword">const</span> T1&amp; firstSrc, <span class="keyword">const</span> T2&amp; secondSrc) : first(firstSrc), second(secondSrc) { }</div><div class="line"><a name="l04144"></a><span class="lineno"> 4144</span>&#160;};</div><div class="line"><a name="l04145"></a><span class="lineno"> 4145</span>&#160;</div><div class="line"><a name="l04146"></a><span class="lineno"> 4146</span>&#160;<span class="comment">/* Class compatible with subset of interface of std::unordered_map.&