|
@@ -19,9 +19,7 @@ References
|
|
|
~~~~~~~~~~~
|
|
|
|
|
|
- `Why does Godot use servers and RIDs? <https://godotengine.org/article/why-does-godot-use-servers-and-rids>`__
|
|
|
-
|
|
|
- `Singleton pattern <https://en.wikipedia.org/wiki/Singleton_pattern>`__
|
|
|
-
|
|
|
- `Mediator pattern <https://en.wikipedia.org/wiki/Mediator_pattern>`__
|
|
|
|
|
|
What for?
|
|
@@ -45,13 +43,13 @@ an initialization state and a cleanup procedure.
|
|
|
#ifndef HILBERT_HOTEL_H
|
|
|
#define HILBERT_HOTEL_H
|
|
|
|
|
|
- #include "object.h"
|
|
|
- #include "list.h"
|
|
|
- #include "rid.h"
|
|
|
- #include "set.h"
|
|
|
- #include "variant.h"
|
|
|
- #include "os/thread.h"
|
|
|
- #include "os/mutex.h"
|
|
|
+ #include "core/list.h"
|
|
|
+ #include "core/object.h"
|
|
|
+ #include "core/os/thread.h"
|
|
|
+ #include "core/os/mutex.h"
|
|
|
+ #include "core/rid.h"
|
|
|
+ #include "core/set.h"
|
|
|
+ #include "core/variant.h"
|
|
|
|
|
|
class HilbertHotel : public Object {
|
|
|
GDCLASS(HilbertHotel, Object);
|
|
@@ -97,19 +95,21 @@ an initialization state and a cleanup procedure.
|
|
|
.. code:: cpp
|
|
|
|
|
|
#include "hilbert_hotel.h"
|
|
|
- #include "variant.h"
|
|
|
- #include "os/os.h"
|
|
|
- #include "list.h"
|
|
|
- #include "dictionary.h"
|
|
|
+
|
|
|
+ #include "core/dictionary.h"
|
|
|
+ #include "core/list.h"
|
|
|
+ #include "core/os/os.h"
|
|
|
+ #include "core/variant.h"
|
|
|
+
|
|
|
#include "prime_225.h"
|
|
|
|
|
|
- oid HilbertHotel::thread_func(void *p_udata) {
|
|
|
+ void HilbertHotel::thread_func(void *p_udata) {
|
|
|
|
|
|
HilbertHotel *ac = (HilbertHotel *) p_udata;
|
|
|
uint64_t msdelay = 1000;
|
|
|
|
|
|
- while (!ac -> exit_thread) {
|
|
|
- if (!ac -> empty()) {
|
|
|
+ while (!ac->exit_thread) {
|
|
|
+ if (!ac->empty()) {
|
|
|
ac->lock();
|
|
|
ac->register_rooms();
|
|
|
ac->unlock();
|
|
@@ -163,8 +163,8 @@ an initialization state and a cleanup procedure.
|
|
|
_HilbertHotel::get_singleton()->_occupy_room(room, rid);
|
|
|
}
|
|
|
|
|
|
- Variant HilbertHotel::get_bus_info(RID id){
|
|
|
- InfiniteBus * bus = bus_owner.getornull(id);
|
|
|
+ Variant HilbertHotel::get_bus_info(RID id) {
|
|
|
+ InfiniteBus *)bus = bus_owner.getornull(id);
|
|
|
|
|
|
if (bus) {
|
|
|
Dictionary d;
|
|
@@ -240,33 +240,35 @@ an initialization state and a cleanup procedure.
|
|
|
|
|
|
/* prime_225.h */
|
|
|
|
|
|
- #include "int_types.h"
|
|
|
-
|
|
|
- const uint64_t PRIME[225] = {2,3,5,7,11,13,17,19,23,
|
|
|
- 29,31,37,41,43,47,53,59,61,
|
|
|
- 67,71,73,79,83,89,97,101,103,
|
|
|
- 107,109,113,127,131,137,139,149,151,
|
|
|
- 157,163,167,173,179,181,191,193,197,
|
|
|
- 199,211,223,227,229,233,239,241,251,
|
|
|
- 257,263,269,271,277,281,283,293,307,
|
|
|
- 311,313,317,331,337,347,349,353,359,
|
|
|
- 367,373,379,383,389,397,401,409,419,
|
|
|
- 421,431,433,439,443,449,457,461,463,
|
|
|
- 467,479,487,491,499,503,509,521,523,
|
|
|
- 541,547,557,563,569,571,577,587,593,
|
|
|
- 599,601,607,613,617,619,631,641,643,
|
|
|
- 647,653,659,661,673,677,683,691,701,
|
|
|
- 709,719,727,733,739,743,751,757,761,
|
|
|
- 769,773,787,797,809,811,821,823,827,
|
|
|
- 829,839,853,857,859,863,877,881,883,
|
|
|
- 887,907,911,919,929,937,941,947,953,
|
|
|
- 967,971,977,983,991,997,1009,1013,1019,
|
|
|
- 1021,1031,1033,1039,1049,1051,1061,1063,1069,
|
|
|
- 1087,1091,1093,1097,1103,1109,1117,1123,1129,
|
|
|
- 1151,1153,1163,1171,1181,1187,1193,1201,1213,
|
|
|
- 1217,1223,1229,1231,1237,1249,1259,1277,1279,
|
|
|
- 1283,1289,1291,1297,1301,1303,1307,1319,1321,
|
|
|
- 1327,1361,1367,1373,1381,1399,1409,1423,1427};
|
|
|
+ #include "core/int_types.h"
|
|
|
+
|
|
|
+ const uint64_t PRIME[225] = {
|
|
|
+ 2,3,5,7,11,13,17,19,23,
|
|
|
+ 29,31,37,41,43,47,53,59,61,
|
|
|
+ 67,71,73,79,83,89,97,101,103,
|
|
|
+ 107,109,113,127,131,137,139,149,151,
|
|
|
+ 157,163,167,173,179,181,191,193,197,
|
|
|
+ 199,211,223,227,229,233,239,241,251,
|
|
|
+ 257,263,269,271,277,281,283,293,307,
|
|
|
+ 311,313,317,331,337,347,349,353,359,
|
|
|
+ 367,373,379,383,389,397,401,409,419,
|
|
|
+ 421,431,433,439,443,449,457,461,463,
|
|
|
+ 467,479,487,491,499,503,509,521,523,
|
|
|
+ 541,547,557,563,569,571,577,587,593,
|
|
|
+ 599,601,607,613,617,619,631,641,643,
|
|
|
+ 647,653,659,661,673,677,683,691,701,
|
|
|
+ 709,719,727,733,739,743,751,757,761,
|
|
|
+ 769,773,787,797,809,811,821,823,827,
|
|
|
+ 829,839,853,857,859,863,877,881,883,
|
|
|
+ 887,907,911,919,929,937,941,947,953,
|
|
|
+ 967,971,977,983,991,997,1009,1013,1019,
|
|
|
+ 1021,1031,1033,1039,1049,1051,1061,1063,1069,
|
|
|
+ 1087,1091,1093,1097,1103,1109,1117,1123,1129,
|
|
|
+ 1151,1153,1163,1171,1181,1187,1193,1201,1213,
|
|
|
+ 1217,1223,1229,1231,1237,1249,1259,1277,1279,
|
|
|
+ 1283,1289,1291,1297,1301,1303,1307,1319,1321,
|
|
|
+ 1327,1361,1367,1373,1381,1399,1409,1423,1427
|
|
|
+ };
|
|
|
|
|
|
Custom managed resource data
|
|
|
----------------------------
|
|
@@ -335,9 +337,11 @@ is used to register the dummy class in GDScript.
|
|
|
/* register_types.cpp */
|
|
|
|
|
|
#include "register_types.h"
|
|
|
- #include "class_db.h"
|
|
|
+
|
|
|
+ #include "core/class_db.h"
|
|
|
+ #include "core/engine.h"
|
|
|
+
|
|
|
#include "hilbert_hotel.h"
|
|
|
- #include "engine.h"
|
|
|
|
|
|
static HilbertHotel *hilbert_hotel = NULL;
|
|
|
static _HilbertHotel *_hilbert_hotel = NULL;
|
|
@@ -432,7 +436,7 @@ It is possible to emit signals to GDScript by calling the GDScript dummy object.
|
|
|
return HilbertHotel::get_singleton()->delete_bus(rid);
|
|
|
}
|
|
|
|
|
|
- void _HilbertHotel::_occupy_room(int room_number, RID bus){
|
|
|
+ void _HilbertHotel::_occupy_room(int room_number, RID bus) {
|
|
|
emit_signal("occupy_room", room_number, bus);
|
|
|
}
|
|
|
|
|
@@ -479,24 +483,24 @@ Here is the GDScript sample code:
|
|
|
|
|
|
.. code::
|
|
|
|
|
|
- extends Node
|
|
|
-
|
|
|
- func _ready():
|
|
|
- print("start Debugging")
|
|
|
- HilbertHotel.connect("occupy_room", self, "_print_occupy_room")
|
|
|
- var rid = HilbertHotel.create_bus()
|
|
|
- OS.delay_msec(2000)
|
|
|
- HilbertHotel.create_bus()
|
|
|
- OS.delay_msec(2000)
|
|
|
- HilbertHotel.create_bus()
|
|
|
- OS.delay_msec(2000)
|
|
|
- print(HilbertHotel.get_bus_info(rid))
|
|
|
- HilbertHotel.delete_bus(rid)
|
|
|
- print("ready done")
|
|
|
-
|
|
|
- func _print_occupy_room(room_number, r_id):
|
|
|
- print("room_num: " + str(room_number) + " rid: " + str(r_id))
|
|
|
- print(HilbertHotel.get_bus_info(r_id))
|
|
|
+ extends Node
|
|
|
+
|
|
|
+ func _ready():
|
|
|
+ print("Start debugging")
|
|
|
+ HilbertHotel.connect("occupy_room", self, "_print_occupy_room")
|
|
|
+ var rid = HilbertHotel.create_bus()
|
|
|
+ OS.delay_msec(2000)
|
|
|
+ HilbertHotel.create_bus()
|
|
|
+ OS.delay_msec(2000)
|
|
|
+ HilbertHotel.create_bus()
|
|
|
+ OS.delay_msec(2000)
|
|
|
+ print(HilbertHotel.get_bus_info(rid))
|
|
|
+ HilbertHotel.delete_bus(rid)
|
|
|
+ print("Ready done")
|
|
|
+
|
|
|
+ func _print_occupy_room(room_number, r_id):
|
|
|
+ print("Room number: " + str(room_number) + ", RID: " + str(r_id))
|
|
|
+ print(HilbertHotel.get_bus_info(r_id))
|
|
|
|
|
|
Notes
|
|
|
~~~~~
|