ScriptVector.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. #include "ScriptSystem.h"
  2. #pragma once
  3. namespace Atomic
  4. {
  5. class ScriptVector : public RefCounted
  6. {
  7. ATOMIC_REFCOUNTED(ScriptVector)
  8. public:
  9. ScriptVector() : RefCounted()
  10. {
  11. }
  12. virtual ~ScriptVector()
  13. {
  14. }
  15. RefCounted* At(unsigned index) const
  16. {
  17. if (index >= refVector_.Size())
  18. return 0;
  19. return refVector_[index];
  20. }
  21. void Push(RefCounted* refCounted)
  22. {
  23. // TODO: check null?
  24. refVector_.Push(SharedPtr<RefCounted>(refCounted));
  25. }
  26. void SetAt(unsigned index, RefCounted* refCounted)
  27. {
  28. refVector_[index] = refCounted;
  29. }
  30. void Insert(unsigned index, RefCounted* refCounted)
  31. {
  32. refVector_.Insert(index, SharedPtr<RefCounted>(refCounted));
  33. }
  34. void Erase(unsigned index)
  35. {
  36. refVector_.Erase(index);
  37. }
  38. bool Remove(RefCounted* refCounted)
  39. {
  40. return refVector_.Remove(SharedPtr<RefCounted>(refCounted));
  41. }
  42. void Clear()
  43. {
  44. refVector_.Clear();
  45. }
  46. unsigned GetSize() const
  47. {
  48. return refVector_.Size();
  49. }
  50. template <class T>
  51. bool AdaptFromVector(PODVector<T> vectorIn)
  52. {
  53. Vector<SharedPtr<RefCounted>> keepAlive = refVector_;
  54. refVector_.Clear();
  55. for (unsigned i = 0; i < vectorIn.Size(); i++)
  56. {
  57. refVector_.Push(SharedPtr<RefCounted>(vectorIn[i]));
  58. }
  59. return true;
  60. }
  61. template <class T>
  62. bool AdaptFromVector(Vector<T> vectorIn)
  63. {
  64. Vector<SharedPtr<RefCounted>> keepAlive = refVector_;
  65. refVector_.Clear();
  66. for (unsigned i = 0; i < vectorIn.Size(); i++)
  67. {
  68. refVector_.Push((T) vectorIn[i]);
  69. }
  70. return true;
  71. }
  72. template <class T>
  73. bool AdaptFromVector(Vector<WeakPtr<T>> vectorIn)
  74. {
  75. Vector<SharedPtr<RefCounted>> keepAlive = refVector_;
  76. refVector_.Clear();
  77. for (unsigned i = 0; i < vectorIn.Size(); i++)
  78. {
  79. refVector_.Push(SharedPtr<RefCounted>((RefCounted*) vectorIn[i]));
  80. }
  81. return true;
  82. }
  83. template <class T>
  84. bool AdaptFromVector(Vector<SharedPtr<T>> vectorIn)
  85. {
  86. Vector<SharedPtr<RefCounted>> keepAlive = refVector_;
  87. refVector_.Clear();
  88. for (unsigned i = 0; i < vectorIn.Size(); i++)
  89. {
  90. refVector_.Push(SharedPtr<RefCounted>((RefCounted*) vectorIn[i]));
  91. }
  92. return true;
  93. }
  94. template <class T>
  95. bool AdaptToVector(PODVector<T> vectorOut)
  96. {
  97. vectorOut.Clear();
  98. for (unsigned i = 0; i < refVector_.Size(); i++)
  99. {
  100. vectorOut.Push(static_cast<T>(refVector_[i].Get()));
  101. }
  102. return true;
  103. }
  104. template <class T>
  105. bool AdaptToVector(Vector<T> vectorOut)
  106. {
  107. vectorOut.Clear();
  108. for (unsigned i = 0; i < refVector_.Size(); i++)
  109. {
  110. vectorOut.Push((T) refVector_[i]);
  111. }
  112. return true;
  113. }
  114. template <class T>
  115. bool AdaptToVector(Vector<SharedPtr<T>> vectorOut)
  116. {
  117. vectorOut.Clear();
  118. for (unsigned i = 0; i < refVector_.Size(); i++)
  119. {
  120. vectorOut.Push(SharedPtr<T>((T) refVector_[i]));
  121. }
  122. return true;
  123. }
  124. template <class T>
  125. bool AdaptToVector(Vector<WeakPtr<T>> vectorOut)
  126. {
  127. vectorOut.Clear();
  128. for (unsigned i = 0; i < refVector_.Size(); i++)
  129. {
  130. vectorOut.Push(WeakPtr<T>((T) refVector_[i]));
  131. }
  132. return true;
  133. }
  134. private:
  135. Vector<SharedPtr<RefCounted>> refVector_;
  136. };
  137. }