Browse Source

Merge pull request #52045 from reduz/expose-rid-creation-utilities

Expose RID creation utilities.
Juan Linietsky 4 years ago
parent
commit
13bd020a23
3 changed files with 31 additions and 4 deletions
  1. 6 4
      core/templates/rid_owner.h
  2. 12 0
      core/variant/variant_utility.cpp
  3. 13 0
      doc/classes/@GlobalScope.xml

+ 6 - 4
core/templates/rid_owner.h

@@ -53,14 +53,16 @@ protected:
 		return rid;
 		return rid;
 	}
 	}
 
 
-	static uint64_t _gen_id() {
-		return base_id.increment();
-	}
-
 	static RID _gen_rid() {
 	static RID _gen_rid() {
 		return _make_from_id(_gen_id());
 		return _make_from_id(_gen_id());
 	}
 	}
 
 
+	friend struct VariantUtilityFunctions;
+
+	static uint64_t _gen_id() {
+		return base_id.increment();
+	}
+
 public:
 public:
 	virtual ~RID_AllocBase() {}
 	virtual ~RID_AllocBase() {}
 };
 };

+ 12 - 0
core/variant/variant_utility.cpp

@@ -35,6 +35,8 @@
 #include "core/object/ref_counted.h"
 #include "core/object/ref_counted.h"
 #include "core/os/os.h"
 #include "core/os/os.h"
 #include "core/templates/oa_hash_map.h"
 #include "core/templates/oa_hash_map.h"
+#include "core/templates/rid.h"
+#include "core/templates/rid_owner.h"
 #include "core/variant/binder_common.h"
 #include "core/variant/binder_common.h"
 #include "core/variant/variant_parser.h"
 #include "core/variant/variant_parser.h"
 
 
@@ -728,6 +730,13 @@ struct VariantUtilityFunctions {
 		}
 		}
 		return p_instance.get_validated_object() != nullptr;
 		return p_instance.get_validated_object() != nullptr;
 	}
 	}
+
+	static inline uint64_t rid_allocate_id() {
+		return RID_AllocBase::_gen_id();
+	}
+	static inline RID rid_from_int64(uint64_t p_base) {
+		return RID::from_uint64(p_base);
+	}
 };
 };
 
 
 #ifdef DEBUG_METHODS_ENABLED
 #ifdef DEBUG_METHODS_ENABLED
@@ -1265,6 +1274,9 @@ void Variant::_register_variant_utility_functions() {
 	FUNCBINDR(instance_from_id, sarray("instance_id"), Variant::UTILITY_FUNC_TYPE_GENERAL);
 	FUNCBINDR(instance_from_id, sarray("instance_id"), Variant::UTILITY_FUNC_TYPE_GENERAL);
 	FUNCBINDR(is_instance_id_valid, sarray("id"), Variant::UTILITY_FUNC_TYPE_GENERAL);
 	FUNCBINDR(is_instance_id_valid, sarray("id"), Variant::UTILITY_FUNC_TYPE_GENERAL);
 	FUNCBINDR(is_instance_valid, sarray("instance"), Variant::UTILITY_FUNC_TYPE_GENERAL);
 	FUNCBINDR(is_instance_valid, sarray("instance"), Variant::UTILITY_FUNC_TYPE_GENERAL);
+
+	FUNCBINDR(rid_allocate_id, Vector<String>(), Variant::UTILITY_FUNC_TYPE_GENERAL);
+	FUNCBINDR(rid_from_int64, sarray("base"), Variant::UTILITY_FUNC_TYPE_GENERAL);
 }
 }
 
 
 void Variant::_unregister_variant_utility_functions() {
 void Variant::_unregister_variant_utility_functions() {

+ 13 - 0
doc/classes/@GlobalScope.xml

@@ -711,6 +711,19 @@
 			<description>
 			<description>
 			</description>
 			</description>
 		</method>
 		</method>
+		<method name="rid_allocate_id">
+			<return type="int" />
+			<description>
+				Allocate a unique ID which can be used by the implementation to construct a RID. This is used mainly from native extensions to implement servers.
+			</description>
+		</method>
+		<method name="rid_from_int64">
+			<return type="RID" />
+			<argument index="0" name="base" type="int" />
+			<description>
+				Create a RID from an int64. This is used mainly from native extensions to build servers.
+			</description>
+		</method>
 		<method name="round">
 		<method name="round">
 			<return type="float" />
 			<return type="float" />
 			<argument index="0" name="x" type="float" />
 			<argument index="0" name="x" type="float" />