Przeglądaj źródła

Add Array:make macro

Bastiaan Olij 3 lat temu
rodzic
commit
957f86c3e3

+ 9 - 0
binding_generator.py

@@ -222,6 +222,9 @@ def generate_builtin_class_header(builtin_api, size, used_classes, fully_used_cl
     if class_name == "String":
     if class_name == "String":
         result.append("#include <godot_cpp/variant/char_string.hpp>")
         result.append("#include <godot_cpp/variant/char_string.hpp>")
 
 
+    if class_name == "Array":
+        result.append("#include <godot_cpp/variant/array_helpers.hpp>")
+
     for include in fully_used_classes:
     for include in fully_used_classes:
         result.append(f"#include <godot_cpp/{get_include_path(include)}>")
         result.append(f"#include <godot_cpp/{get_include_path(include)}>")
 
 
@@ -424,6 +427,12 @@ def generate_builtin_class_header(builtin_api, size, used_classes, fully_used_cl
         result.append(f"\tconst char32_t &operator[](int p_index) const;")
         result.append(f"\tconst char32_t &operator[](int p_index) const;")
         result.append(f"\tchar32_t &operator[](int p_index);")
         result.append(f"\tchar32_t &operator[](int p_index);")
 
 
+    if class_name == "Array":
+        result.append("\ttemplate <class... Args>")
+        result.append("\tstatic Array make(Args... args) {")
+        result.append("\t\treturn helpers::append_all(Array(), args...);")
+        result.append("\t}")
+
     if is_packed_array(class_name):
     if is_packed_array(class_name):
         return_type = correct_type(builtin_api["indexing_return_type"])
         return_type = correct_type(builtin_api["indexing_return_type"])
         if class_name == "PackedByteArray":
         if class_name == "PackedByteArray":

+ 50 - 0
include/godot_cpp/variant/array_helpers.hpp

@@ -0,0 +1,50 @@
+/*************************************************************************/
+/*  array_helpers.hpp                                                    */
+/*************************************************************************/
+/*                       This file is part of:                           */
+/*                           GODOT ENGINE                                */
+/*                      https://godotengine.org                          */
+/*************************************************************************/
+/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur.                 */
+/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md).   */
+/*                                                                       */
+/* 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.                */
+/*************************************************************************/
+
+namespace godot {
+namespace helpers {
+template <typename T, typename ValueT>
+T append_all(T appendable, ValueT value) {
+	appendable.append(value);
+	return appendable;
+}
+
+template <typename T, typename ValueT, typename... Args>
+T append_all(T appendable, ValueT value, Args... args) {
+	appendable.append(value);
+	return append_all(appendable, args...);
+}
+
+template <typename T>
+T append_all(T appendable) {
+	return appendable;
+}
+} // namespace helpers
+} // namespace godot