Array.hpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. #ifndef ARRAY_H
  2. #define ARRAY_H
  3. #include <gdnative/array.h>
  4. #include "String.hpp"
  5. namespace godot {
  6. namespace helpers {
  7. template <typename T, typename ValueT>
  8. T append_all(T appendable, ValueT value) {
  9. appendable.append(value);
  10. return appendable;
  11. }
  12. template <typename T, typename ValueT, typename... Args>
  13. T append_all(T appendable, ValueT value, Args... args) {
  14. appendable.append(value);
  15. return append_all(appendable, args...);
  16. }
  17. template <typename T>
  18. T append_all(T appendable) {
  19. return appendable;
  20. }
  21. template <typename KV, typename KeyT, typename ValueT>
  22. KV add_all(KV kv, KeyT key, ValueT value) {
  23. kv[key] = value;
  24. return kv;
  25. }
  26. template <typename KV, typename KeyT, typename ValueT, typename... Args>
  27. KV add_all(KV kv, KeyT key, ValueT value, Args... args) {
  28. kv[key] = value;
  29. return add_all(kv, args...);
  30. }
  31. template <typename KV>
  32. KV add_all(KV kv) {
  33. return kv;
  34. }
  35. } // namespace helpers
  36. class Variant;
  37. class PoolByteArray;
  38. class PoolIntArray;
  39. class PoolRealArray;
  40. class PoolStringArray;
  41. class PoolVector2Array;
  42. class PoolVector3Array;
  43. class PoolColorArray;
  44. class Object;
  45. class Array {
  46. godot_array _godot_array;
  47. friend class Variant;
  48. friend class Dictionary;
  49. friend class String;
  50. inline explicit Array(const godot_array &other) {
  51. _godot_array = other;
  52. }
  53. public:
  54. Array();
  55. Array(const Array &other);
  56. Array &operator=(const Array &other);
  57. Array(const PoolByteArray &a);
  58. Array(const PoolIntArray &a);
  59. Array(const PoolRealArray &a);
  60. Array(const PoolStringArray &a);
  61. Array(const PoolVector2Array &a);
  62. Array(const PoolVector3Array &a);
  63. Array(const PoolColorArray &a);
  64. template <class... Args>
  65. static Array make(Args... args) {
  66. return helpers::append_all(Array(), args...);
  67. }
  68. Variant &operator[](const int idx);
  69. const Variant &operator[](const int idx) const;
  70. void append(const Variant &v);
  71. void clear();
  72. int count(const Variant &v);
  73. bool empty() const;
  74. void erase(const Variant &v);
  75. Variant front() const;
  76. Variant back() const;
  77. int find(const Variant &what, const int from = 0) const;
  78. int find_last(const Variant &what) const;
  79. bool has(const Variant &what) const;
  80. uint32_t hash() const;
  81. void insert(const int pos, const Variant &value);
  82. void invert();
  83. bool is_shared() const;
  84. Variant pop_back();
  85. Variant pop_front();
  86. void push_back(const Variant &v);
  87. void push_front(const Variant &v);
  88. void remove(const int idx);
  89. int size() const;
  90. void resize(const int size);
  91. int rfind(const Variant &what, const int from = -1) const;
  92. void sort();
  93. void sort_custom(Object *obj, const String &func);
  94. int bsearch(const Variant &value, const bool before = true);
  95. int bsearch_custom(const Variant &value, const Object *obj,
  96. const String &func, const bool before = true);
  97. Array duplicate(const bool deep = false) const;
  98. Variant max() const;
  99. Variant min() const;
  100. void shuffle();
  101. ~Array();
  102. };
  103. } // namespace godot
  104. #endif // ARRAY_H