Array.cpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. #include "Array.hpp"
  2. #include "Variant.hpp"
  3. #include "GodotGlobal.hpp"
  4. #include <cstdlib>
  5. namespace godot {
  6. class Object;
  7. Array::Array()
  8. {
  9. godot::api->godot_array_new(&_godot_array);
  10. }
  11. Array::Array(const Array & other)
  12. {
  13. godot::api->godot_array_new_copy(&_godot_array, &other._godot_array);
  14. }
  15. Array & Array::operator=(const Array & other)
  16. {
  17. godot::api->godot_array_destroy(&_godot_array);
  18. godot::api->godot_array_new_copy(&_godot_array, &other._godot_array);
  19. return *this;
  20. }
  21. Array::Array(const PoolByteArray& a)
  22. {
  23. godot::api->godot_array_new_pool_byte_array(&_godot_array, (godot_pool_byte_array *) &a);
  24. }
  25. Array::Array(const PoolIntArray& a)
  26. {
  27. godot::api->godot_array_new_pool_int_array(&_godot_array, (godot_pool_int_array *) &a);
  28. }
  29. Array::Array(const PoolRealArray& a)
  30. {
  31. godot::api->godot_array_new_pool_real_array(&_godot_array, (godot_pool_real_array *) &a);
  32. }
  33. Array::Array(const PoolStringArray& a)
  34. {
  35. godot::api->godot_array_new_pool_string_array(&_godot_array, (godot_pool_string_array *) &a);
  36. }
  37. Array::Array(const PoolVector2Array& a)
  38. {
  39. godot::api->godot_array_new_pool_vector2_array(&_godot_array, (godot_pool_vector2_array *) &a);
  40. }
  41. Array::Array(const PoolVector3Array& a)
  42. {
  43. godot::api->godot_array_new_pool_vector3_array(&_godot_array, (godot_pool_vector3_array *) &a);
  44. }
  45. Array::Array(const PoolColorArray& a)
  46. {
  47. godot::api->godot_array_new_pool_color_array(&_godot_array, (godot_pool_color_array *) &a);
  48. }
  49. Variant& Array::operator [](const int idx)
  50. {
  51. godot_variant *v = godot::api->godot_array_operator_index(&_godot_array, idx);
  52. return *(Variant *) v;
  53. }
  54. Variant Array::operator [](const int idx) const
  55. {
  56. // Yes, I'm casting away the const... you can hate me now.
  57. // since the result is
  58. godot_variant *v = godot::api->godot_array_operator_index((godot_array *) &_godot_array, idx);
  59. return *(Variant *) v;
  60. }
  61. void Array::append(const Variant& v)
  62. {
  63. godot::api->godot_array_append(&_godot_array, (godot_variant *) &v);
  64. }
  65. void Array::clear()
  66. {
  67. godot::api->godot_array_clear(&_godot_array);
  68. }
  69. int Array::count(const Variant& v)
  70. {
  71. return godot::api->godot_array_count(&_godot_array, (godot_variant *) &v);
  72. }
  73. bool Array::empty() const
  74. {
  75. return godot::api->godot_array_empty(&_godot_array);
  76. }
  77. void Array::erase(const Variant& v)
  78. {
  79. godot::api->godot_array_erase(&_godot_array, (godot_variant *) &v);
  80. }
  81. Variant Array::front() const
  82. {
  83. godot_variant v = godot::api->godot_array_front(&_godot_array);
  84. return *(Variant *) &v;
  85. }
  86. Variant Array::back() const
  87. {
  88. godot_variant v = godot::api->godot_array_back(&_godot_array);
  89. return *(Variant *) &v;
  90. }
  91. int Array::find(const Variant& what, const int from)
  92. {
  93. return godot::api->godot_array_find(&_godot_array, (godot_variant *) &what, from);
  94. }
  95. int Array::find_last(const Variant& what)
  96. {
  97. return godot::api->godot_array_find_last(&_godot_array, (godot_variant *) &what);
  98. }
  99. bool Array::has(const Variant& what) const
  100. {
  101. return godot::api->godot_array_has(&_godot_array, (godot_variant *) &what);
  102. }
  103. uint32_t Array::hash() const
  104. {
  105. return godot::api->godot_array_hash(&_godot_array);
  106. }
  107. void Array::insert(const int pos, const Variant& value)
  108. {
  109. godot::api->godot_array_insert(&_godot_array, pos, (godot_variant *) &value);
  110. }
  111. void Array::invert()
  112. {
  113. godot::api->godot_array_invert(&_godot_array);
  114. }
  115. Variant Array::pop_back()
  116. {
  117. godot_variant v = godot::api->godot_array_pop_back(&_godot_array);
  118. return *(Variant *) &v;
  119. }
  120. Variant Array::pop_front()
  121. {
  122. godot_variant v = godot::api->godot_array_pop_front(&_godot_array);
  123. return *(Variant *) &v;
  124. }
  125. void Array::push_back(const Variant& v)
  126. {
  127. godot::api->godot_array_push_back(&_godot_array, (godot_variant *) &v);
  128. }
  129. void Array::push_front(const Variant& v)
  130. {
  131. godot::api->godot_array_push_front(&_godot_array, (godot_variant *) &v);
  132. }
  133. void Array::remove(const int idx)
  134. {
  135. godot::api->godot_array_remove(&_godot_array, idx);
  136. }
  137. int Array::size() const
  138. {
  139. return godot::api->godot_array_size(&_godot_array);
  140. }
  141. void Array::resize(const int size)
  142. {
  143. godot::api->godot_array_resize(&_godot_array, size);
  144. }
  145. int Array::rfind(const Variant& what, const int from)
  146. {
  147. return godot::api->godot_array_rfind(&_godot_array, (godot_variant *) &what, from);
  148. }
  149. void Array::sort()
  150. {
  151. godot::api->godot_array_sort(&_godot_array);
  152. }
  153. void Array::sort_custom(Object *obj, const String& func)
  154. {
  155. godot::api->godot_array_sort_custom(&_godot_array, (godot_object *) obj, (godot_string *) &func);
  156. }
  157. Array::~Array()
  158. {
  159. godot::api->godot_array_destroy(&_godot_array);
  160. }
  161. }