|
33 | 33 |
|
34 | 34 | #include <godot_cpp/core/object.hpp> |
35 | 35 | #include <godot_cpp/variant/typed_array.hpp> |
36 | | -#include <godot_cpp/variant/typed_dictionary.hpp> |
37 | 36 | #include <godot_cpp/variant/variant.hpp> |
38 | 37 |
|
39 | 38 | #include <gdextension_interface.h> |
@@ -414,206 +413,6 @@ MAKE_TYPED_ARRAY_INFO(IPAddress, Variant::STRING) |
414 | 413 |
|
415 | 414 | #undef MAKE_TYPED_ARRAY_INFO |
416 | 415 |
|
417 | | -template <typename K, typename V> |
418 | | -struct PtrToArg<TypedDictionary<K, V>> { |
419 | | - _FORCE_INLINE_ static TypedDictionary<K, V> convert(const void *p_ptr) { |
420 | | - return TypedDictionary<K, V>(*reinterpret_cast<const Dictionary *>(p_ptr)); |
421 | | - } |
422 | | - typedef Dictionary EncodeT; |
423 | | - _FORCE_INLINE_ static void encode(TypedDictionary<K, V> p_val, void *p_ptr) { |
424 | | - *(Dictionary *)p_ptr = p_val; |
425 | | - } |
426 | | -}; |
427 | | - |
428 | | -template <typename K, typename V> |
429 | | -struct PtrToArg<const TypedDictionary<K, V> &> { |
430 | | - typedef Dictionary EncodeT; |
431 | | - _FORCE_INLINE_ static TypedDictionary<K, V> |
432 | | - convert(const void *p_ptr) { |
433 | | - return TypedDictionary<K, V>(*reinterpret_cast<const Dictionary *>(p_ptr)); |
434 | | - } |
435 | | -}; |
436 | | - |
437 | | -template <typename K, typename V> |
438 | | -struct GetTypeInfo<TypedDictionary<K, V>> { |
439 | | - static constexpr GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_DICTIONARY; |
440 | | - static constexpr GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE; |
441 | | - static inline PropertyInfo get_class_info() { |
442 | | - return PropertyInfo(Variant::Type::DICTIONARY, String(), PROPERTY_HINT_DICTIONARY_TYPE, vformat("%s;%s", K::get_class_static(), V::get_class_static())); |
443 | | - } |
444 | | -}; |
445 | | - |
446 | | -template <typename K, typename V> |
447 | | -struct GetTypeInfo<const TypedDictionary<K, V> &> { |
448 | | - static constexpr GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_DICTIONARY; |
449 | | - static constexpr GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE; |
450 | | - static inline PropertyInfo get_class_info() { |
451 | | - return PropertyInfo(Variant::Type::DICTIONARY, String(), PROPERTY_HINT_DICTIONARY_TYPE, vformat("%s;%s", K::get_class_static(), V::get_class_static())); |
452 | | - } |
453 | | -}; |
454 | | - |
455 | | -#define MAKE_TYPED_DICTIONARY_INFO_WITH_OBJECT(m_type, m_variant_type) \ |
456 | | - template <typename T> \ |
457 | | - struct GetTypeInfo<TypedDictionary<T, m_type>> { \ |
458 | | - static constexpr GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_DICTIONARY; \ |
459 | | - static constexpr GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE; \ |
460 | | - static inline PropertyInfo get_class_info() { \ |
461 | | - return PropertyInfo(Variant::Type::DICTIONARY, String(), PROPERTY_HINT_DICTIONARY_TYPE, \ |
462 | | - vformat("%s;%s", T::get_class_static(), m_variant_type == Variant::Type::NIL ? "Variant" : Variant::get_type_name(m_variant_type).utf8().get_data())); \ |
463 | | - } \ |
464 | | - }; \ |
465 | | - template <typename T> \ |
466 | | - struct GetTypeInfo<const TypedDictionary<T, m_type> &> { \ |
467 | | - static constexpr GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_DICTIONARY; \ |
468 | | - static constexpr GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE; \ |
469 | | - static inline PropertyInfo get_class_info() { \ |
470 | | - return PropertyInfo(Variant::Type::DICTIONARY, String(), PROPERTY_HINT_DICTIONARY_TYPE, \ |
471 | | - vformat("%s;%s", T::get_class_static(), m_variant_type == Variant::Type::NIL ? "Variant" : Variant::get_type_name(m_variant_type).utf8().get_data())); \ |
472 | | - } \ |
473 | | - }; \ |
474 | | - template <typename T> \ |
475 | | - struct GetTypeInfo<TypedDictionary<m_type, T>> { \ |
476 | | - static constexpr GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_DICTIONARY; \ |
477 | | - static constexpr GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE; \ |
478 | | - static inline PropertyInfo get_class_info() { \ |
479 | | - return PropertyInfo(Variant::Type::DICTIONARY, String(), PROPERTY_HINT_DICTIONARY_TYPE, \ |
480 | | - vformat("%s;%s", m_variant_type == Variant::Type::NIL ? "Variant" : Variant::get_type_name(m_variant_type).utf8().get_data(), T::get_class_static())); \ |
481 | | - } \ |
482 | | - }; \ |
483 | | - template <typename T> \ |
484 | | - struct GetTypeInfo<const TypedDictionary<m_type, T> &> { \ |
485 | | - static constexpr GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_DICTIONARY; \ |
486 | | - static constexpr GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE; \ |
487 | | - static inline PropertyInfo get_class_info() { \ |
488 | | - return PropertyInfo(Variant::Type::DICTIONARY, String(), PROPERTY_HINT_DICTIONARY_TYPE, \ |
489 | | - vformat("%s;%s", m_variant_type == Variant::Type::NIL ? "Variant" : Variant::get_type_name(m_variant_type).utf8().get_data(), T::get_class_static())); \ |
490 | | - } \ |
491 | | - }; |
492 | | - |
493 | | -#define MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type_key, m_variant_type_key, m_type_value, m_variant_type_value) \ |
494 | | - template <> \ |
495 | | - struct GetTypeInfo<TypedDictionary<m_type_key, m_type_value>> { \ |
496 | | - static constexpr GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_DICTIONARY; \ |
497 | | - static constexpr GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE; \ |
498 | | - static inline PropertyInfo get_class_info() { \ |
499 | | - return PropertyInfo(Variant::Type::DICTIONARY, String(), PROPERTY_HINT_DICTIONARY_TYPE, \ |
500 | | - vformat("%s;%s", m_variant_type_key == Variant::Type::NIL ? "Variant" : Variant::get_type_name(m_variant_type_key).utf8().get_data(), \ |
501 | | - m_variant_type_value == Variant::Type::NIL ? "Variant" : Variant::get_type_name(m_variant_type_value).utf8().get_data())); \ |
502 | | - } \ |
503 | | - }; \ |
504 | | - template <> \ |
505 | | - struct GetTypeInfo<const TypedDictionary<m_type_key, m_type_value> &> { \ |
506 | | - static constexpr GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_DICTIONARY; \ |
507 | | - static constexpr GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE; \ |
508 | | - static inline PropertyInfo get_class_info() { \ |
509 | | - return PropertyInfo(Variant::Type::DICTIONARY, String(), PROPERTY_HINT_DICTIONARY_TYPE, \ |
510 | | - vformat("%s;%s", m_variant_type_key == Variant::Type::NIL ? "Variant" : Variant::get_type_name(m_variant_type_key).utf8().get_data(), \ |
511 | | - m_variant_type_value == Variant::Type::NIL ? "Variant" : Variant::get_type_name(m_variant_type_value).utf8().get_data())); \ |
512 | | - } \ |
513 | | - }; |
514 | | - |
515 | | -#define MAKE_TYPED_DICTIONARY_INFO_NIL(m_type, m_variant_type) \ |
516 | | - MAKE_TYPED_DICTIONARY_INFO_WITH_OBJECT(m_type, m_variant_type) \ |
517 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, bool, Variant::BOOL) \ |
518 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, uint8_t, Variant::INT) \ |
519 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, int8_t, Variant::INT) \ |
520 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, uint16_t, Variant::INT) \ |
521 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, int16_t, Variant::INT) \ |
522 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, uint32_t, Variant::INT) \ |
523 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, int32_t, Variant::INT) \ |
524 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, uint64_t, Variant::INT) \ |
525 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, int64_t, Variant::INT) \ |
526 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, float, Variant::FLOAT) \ |
527 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, double, Variant::FLOAT) \ |
528 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, String, Variant::STRING) \ |
529 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, Vector2, Variant::VECTOR2) \ |
530 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, Vector2i, Variant::VECTOR2I) \ |
531 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, Rect2, Variant::RECT2) \ |
532 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, Rect2i, Variant::RECT2I) \ |
533 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, Vector3, Variant::VECTOR3) \ |
534 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, Vector3i, Variant::VECTOR3I) \ |
535 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, Transform2D, Variant::TRANSFORM2D) \ |
536 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, Plane, Variant::PLANE) \ |
537 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, Quaternion, Variant::QUATERNION) \ |
538 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, AABB, Variant::AABB) \ |
539 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, Basis, Variant::BASIS) \ |
540 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, Transform3D, Variant::TRANSFORM3D) \ |
541 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, Color, Variant::COLOR) \ |
542 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, StringName, Variant::STRING_NAME) \ |
543 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, NodePath, Variant::NODE_PATH) \ |
544 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, RID, Variant::RID) \ |
545 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, Callable, Variant::CALLABLE) \ |
546 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, Signal, Variant::SIGNAL) \ |
547 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, Dictionary, Variant::DICTIONARY) \ |
548 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, Array, Variant::ARRAY) \ |
549 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, PackedByteArray, Variant::PACKED_BYTE_ARRAY) \ |
550 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, PackedInt32Array, Variant::PACKED_INT32_ARRAY) \ |
551 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, PackedInt64Array, Variant::PACKED_INT64_ARRAY) \ |
552 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, PackedFloat32Array, Variant::PACKED_FLOAT32_ARRAY) \ |
553 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, PackedFloat64Array, Variant::PACKED_FLOAT64_ARRAY) \ |
554 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, PackedStringArray, Variant::PACKED_STRING_ARRAY) \ |
555 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, PackedVector2Array, Variant::PACKED_VECTOR2_ARRAY) \ |
556 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, PackedVector3Array, Variant::PACKED_VECTOR3_ARRAY) \ |
557 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, PackedVector4Array, Variant::PACKED_VECTOR4_ARRAY) \ |
558 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, PackedColorArray, Variant::PACKED_COLOR_ARRAY) \ |
559 | | - /* MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, IPAddress, Variant::STRING) */ |
560 | | - |
561 | | -#define MAKE_TYPED_DICTIONARY_INFO(m_type, m_variant_type) \ |
562 | | - MAKE_TYPED_DICTIONARY_INFO_EXPANDED(m_type, m_variant_type, Variant, Variant::NIL) \ |
563 | | - MAKE_TYPED_DICTIONARY_INFO_NIL(m_type, m_variant_type) |
564 | | - |
565 | | -MAKE_TYPED_DICTIONARY_INFO_NIL(Variant, Variant::NIL) |
566 | | -MAKE_TYPED_DICTIONARY_INFO(bool, Variant::BOOL) |
567 | | -MAKE_TYPED_DICTIONARY_INFO(uint8_t, Variant::INT) |
568 | | -MAKE_TYPED_DICTIONARY_INFO(int8_t, Variant::INT) |
569 | | -MAKE_TYPED_DICTIONARY_INFO(uint16_t, Variant::INT) |
570 | | -MAKE_TYPED_DICTIONARY_INFO(int16_t, Variant::INT) |
571 | | -MAKE_TYPED_DICTIONARY_INFO(uint32_t, Variant::INT) |
572 | | -MAKE_TYPED_DICTIONARY_INFO(int32_t, Variant::INT) |
573 | | -MAKE_TYPED_DICTIONARY_INFO(uint64_t, Variant::INT) |
574 | | -MAKE_TYPED_DICTIONARY_INFO(int64_t, Variant::INT) |
575 | | -MAKE_TYPED_DICTIONARY_INFO(float, Variant::FLOAT) |
576 | | -MAKE_TYPED_DICTIONARY_INFO(double, Variant::FLOAT) |
577 | | -MAKE_TYPED_DICTIONARY_INFO(String, Variant::STRING) |
578 | | -MAKE_TYPED_DICTIONARY_INFO(Vector2, Variant::VECTOR2) |
579 | | -MAKE_TYPED_DICTIONARY_INFO(Vector2i, Variant::VECTOR2I) |
580 | | -MAKE_TYPED_DICTIONARY_INFO(Rect2, Variant::RECT2) |
581 | | -MAKE_TYPED_DICTIONARY_INFO(Rect2i, Variant::RECT2I) |
582 | | -MAKE_TYPED_DICTIONARY_INFO(Vector3, Variant::VECTOR3) |
583 | | -MAKE_TYPED_DICTIONARY_INFO(Vector3i, Variant::VECTOR3I) |
584 | | -MAKE_TYPED_DICTIONARY_INFO(Transform2D, Variant::TRANSFORM2D) |
585 | | -MAKE_TYPED_DICTIONARY_INFO(Plane, Variant::PLANE) |
586 | | -MAKE_TYPED_DICTIONARY_INFO(Quaternion, Variant::QUATERNION) |
587 | | -MAKE_TYPED_DICTIONARY_INFO(AABB, Variant::AABB) |
588 | | -MAKE_TYPED_DICTIONARY_INFO(Basis, Variant::BASIS) |
589 | | -MAKE_TYPED_DICTIONARY_INFO(Transform3D, Variant::TRANSFORM3D) |
590 | | -MAKE_TYPED_DICTIONARY_INFO(Color, Variant::COLOR) |
591 | | -MAKE_TYPED_DICTIONARY_INFO(StringName, Variant::STRING_NAME) |
592 | | -MAKE_TYPED_DICTIONARY_INFO(NodePath, Variant::NODE_PATH) |
593 | | -MAKE_TYPED_DICTIONARY_INFO(RID, Variant::RID) |
594 | | -MAKE_TYPED_DICTIONARY_INFO(Callable, Variant::CALLABLE) |
595 | | -MAKE_TYPED_DICTIONARY_INFO(Signal, Variant::SIGNAL) |
596 | | -MAKE_TYPED_DICTIONARY_INFO(Dictionary, Variant::DICTIONARY) |
597 | | -MAKE_TYPED_DICTIONARY_INFO(Array, Variant::ARRAY) |
598 | | -MAKE_TYPED_DICTIONARY_INFO(PackedByteArray, Variant::PACKED_BYTE_ARRAY) |
599 | | -MAKE_TYPED_DICTIONARY_INFO(PackedInt32Array, Variant::PACKED_INT32_ARRAY) |
600 | | -MAKE_TYPED_DICTIONARY_INFO(PackedInt64Array, Variant::PACKED_INT64_ARRAY) |
601 | | -MAKE_TYPED_DICTIONARY_INFO(PackedFloat32Array, Variant::PACKED_FLOAT32_ARRAY) |
602 | | -MAKE_TYPED_DICTIONARY_INFO(PackedFloat64Array, Variant::PACKED_FLOAT64_ARRAY) |
603 | | -MAKE_TYPED_DICTIONARY_INFO(PackedStringArray, Variant::PACKED_STRING_ARRAY) |
604 | | -MAKE_TYPED_DICTIONARY_INFO(PackedVector2Array, Variant::PACKED_VECTOR2_ARRAY) |
605 | | -MAKE_TYPED_DICTIONARY_INFO(PackedVector3Array, Variant::PACKED_VECTOR3_ARRAY) |
606 | | -MAKE_TYPED_DICTIONARY_INFO(PackedVector4Array, Variant::PACKED_VECTOR4_ARRAY) |
607 | | -MAKE_TYPED_DICTIONARY_INFO(PackedColorArray, Variant::PACKED_COLOR_ARRAY) |
608 | | -/* |
609 | | -MAKE_TYPED_DICTIONARY_INFO(IPAddress, Variant::STRING) |
610 | | -*/ |
611 | | - |
612 | | -#undef MAKE_TYPED_DICTIONARY_INFO |
613 | | -#undef MAKE_TYPED_DICTIONARY_INFO_NIL |
614 | | -#undef MAKE_TYPED_DICTIONARY_INFO_EXPANDED |
615 | | -#undef MAKE_TYPED_DICTIONARY_INFO_WITH_OBJECT |
616 | | - |
617 | 416 | #define CLASS_INFO(m_type) (GetTypeInfo<m_type *>::get_class_info()) |
618 | 417 |
|
619 | 418 | } // namespace godot |
|
0 commit comments