FTTArray.h 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. //FTTArray - [2020-04-13 11:57:47]
  2. #ifndef _FTTARRAY_H_
  3. #define _FTTARRAY_H_
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. /*
  7. 00189DB4 FTTArray<FTTPair<float,float>,16u>::Insert(FTTPair<float,float>&&)
  8. 0018A31A FTTArray<FTTPair<float,float>,16u>::Iterator::operator++()
  9. 0018A322 FTTArray<FTTPair<float,float>,16u>::Iterator::operator!=(FTTArray<FTTPair<float,float>,16u>::Iterator const&)
  10. 0018A32E FTTArray<FTTPair<float,float>,16u>::Iterator::operator*()
  11. 0018A332 FTTArray<FTTPair<float,float>,16u>::Iterator::operator->()
  12. 0018A338 FTTArray<FTTPair<float,float>,16u>::Iterator::operator+=(long const&)
  13. 0018A358 FTTArray<FTTPair<float,float>,16u>::Iterator::operator-=(long const&)
  14. 0018A378 FTTArray<FTTPair<float,float>,16u>::Iterator::operator[](long const&)
  15. 0018A384 FTTArray<FTTPair<float,float>,16u>::Iterator::operator+(long const&)
  16. 0018A3A0 FTTArray<FTTPair<float,float>,16u>::Iterator::operator-(long const&)
  17. 0018A3BC FTTArray<FTTPair<float,float>,16u>::Iterator::operator-(FTTArray<FTTPair<float,float>,16u>::Iterator const&)
  18. TShadowAABB 0x124 296
  19. 001C3788 FTTArray<TShadowAABB, 92u>::FTTArray(uint) 第二个参数是数量
  20. 001C37AE FTTArray<TShadowAABB, 256u>::FTTArray(uint)
  21. 001C6982 FTTArray<TShadowAABB *,256u>::Iterator::operator++()
  22. 001C698A FTTArray<TShadowAABB *,256u>::Iterator::operator!=(FTTArray<TShadowAABB *,256u>::Iterator const&)
  23. 001C6996 FTTArray<TShadowAABB *,256u>::Iterator::operator*()
  24. 001C699A FTTArray<TShadowAABB *,256u>::Iterator::operator->()
  25. 001C69A0 FTTArray<TShadowAABB *,256u>::Iterator::operator+=(long const&)
  26. 001C69C0 FTTArray<TShadowAABB *,256u>::Iterator::operator-=(long const&)
  27. 001C69E0 FTTArray<TShadowAABB *,256u>::Iterator::operator[](long const&)
  28. 001C69EC FTTArray<TShadowAABB *,256u>::Iterator::operator+(long const&)
  29. 001C6A08 FTTArray<TShadowAABB *,256u>::Iterator::operator-(long const&)
  30. 001C6A24 FTTArray<TShadowAABB *,256u>::Iterator::operator-(FTTArray<TShadowAABB *,256u>::Iterator const&)
  31. */
  32. struct TypeData {
  33. int len;
  34. void *data;
  35. };
  36. template <class T, uint N>
  37. class FTTArray {
  38. public:
  39. FTTArray(int a2) {
  40. m_count = a2;
  41. };
  42. //Iterator<T> *CreateIterator() {
  43. // return new Iterator<T>(&array_0[0]);
  44. //}
  45. T *Insert(T &&a2) {
  46. // int v2; //r2
  47. // float v3; //r12
  48. // T *result; //r0
  49. // float v5; //r2
  50. // v2 = m_count;
  51. // m_count = v2 + 1;
  52. // v3 = array_0[v2].field_0;
  53. // array_0[v2].field_0 = a2->field_0;
  54. // result = &array_0[v2];
  55. // a2->field_0 = v3;
  56. // v5 = result->field_4;
  57. // result->field_4 = a2->field_4;
  58. // a2->field_4 = v5;
  59. // return result;
  60. LOGE("Insertthis=%p,a2=%p",this,&a2);
  61. return ((T*)rand());
  62. }
  63. class Iterator {
  64. public:
  65. Iterator(T *p_data) : m_buf(p_data) {
  66. }
  67. //0018A31A
  68. virtual T *operator++() {
  69. m_buf++;
  70. return m_buf;
  71. }
  72. virtual bool operator!=(Iterator const &a1) {
  73. return m_buf != a1.m_buf;
  74. }
  75. //0018A32E
  76. virtual T *operator*() {
  77. return m_buf;
  78. }
  79. //0018A332
  80. virtual T *operator->() {
  81. return m_buf;
  82. }
  83. //0018A338
  84. virtual TypeData operator+=(int *a3) {
  85. m_buf += *a3;
  86. TypeData result;
  87. result.len = sizeof(T);
  88. result.data = (void *)m_buf;
  89. return result;
  90. }
  91. //0018A358
  92. virtual TypeData operator-=(int *a3) {
  93. m_buf += *a3;
  94. TypeData result;
  95. result.len = sizeof(T);
  96. result.data = (void *)m_buf;
  97. return result;
  98. }
  99. //0018A378
  100. virtual T *operator[](int *a2) {
  101. return m_buf + *a2;
  102. }
  103. //0018A384
  104. //FTTArray<FTTPair<float,float>,16u>::Iterator::operator+(long const&)
  105. virtual TypeData operator+(int *a3) {
  106. T *v3 = m_buf + *a3;
  107. TypeData result;
  108. result.len = sizeof(T);
  109. result.data = (void *)v3;
  110. return result;
  111. }
  112. //0018A3A0
  113. virtual TypeData operator-(int *a3) {
  114. T *v3 = m_buf - *a3;
  115. TypeData result;
  116. result.len = sizeof(T);
  117. result.data = (void *)v3;
  118. return result;
  119. }
  120. //0018A3BC
  121. virtual int operator-(Iterator const &a2) {
  122. return m_buf - a2.m_buf;
  123. }
  124. public:
  125. T *m_buf;
  126. };
  127. T array_0[N];
  128. int m_count;
  129. };
  130. /*
  131. bool __fastcall FTTArray<FTTPair<float,float>,16u>::Iterator::operator!=(int a1, int a2) {
  132. return *(_DWORD *)(a1 + 4) != *(_DWORD *)(a2 + 4);
  133. }
  134. int __fastcall FTTArray<FTTPair<float,float>,16u>::Iterator::operator*(int a1) {
  135. return *(_DWORD *)(a1 + 4);
  136. }
  137. 0018A384
  138. _DWORD *__fastcall FTTArray<FTTPair<float,float>,16u>::Iterator::operator+(_DWORD *result, int a2, _DWORD *a3) {
  139. int v3; //r1
  140. v3 = *(_DWORD *)(a2 + 4) + 8 * *a3;
  141. *result = &off_3231A0;
  142. result[1] = v3;
  143. return result;
  144. }
  145. int __fastcall FTTArray<FTTPair<float,float>,16u>::Iterator::operator++(int result) {
  146. *(_DWORD *)(result + 4) += 8;
  147. return result;
  148. }
  149. _QWORD *__fastcall FTTArray<FTTPair<float,float>,16u>::Iterator::operator+=(_QWORD *result, int a2, _DWORD *a3) {
  150. __int64 v3; //r1
  151. HIDWORD(v3) = *(_DWORD *)(a2 + 4) + 8 * *a3;
  152. *(_DWORD *)(a2 + 4) = HIDWORD(v3);
  153. LODWORD(v3) = &off_3231A0;
  154. *result = v3;
  155. return result;
  156. }
  157. int __fastcall FTTArray<FTTPair<float,float>,16u>::Iterator::operator-(int a1, int a2) {
  158. return (*(_DWORD *)(a1 + 4) - *(_DWORD *)(a2 + 4)) >> 3;
  159. }
  160. _DWORD *__fastcall FTTArray<FTTPair<float,float>,16u>::Iterator::operator-(_DWORD *result, int a2, _DWORD *a3) {
  161. int v3; //r1
  162. v3 = *(_DWORD *)(a2 + 4) - 8 * *a3;
  163. *result = &off_3231A0;
  164. result[1] = v3;
  165. return result;
  166. }
  167. _QWORD *__fastcall FTTArray<FTTPair<float,float>,16u>::Iterator::operator-=(_QWORD *result, int a2, _DWORD *a3) {
  168. __int64 v3; //r1
  169. HIDWORD(v3) = *(_DWORD *)(a2 + 4) - 8 * *a3;
  170. *(_DWORD *)(a2 + 4) = HIDWORD(v3);
  171. LODWORD(v3) = &off_3231A0;
  172. *result = v3;
  173. return result;
  174. }
  175. int __fastcall FTTArray<FTTPair<float,float>,16u>::Iterator::operator->(int a1) {
  176. return *(_DWORD *)(a1 + 4);
  177. }
  178. */
  179. #endif //_FTTARRAY_H_