Forráskód Böngészése

Merge pull request #11780 from touilleMan/gdnative-string-name-wrapper

[GDnative] Add string_name api
Thomas Herzog 8 éve
szülő
commit
584d7295cf

+ 3 - 0
core/string_db.h

@@ -113,6 +113,9 @@ public:
 		else
 			return 0;
 	}
+	_FORCE_INLINE_ const void *data_unique_pointer() const {
+		return (void *)_data;
+	}
 	bool operator!=(const StringName &p_name) const;
 
 	_FORCE_INLINE_ operator String() const {

+ 2 - 0
modules/gdnative/gdnative/gdnative.cpp

@@ -41,6 +41,7 @@ extern "C" {
 #endif
 
 extern "C" void _string_api_anchor();
+extern "C" void _string_name_api_anchor();
 extern "C" void _vector2_api_anchor();
 extern "C" void _rect2_api_anchor();
 extern "C" void _vector3_api_anchor();
@@ -61,6 +62,7 @@ extern "C" void _variant_api_anchor();
 void _api_anchor() {
 
 	_string_api_anchor();
+	_string_name_api_anchor();
 	_vector2_api_anchor();
 	_rect2_api_anchor();
 	_vector3_api_anchor();

+ 91 - 0
modules/gdnative/gdnative/string_name.cpp

@@ -0,0 +1,91 @@
+/*************************************************************************/
+/*  string_name.cpp                                                           */
+/*************************************************************************/
+/*                       This file is part of:                           */
+/*                           GODOT ENGINE                                */
+/*                    http://www.godotengine.org                         */
+/*************************************************************************/
+/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur.                 */
+/* Copyright (c) 2014-2017 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.                */
+/*************************************************************************/
+#include "gdnative/string_name.h"
+
+#include "core/string_db.h"
+#include "core/ustring.h"
+
+#include <string.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void _string_name_api_anchor() {
+}
+
+void GDAPI godot_string_name_new(godot_string_name *r_dest, const godot_string *p_name) {
+	StringName *dest = (StringName *)r_dest;
+	const String *name = (const String *)p_name;
+	memnew_placement(dest, StringName(*name));
+}
+
+void GDAPI godot_string_name_new_data(godot_string_name *r_dest, const char *p_name) {
+	StringName *dest = (StringName *)r_dest;
+	memnew_placement(dest, StringName(p_name));
+}
+
+godot_string GDAPI godot_string_name_get_name(const godot_string_name *p_self) {
+	godot_string ret;
+	const StringName *self = (const StringName *)p_self;
+	memnew_placement(&ret, String(*self));
+	return ret;
+}
+
+uint32_t GDAPI godot_string_name_get_hash(const godot_string_name *p_self) {
+	const StringName *self = (const StringName *)p_self;
+	return self->hash();
+}
+
+const void GDAPI *godot_string_name_get_data_unique_pointer(const godot_string_name *p_self) {
+	const StringName *self = (const StringName *)p_self;
+	return self->data_unique_pointer();
+}
+
+godot_bool GDAPI godot_string_name_operator_equal(const godot_string_name *p_self, const godot_string_name *p_other) {
+	const StringName *self = (const StringName *)p_self;
+	const StringName *other = (const StringName *)p_other;
+	return self == other;
+}
+
+godot_bool GDAPI godot_string_name_operator_less(const godot_string_name *p_self, const godot_string_name *p_other) {
+	const StringName *self = (const StringName *)p_self;
+	const StringName *other = (const StringName *)p_other;
+	return self < other;
+}
+
+void GDAPI godot_string_name_destroy(godot_string_name *p_self) {
+	StringName *self = (StringName *)p_self;
+	self->~StringName();
+}
+
+#ifdef __cplusplus
+}
+#endif

+ 60 - 0
modules/gdnative/gdnative_api.json

@@ -5010,6 +5010,66 @@
         ["godot_string *", "p_self"]
       ]
     },
+    {
+      "name": "godot_string_name_new",
+      "return_type": "void",
+      "arguments": [
+        ["godot_string_name *", "r_dest"],
+        ["const godot_string *", "p_name"]
+      ]
+    },
+    {
+      "name": "godot_string_name_new_data",
+      "return_type": "void",
+      "arguments": [
+        ["godot_string_name *", "r_dest"],
+        ["const char *", "p_name"]
+      ]
+    },
+    {
+      "name": "godot_string_name_get_name",
+      "return_type": "godot_string",
+      "arguments": [
+        ["const godot_string_name *", "p_self"]
+      ]
+    },
+    {
+      "name": "godot_string_name_get_hash",
+      "return_type": "uint32_t",
+      "arguments": [
+        ["const godot_string_name *", "p_self"]
+      ]
+    },
+    {
+      "name": "godot_string_name_get_data_unique_pointer",
+      "return_type": "const void *",
+      "arguments": [
+        ["const godot_string_name *", "p_self"]
+      ]
+    },
+    {
+      "name": "godot_string_name_operator_equal",
+      "return_type": "godot_bool",
+      "arguments": [
+        ["const godot_string_name *", "p_self"],
+        ["const godot_string_name *", "p_other"]
+      ]
+    },
+    {
+      "name": "godot_string_name_operator_less",
+      "return_type": "godot_bool",
+      "arguments": [
+        ["const godot_string_name *", "p_self"],
+        ["const godot_string_name *", "p_other"]
+      ]
+    },
+    {
+      "name": "godot_string_name_destroy",
+      "return_type": "void",
+      "arguments": [
+        ["godot_string_name *", "p_self"]
+      ]
+    },
     {
       "name": "godot_object_destroy",
       "return_type": "void",

+ 4 - 0
modules/gdnative/include/gdnative/gdnative.h

@@ -141,6 +141,10 @@ typedef void godot_object;
 
 #include <gdnative/string.h>
 
+/////// String name
+
+#include <gdnative/string_name.h>
+
 ////// Vector2
 
 #include <gdnative/vector2.h>

+ 68 - 0
modules/gdnative/include/gdnative/string_name.h

@@ -0,0 +1,68 @@
+/*************************************************************************/
+/*  string_name.h                                                             */
+/*************************************************************************/
+/*                       This file is part of:                           */
+/*                           GODOT ENGINE                                */
+/*                    http://www.godotengine.org                         */
+/*************************************************************************/
+/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur.                 */
+/* Copyright (c) 2014-2017 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.                */
+/*************************************************************************/
+#ifndef GODOT_STRING_NAME_H
+#define GODOT_STRING_NAME_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+#include <wchar.h>
+
+#define GODOT_STRING_NAME_SIZE sizeof(void *)
+
+#ifndef GODOT_CORE_API_GODOT_STRING_NAME_TYPE_DEFINED
+#define GODOT_CORE_API_GODOT_STRING_NAME_TYPE_DEFINED
+typedef struct {
+	uint8_t _dont_touch_that[GODOT_STRING_NAME_SIZE];
+} godot_string_name;
+#endif
+
+#include <gdnative/gdnative.h>
+
+void GDAPI godot_string_name_new(godot_string_name *r_dest, const godot_string *p_name);
+void GDAPI godot_string_name_new_data(godot_string_name *r_dest, const char *p_name);
+
+godot_string GDAPI godot_string_name_get_name(const godot_string_name *p_self);
+
+uint32_t GDAPI godot_string_name_get_hash(const godot_string_name *p_self);
+const void GDAPI *godot_string_name_get_data_unique_pointer(const godot_string_name *p_self);
+
+godot_bool GDAPI godot_string_name_operator_equal(const godot_string_name *p_self, const godot_string_name *p_other);
+godot_bool GDAPI godot_string_name_operator_less(const godot_string_name *p_self, const godot_string_name *p_other);
+
+void GDAPI godot_string_name_destroy(godot_string_name *p_self);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // GODOT_STRING_NAME_H