PageRenderTime 63ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/physcomparison/src/app/cx/FastList.hx

https://bitbucket.org/triplefox/fireball
Haxe | 2449 lines | 2003 code | 446 blank | 0 comment | 162 complexity | a4e94a13b16a6e031a867c1b892f00ca MD5 | raw file

Large files files are truncated, but you can click here to view the full file

  1. package cx;
  2. import nape.Array2; import nape.Collide; import nape.Config; import nape.Constraint; import nape.Dynamics; import nape.FastMath; import nape.Geom; import nape.PhysAux; import nape.PhysObj; import nape.Shape; import nape.Space; import nape.Tools; import nape.VecMath; import cx.Algorithm; import cx.Allocator; import cx.MixList;
  3. class CxFastList_PhysObj {
  4. private var head:CxFastNode_PhysObj;
  5. private var alloc:Allocator;
  6. public function new(?a:Allocator) {
  7. alloc = if(a==null) Allocator.GLOBAL else a;
  8. }
  9. public inline function add(o:PhysObj) {
  10. var temp = {
  11. var ret = alloc.CxAlloc_CxFastNode_PhysObj();
  12. ret.elt = o;
  13. ret;
  14. };
  15. temp.next = begin();
  16. head=temp;
  17. }
  18. public inline function pop():PhysObj {
  19. var ret = begin();
  20. head=ret.next;
  21. var retv = ret.elem();
  22. alloc.CxFree_CxFastNode_PhysObj(ret);
  23. return retv;
  24. }
  25. public inline function remove(obj:PhysObj):Bool {
  26. var pre = null;
  27. var cur = begin();
  28. var ret = false;
  29. while(cur!=end()) {
  30. if(cur.elem()==obj) {
  31. cur = erase(pre,cur);
  32. ret = true;
  33. break;
  34. }
  35. pre = cur;
  36. cur = cur.next;
  37. }
  38. return ret;
  39. }
  40. public inline function erase(pre:CxFastNode_PhysObj,cur:CxFastNode_PhysObj):CxFastNode_PhysObj {
  41. var old = cur; cur = cur.next;
  42. if(pre==null) head=cur;
  43. else pre.next = cur;
  44. {};
  45. alloc.CxFree_CxFastNode_PhysObj(old);
  46. return cur;
  47. }
  48. public inline function splice(pre:CxFastNode_PhysObj,cur:CxFastNode_PhysObj,n:Int):CxFastNode_PhysObj {
  49. while(n-->0 && cur!=end())
  50. cur = erase(pre,cur);
  51. return cur;
  52. }
  53. public inline function clear() {
  54. if(true) {
  55. while(!empty()) {
  56. var old = begin();
  57. head=old.next;
  58. {};
  59. alloc.CxFree_CxFastNode_PhysObj(old);
  60. }
  61. }else head=end();
  62. }
  63. public inline function reverse() {
  64. var tmp = new CxFastList_PhysObj();
  65. while(!empty())
  66. tmp.add(pop());
  67. head=tmp.begin();
  68. }
  69. public inline function empty():Bool return begin()==end()
  70. public inline function size():Int {
  71. var cnt = 0;
  72. var cur = begin();
  73. while(cur!=end()) { cnt++; cur=cur.next; }
  74. return cnt;
  75. }
  76. public inline function has(obj:PhysObj) return ({
  77. var ret = false;
  78. {
  79. var cxiterator = this.begin();
  80. while(cxiterator != this.end()) {
  81. var cxite = cxiterator.elem();
  82. {
  83. {
  84. if(cxite==obj) {
  85. ret = true;
  86. break;
  87. }
  88. };
  89. }
  90. cxiterator = cxiterator.next;
  91. }
  92. };
  93. ret;
  94. })
  95. public inline function front() return begin().elem()
  96. public inline function back() {
  97. var ret = begin();
  98. var cur = ret;
  99. while(cur!=end()) { ret = cur; cur = cur.next; }
  100. return ret.elem();
  101. }
  102. public inline function at(ind:Int) {
  103. var ret = begin();
  104. while(ind-->0) ret = ret.next;
  105. return ret.elem();
  106. }
  107. public inline function begin() return head
  108. public inline function end () return null
  109. }class CxFastList_ObjArb {
  110. private var head:CxFastNode_ObjArb;
  111. private var alloc:Allocator;
  112. public function new(?a:Allocator) {
  113. alloc = if(a==null) Allocator.GLOBAL else a;
  114. }
  115. public inline function add(o:ObjArb) {
  116. var temp = {
  117. var ret = alloc.CxAlloc_CxFastNode_ObjArb();
  118. ret.elt = o;
  119. ret;
  120. };
  121. temp.next = begin();
  122. head=temp;
  123. }
  124. public inline function pop():ObjArb {
  125. var ret = begin();
  126. head=ret.next;
  127. var retv = ret.elem();
  128. alloc.CxFree_CxFastNode_ObjArb(ret);
  129. return retv;
  130. }
  131. public inline function remove(obj:ObjArb):Bool {
  132. var pre = null;
  133. var cur = begin();
  134. var ret = false;
  135. while(cur!=end()) {
  136. if(cur.elem()==obj) {
  137. cur = erase(pre,cur);
  138. ret = true;
  139. break;
  140. }
  141. pre = cur;
  142. cur = cur.next;
  143. }
  144. return ret;
  145. }
  146. public inline function erase(pre:CxFastNode_ObjArb,cur:CxFastNode_ObjArb):CxFastNode_ObjArb {
  147. var old = cur; cur = cur.next;
  148. if(pre==null) head=cur;
  149. else pre.next = cur;
  150. {};
  151. alloc.CxFree_CxFastNode_ObjArb(old);
  152. return cur;
  153. }
  154. public inline function splice(pre:CxFastNode_ObjArb,cur:CxFastNode_ObjArb,n:Int):CxFastNode_ObjArb {
  155. while(n-->0 && cur!=end())
  156. cur = erase(pre,cur);
  157. return cur;
  158. }
  159. public inline function clear() {
  160. if(true) {
  161. while(!empty()) {
  162. var old = begin();
  163. head=old.next;
  164. {};
  165. alloc.CxFree_CxFastNode_ObjArb(old);
  166. }
  167. }else head=end();
  168. }
  169. public inline function reverse() {
  170. var tmp = new CxFastList_ObjArb();
  171. while(!empty())
  172. tmp.add(pop());
  173. head=tmp.begin();
  174. }
  175. public inline function empty():Bool return begin()==end()
  176. public inline function size():Int {
  177. var cnt = 0;
  178. var cur = begin();
  179. while(cur!=end()) { cnt++; cur=cur.next; }
  180. return cnt;
  181. }
  182. public inline function has(obj:ObjArb) return ({
  183. var ret = false;
  184. {
  185. var cxiterator = this.begin();
  186. while(cxiterator != this.end()) {
  187. var cxite = cxiterator.elem();
  188. {
  189. {
  190. if(cxite==obj) {
  191. ret = true;
  192. break;
  193. }
  194. };
  195. }
  196. cxiterator = cxiterator.next;
  197. }
  198. };
  199. ret;
  200. })
  201. public inline function front() return begin().elem()
  202. public inline function back() {
  203. var ret = begin();
  204. var cur = ret;
  205. while(cur!=end()) { ret = cur; cur = cur.next; }
  206. return ret.elem();
  207. }
  208. public inline function at(ind:Int) {
  209. var ret = begin();
  210. while(ind-->0) ret = ret.next;
  211. return ret.elem();
  212. }
  213. public inline function begin() return head
  214. public inline function end () return null
  215. }class CxFastList_Arbiter {
  216. private var head:CxFastNode_Arbiter;
  217. private var alloc:Allocator;
  218. public function new(?a:Allocator) {
  219. alloc = if(a==null) Allocator.GLOBAL else a;
  220. }
  221. public inline function add(o:Arbiter) {
  222. var temp = {
  223. var ret = alloc.CxAlloc_CxFastNode_Arbiter();
  224. ret.elt = o;
  225. ret;
  226. };
  227. temp.next = begin();
  228. head=temp;
  229. }
  230. public inline function pop():Arbiter {
  231. var ret = begin();
  232. head=ret.next;
  233. var retv = ret.elem();
  234. alloc.CxFree_CxFastNode_Arbiter(ret);
  235. return retv;
  236. }
  237. public inline function remove(obj:Arbiter):Bool {
  238. var pre = null;
  239. var cur = begin();
  240. var ret = false;
  241. while(cur!=end()) {
  242. if(cur.elem()==obj) {
  243. cur = erase(pre,cur);
  244. ret = true;
  245. break;
  246. }
  247. pre = cur;
  248. cur = cur.next;
  249. }
  250. return ret;
  251. }
  252. public inline function erase(pre:CxFastNode_Arbiter,cur:CxFastNode_Arbiter):CxFastNode_Arbiter {
  253. var old = cur; cur = cur.next;
  254. if(pre==null) head=cur;
  255. else pre.next = cur;
  256. {};
  257. alloc.CxFree_CxFastNode_Arbiter(old);
  258. return cur;
  259. }
  260. public inline function splice(pre:CxFastNode_Arbiter,cur:CxFastNode_Arbiter,n:Int):CxFastNode_Arbiter {
  261. while(n-->0 && cur!=end())
  262. cur = erase(pre,cur);
  263. return cur;
  264. }
  265. public inline function clear() {
  266. if(true) {
  267. while(!empty()) {
  268. var old = begin();
  269. head=old.next;
  270. {};
  271. alloc.CxFree_CxFastNode_Arbiter(old);
  272. }
  273. }else head=end();
  274. }
  275. public inline function reverse() {
  276. var tmp = new CxFastList_Arbiter();
  277. while(!empty())
  278. tmp.add(pop());
  279. head=tmp.begin();
  280. }
  281. public inline function empty():Bool return begin()==end()
  282. public inline function size():Int {
  283. var cnt = 0;
  284. var cur = begin();
  285. while(cur!=end()) { cnt++; cur=cur.next; }
  286. return cnt;
  287. }
  288. public inline function has(obj:Arbiter) return ({
  289. var ret = false;
  290. {
  291. var cxiterator = this.begin();
  292. while(cxiterator != this.end()) {
  293. var cxite = cxiterator.elem();
  294. {
  295. {
  296. if(cxite==obj) {
  297. ret = true;
  298. break;
  299. }
  300. };
  301. }
  302. cxiterator = cxiterator.next;
  303. }
  304. };
  305. ret;
  306. })
  307. public inline function front() return begin().elem()
  308. public inline function back() {
  309. var ret = begin();
  310. var cur = ret;
  311. while(cur!=end()) { ret = cur; cur = cur.next; }
  312. return ret.elem();
  313. }
  314. public inline function at(ind:Int) {
  315. var ret = begin();
  316. while(ind-->0) ret = ret.next;
  317. return ret.elem();
  318. }
  319. public inline function begin() return head
  320. public inline function end () return null
  321. }class CxFastList_Contact {
  322. private var head:CxFastNode_Contact;
  323. private var alloc:Allocator;
  324. public function new(?a:Allocator) {
  325. alloc = if(a==null) Allocator.GLOBAL else a;
  326. }
  327. public inline function add(o:Contact) {
  328. var temp = {
  329. var ret = alloc.CxAlloc_CxFastNode_Contact();
  330. ret.elt = o;
  331. ret;
  332. };
  333. temp.next = begin();
  334. head=temp;
  335. }
  336. public inline function pop():Contact {
  337. var ret = begin();
  338. head=ret.next;
  339. var retv = ret.elem();
  340. alloc.CxFree_CxFastNode_Contact(ret);
  341. return retv;
  342. }
  343. public inline function remove(obj:Contact):Bool {
  344. var pre = null;
  345. var cur = begin();
  346. var ret = false;
  347. while(cur!=end()) {
  348. if(cur.elem()==obj) {
  349. cur = erase(pre,cur);
  350. ret = true;
  351. break;
  352. }
  353. pre = cur;
  354. cur = cur.next;
  355. }
  356. return ret;
  357. }
  358. public inline function erase(pre:CxFastNode_Contact,cur:CxFastNode_Contact):CxFastNode_Contact {
  359. var old = cur; cur = cur.next;
  360. if(pre==null) head=cur;
  361. else pre.next = cur;
  362. {};
  363. alloc.CxFree_CxFastNode_Contact(old);
  364. return cur;
  365. }
  366. public inline function splice(pre:CxFastNode_Contact,cur:CxFastNode_Contact,n:Int):CxFastNode_Contact {
  367. while(n-->0 && cur!=end())
  368. cur = erase(pre,cur);
  369. return cur;
  370. }
  371. public inline function clear() {
  372. if(true) {
  373. while(!empty()) {
  374. var old = begin();
  375. head=old.next;
  376. {};
  377. alloc.CxFree_CxFastNode_Contact(old);
  378. }
  379. }else head=end();
  380. }
  381. public inline function reverse() {
  382. var tmp = new CxFastList_Contact();
  383. while(!empty())
  384. tmp.add(pop());
  385. head=tmp.begin();
  386. }
  387. public inline function empty():Bool return begin()==end()
  388. public inline function size():Int {
  389. var cnt = 0;
  390. var cur = begin();
  391. while(cur!=end()) { cnt++; cur=cur.next; }
  392. return cnt;
  393. }
  394. public inline function has(obj:Contact) return ({
  395. var ret = false;
  396. {
  397. var cxiterator = this.begin();
  398. while(cxiterator != this.end()) {
  399. var cxite = cxiterator.elem();
  400. {
  401. {
  402. if(cxite==obj) {
  403. ret = true;
  404. break;
  405. }
  406. };
  407. }
  408. cxiterator = cxiterator.next;
  409. }
  410. };
  411. ret;
  412. })
  413. public inline function front() return begin().elem()
  414. public inline function back() {
  415. var ret = begin();
  416. var cur = ret;
  417. while(cur!=end()) { ret = cur; cur = cur.next; }
  418. return ret.elem();
  419. }
  420. public inline function at(ind:Int) {
  421. var ret = begin();
  422. while(ind-->0) ret = ret.next;
  423. return ret.elem();
  424. }
  425. public inline function begin() return head
  426. public inline function end () return null
  427. }class CxFastList_GeomPoly {
  428. private var head:CxFastNode_GeomPoly;
  429. private var alloc:Allocator;
  430. public function new(?a:Allocator) {
  431. alloc = if(a==null) Allocator.GLOBAL else a;
  432. }
  433. public inline function add(o:GeomPoly) {
  434. var temp = {
  435. var ret = alloc.CxAlloc_CxFastNode_GeomPoly();
  436. ret.elt = o;
  437. ret;
  438. };
  439. temp.next = begin();
  440. head=temp;
  441. }
  442. public inline function pop():GeomPoly {
  443. var ret = begin();
  444. head=ret.next;
  445. var retv = ret.elem();
  446. alloc.CxFree_CxFastNode_GeomPoly(ret);
  447. return retv;
  448. }
  449. public inline function remove(obj:GeomPoly):Bool {
  450. var pre = null;
  451. var cur = begin();
  452. var ret = false;
  453. while(cur!=end()) {
  454. if(cur.elem()==obj) {
  455. cur = erase(pre,cur);
  456. ret = true;
  457. break;
  458. }
  459. pre = cur;
  460. cur = cur.next;
  461. }
  462. return ret;
  463. }
  464. public inline function erase(pre:CxFastNode_GeomPoly,cur:CxFastNode_GeomPoly):CxFastNode_GeomPoly {
  465. var old = cur; cur = cur.next;
  466. if(pre==null) head=cur;
  467. else pre.next = cur;
  468. {};
  469. alloc.CxFree_CxFastNode_GeomPoly(old);
  470. return cur;
  471. }
  472. public inline function splice(pre:CxFastNode_GeomPoly,cur:CxFastNode_GeomPoly,n:Int):CxFastNode_GeomPoly {
  473. while(n-->0 && cur!=end())
  474. cur = erase(pre,cur);
  475. return cur;
  476. }
  477. public inline function clear() {
  478. if(true) {
  479. while(!empty()) {
  480. var old = begin();
  481. head=old.next;
  482. {};
  483. alloc.CxFree_CxFastNode_GeomPoly(old);
  484. }
  485. }else head=end();
  486. }
  487. public inline function reverse() {
  488. var tmp = new CxFastList_GeomPoly();
  489. while(!empty())
  490. tmp.add(pop());
  491. head=tmp.begin();
  492. }
  493. public inline function empty():Bool return begin()==end()
  494. public inline function size():Int {
  495. var cnt = 0;
  496. var cur = begin();
  497. while(cur!=end()) { cnt++; cur=cur.next; }
  498. return cnt;
  499. }
  500. public inline function has(obj:GeomPoly) return ({
  501. var ret = false;
  502. {
  503. var cxiterator = this.begin();
  504. while(cxiterator != this.end()) {
  505. var cxite = cxiterator.elem();
  506. {
  507. {
  508. if(cxite==obj) {
  509. ret = true;
  510. break;
  511. }
  512. };
  513. }
  514. cxiterator = cxiterator.next;
  515. }
  516. };
  517. ret;
  518. })
  519. public inline function front() return begin().elem()
  520. public inline function back() {
  521. var ret = begin();
  522. var cur = ret;
  523. while(cur!=end()) { ret = cur; cur = cur.next; }
  524. return ret.elem();
  525. }
  526. public inline function at(ind:Int) {
  527. var ret = begin();
  528. while(ind-->0) ret = ret.next;
  529. return ret.elem();
  530. }
  531. public inline function begin() return head
  532. public inline function end () return null
  533. }class CxFastList_Constraint {
  534. private var head:CxFastNode_Constraint;
  535. private var alloc:Allocator;
  536. public function new(?a:Allocator) {
  537. alloc = if(a==null) Allocator.GLOBAL else a;
  538. }
  539. public inline function add(o:Constraint) {
  540. var temp = {
  541. var ret = alloc.CxAlloc_CxFastNode_Constraint();
  542. ret.elt = o;
  543. ret;
  544. };
  545. temp.next = begin();
  546. head=temp;
  547. }
  548. public inline function pop():Constraint {
  549. var ret = begin();
  550. head=ret.next;
  551. var retv = ret.elem();
  552. alloc.CxFree_CxFastNode_Constraint(ret);
  553. return retv;
  554. }
  555. public inline function remove(obj:Constraint):Bool {
  556. var pre = null;
  557. var cur = begin();
  558. var ret = false;
  559. while(cur!=end()) {
  560. if(cur.elem()==obj) {
  561. cur = erase(pre,cur);
  562. ret = true;
  563. break;
  564. }
  565. pre = cur;
  566. cur = cur.next;
  567. }
  568. return ret;
  569. }
  570. public inline function erase(pre:CxFastNode_Constraint,cur:CxFastNode_Constraint):CxFastNode_Constraint {
  571. var old = cur; cur = cur.next;
  572. if(pre==null) head=cur;
  573. else pre.next = cur;
  574. {};
  575. alloc.CxFree_CxFastNode_Constraint(old);
  576. return cur;
  577. }
  578. public inline function splice(pre:CxFastNode_Constraint,cur:CxFastNode_Constraint,n:Int):CxFastNode_Constraint {
  579. while(n-->0 && cur!=end())
  580. cur = erase(pre,cur);
  581. return cur;
  582. }
  583. public inline function clear() {
  584. if(true) {
  585. while(!empty()) {
  586. var old = begin();
  587. head=old.next;
  588. {};
  589. alloc.CxFree_CxFastNode_Constraint(old);
  590. }
  591. }else head=end();
  592. }
  593. public inline function reverse() {
  594. var tmp = new CxFastList_Constraint();
  595. while(!empty())
  596. tmp.add(pop());
  597. head=tmp.begin();
  598. }
  599. public inline function empty():Bool return begin()==end()
  600. public inline function size():Int {
  601. var cnt = 0;
  602. var cur = begin();
  603. while(cur!=end()) { cnt++; cur=cur.next; }
  604. return cnt;
  605. }
  606. public inline function has(obj:Constraint) return ({
  607. var ret = false;
  608. {
  609. var cxiterator = this.begin();
  610. while(cxiterator != this.end()) {
  611. var cxite = cxiterator.elem();
  612. {
  613. {
  614. if(cxite==obj) {
  615. ret = true;
  616. break;
  617. }
  618. };
  619. }
  620. cxiterator = cxiterator.next;
  621. }
  622. };
  623. ret;
  624. })
  625. public inline function front() return begin().elem()
  626. public inline function back() {
  627. var ret = begin();
  628. var cur = ret;
  629. while(cur!=end()) { ret = cur; cur = cur.next; }
  630. return ret.elem();
  631. }
  632. public inline function at(ind:Int) {
  633. var ret = begin();
  634. while(ind-->0) ret = ret.next;
  635. return ret.elem();
  636. }
  637. public inline function begin() return head
  638. public inline function end () return null
  639. }class CxFastList_Body {
  640. private var head:CxFastNode_Body;
  641. private var alloc:Allocator;
  642. public function new(?a:Allocator) {
  643. alloc = if(a==null) Allocator.GLOBAL else a;
  644. }
  645. public inline function add(o:Body) {
  646. var temp = {
  647. var ret = alloc.CxAlloc_CxFastNode_Body();
  648. ret.elt = o;
  649. ret;
  650. };
  651. temp.next = begin();
  652. head=temp;
  653. }
  654. public inline function pop():Body {
  655. var ret = begin();
  656. head=ret.next;
  657. var retv = ret.elem();
  658. alloc.CxFree_CxFastNode_Body(ret);
  659. return retv;
  660. }
  661. public inline function remove(obj:Body):Bool {
  662. var pre = null;
  663. var cur = begin();
  664. var ret = false;
  665. while(cur!=end()) {
  666. if(cur.elem()==obj) {
  667. cur = erase(pre,cur);
  668. ret = true;
  669. break;
  670. }
  671. pre = cur;
  672. cur = cur.next;
  673. }
  674. return ret;
  675. }
  676. public inline function erase(pre:CxFastNode_Body,cur:CxFastNode_Body):CxFastNode_Body {
  677. var old = cur; cur = cur.next;
  678. if(pre==null) head=cur;
  679. else pre.next = cur;
  680. {};
  681. alloc.CxFree_CxFastNode_Body(old);
  682. return cur;
  683. }
  684. public inline function splice(pre:CxFastNode_Body,cur:CxFastNode_Body,n:Int):CxFastNode_Body {
  685. while(n-->0 && cur!=end())
  686. cur = erase(pre,cur);
  687. return cur;
  688. }
  689. public inline function clear() {
  690. if(true) {
  691. while(!empty()) {
  692. var old = begin();
  693. head=old.next;
  694. {};
  695. alloc.CxFree_CxFastNode_Body(old);
  696. }
  697. }else head=end();
  698. }
  699. public inline function reverse() {
  700. var tmp = new CxFastList_Body();
  701. while(!empty())
  702. tmp.add(pop());
  703. head=tmp.begin();
  704. }
  705. public inline function empty():Bool return begin()==end()
  706. public inline function size():Int {
  707. var cnt = 0;
  708. var cur = begin();
  709. while(cur!=end()) { cnt++; cur=cur.next; }
  710. return cnt;
  711. }
  712. public inline function has(obj:Body) return ({
  713. var ret = false;
  714. {
  715. var cxiterator = this.begin();
  716. while(cxiterator != this.end()) {
  717. var cxite = cxiterator.elem();
  718. {
  719. {
  720. if(cxite==obj) {
  721. ret = true;
  722. break;
  723. }
  724. };
  725. }
  726. cxiterator = cxiterator.next;
  727. }
  728. };
  729. ret;
  730. })
  731. public inline function front() return begin().elem()
  732. public inline function back() {
  733. var ret = begin();
  734. var cur = ret;
  735. while(cur!=end()) { ret = cur; cur = cur.next; }
  736. return ret.elem();
  737. }
  738. public inline function at(ind:Int) {
  739. var ret = begin();
  740. while(ind-->0) ret = ret.next;
  741. return ret.elem();
  742. }
  743. public inline function begin() return head
  744. public inline function end () return null
  745. }class CxFastList_Particle {
  746. private var head:CxFastNode_Particle;
  747. private var alloc:Allocator;
  748. public function new(?a:Allocator) {
  749. alloc = if(a==null) Allocator.GLOBAL else a;
  750. }
  751. public inline function add(o:Particle) {
  752. var temp = {
  753. var ret = alloc.CxAlloc_CxFastNode_Particle();
  754. ret.elt = o;
  755. ret;
  756. };
  757. temp.next = begin();
  758. head=temp;
  759. }
  760. public inline function pop():Particle {
  761. var ret = begin();
  762. head=ret.next;
  763. var retv = ret.elem();
  764. alloc.CxFree_CxFastNode_Particle(ret);
  765. return retv;
  766. }
  767. public inline function remove(obj:Particle):Bool {
  768. var pre = null;
  769. var cur = begin();
  770. var ret = false;
  771. while(cur!=end()) {
  772. if(cur.elem()==obj) {
  773. cur = erase(pre,cur);
  774. ret = true;
  775. break;
  776. }
  777. pre = cur;
  778. cur = cur.next;
  779. }
  780. return ret;
  781. }
  782. public inline function erase(pre:CxFastNode_Particle,cur:CxFastNode_Particle):CxFastNode_Particle {
  783. var old = cur; cur = cur.next;
  784. if(pre==null) head=cur;
  785. else pre.next = cur;
  786. {};
  787. alloc.CxFree_CxFastNode_Particle(old);
  788. return cur;
  789. }
  790. public inline function splice(pre:CxFastNode_Particle,cur:CxFastNode_Particle,n:Int):CxFastNode_Particle {
  791. while(n-->0 && cur!=end())
  792. cur = erase(pre,cur);
  793. return cur;
  794. }
  795. public inline function clear() {
  796. if(true) {
  797. while(!empty()) {
  798. var old = begin();
  799. head=old.next;
  800. {};
  801. alloc.CxFree_CxFastNode_Particle(old);
  802. }
  803. }else head=end();
  804. }
  805. public inline function reverse() {
  806. var tmp = new CxFastList_Particle();
  807. while(!empty())
  808. tmp.add(pop());
  809. head=tmp.begin();
  810. }
  811. public inline function empty():Bool return begin()==end()
  812. public inline function size():Int {
  813. var cnt = 0;
  814. var cur = begin();
  815. while(cur!=end()) { cnt++; cur=cur.next; }
  816. return cnt;
  817. }
  818. public inline function has(obj:Particle) return ({
  819. var ret = false;
  820. {
  821. var cxiterator = this.begin();
  822. while(cxiterator != this.end()) {
  823. var cxite = cxiterator.elem();
  824. {
  825. {
  826. if(cxite==obj) {
  827. ret = true;
  828. break;
  829. }
  830. };
  831. }
  832. cxiterator = cxiterator.next;
  833. }
  834. };
  835. ret;
  836. })
  837. public inline function front() return begin().elem()
  838. public inline function back() {
  839. var ret = begin();
  840. var cur = ret;
  841. while(cur!=end()) { ret = cur; cur = cur.next; }
  842. return ret.elem();
  843. }
  844. public inline function at(ind:Int) {
  845. var ret = begin();
  846. while(ind-->0) ret = ret.next;
  847. return ret.elem();
  848. }
  849. public inline function begin() return head
  850. public inline function end () return null
  851. }class CxFastList_Group {
  852. private var head:CxFastNode_Group;
  853. private var alloc:Allocator;
  854. public function new(?a:Allocator) {
  855. alloc = if(a==null) Allocator.GLOBAL else a;
  856. }
  857. public inline function add(o:Group) {
  858. var temp = {
  859. var ret = alloc.CxAlloc_CxFastNode_Group();
  860. ret.elt = o;
  861. ret;
  862. };
  863. temp.next = begin();
  864. head=temp;
  865. }
  866. public inline function pop():Group {
  867. var ret = begin();
  868. head=ret.next;
  869. var retv = ret.elem();
  870. alloc.CxFree_CxFastNode_Group(ret);
  871. return retv;
  872. }
  873. public inline function remove(obj:Group):Bool {
  874. var pre = null;
  875. var cur = begin();
  876. var ret = false;
  877. while(cur!=end()) {
  878. if(cur.elem()==obj) {
  879. cur = erase(pre,cur);
  880. ret = true;
  881. break;
  882. }
  883. pre = cur;
  884. cur = cur.next;
  885. }
  886. return ret;
  887. }
  888. public inline function erase(pre:CxFastNode_Group,cur:CxFastNode_Group):CxFastNode_Group {
  889. var old = cur; cur = cur.next;
  890. if(pre==null) head=cur;
  891. else pre.next = cur;
  892. {};
  893. alloc.CxFree_CxFastNode_Group(old);
  894. return cur;
  895. }
  896. public inline function splice(pre:CxFastNode_Group,cur:CxFastNode_Group,n:Int):CxFastNode_Group {
  897. while(n-->0 && cur!=end())
  898. cur = erase(pre,cur);
  899. return cur;
  900. }
  901. public inline function clear() {
  902. if(true) {
  903. while(!empty()) {
  904. var old = begin();
  905. head=old.next;
  906. {};
  907. alloc.CxFree_CxFastNode_Group(old);
  908. }
  909. }else head=end();
  910. }
  911. public inline function reverse() {
  912. var tmp = new CxFastList_Group();
  913. while(!empty())
  914. tmp.add(pop());
  915. head=tmp.begin();
  916. }
  917. public inline function empty():Bool return begin()==end()
  918. public inline function size():Int {
  919. var cnt = 0;
  920. var cur = begin();
  921. while(cur!=end()) { cnt++; cur=cur.next; }
  922. return cnt;
  923. }
  924. public inline function has(obj:Group) return ({
  925. var ret = false;
  926. {
  927. var cxiterator = this.begin();
  928. while(cxiterator != this.end()) {
  929. var cxite = cxiterator.elem();
  930. {
  931. {
  932. if(cxite==obj) {
  933. ret = true;
  934. break;
  935. }
  936. };
  937. }
  938. cxiterator = cxiterator.next;
  939. }
  940. };
  941. ret;
  942. })
  943. public inline function front() return begin().elem()
  944. public inline function back() {
  945. var ret = begin();
  946. var cur = ret;
  947. while(cur!=end()) { ret = cur; cur = cur.next; }
  948. return ret.elem();
  949. }
  950. public inline function at(ind:Int) {
  951. var ret = begin();
  952. while(ind-->0) ret = ret.next;
  953. return ret.elem();
  954. }
  955. public inline function begin() return head
  956. public inline function end () return null
  957. }class CxFastList_Properties {
  958. private var head:CxFastNode_Properties;
  959. private var alloc:Allocator;
  960. public function new(?a:Allocator) {
  961. alloc = if(a==null) Allocator.GLOBAL else a;
  962. }
  963. public inline function add(o:Properties) {
  964. var temp = {
  965. var ret = alloc.CxAlloc_CxFastNode_Properties();
  966. ret.elt = o;
  967. ret;
  968. };
  969. temp.next = begin();
  970. head=temp;
  971. }
  972. public inline function pop():Properties {
  973. var ret = begin();
  974. head=ret.next;
  975. var retv = ret.elem();
  976. alloc.CxFree_CxFastNode_Properties(ret);
  977. return retv;
  978. }
  979. public inline function remove(obj:Properties):Bool {
  980. var pre = null;
  981. var cur = begin();
  982. var ret = false;
  983. while(cur!=end()) {
  984. if(cur.elem()==obj) {
  985. cur = erase(pre,cur);
  986. ret = true;
  987. break;
  988. }
  989. pre = cur;
  990. cur = cur.next;
  991. }
  992. return ret;
  993. }
  994. public inline function erase(pre:CxFastNode_Properties,cur:CxFastNode_Properties):CxFastNode_Properties {
  995. var old = cur; cur = cur.next;
  996. if(pre==null) head=cur;
  997. else pre.next = cur;
  998. {};
  999. alloc.CxFree_CxFastNode_Properties(old);
  1000. return cur;
  1001. }
  1002. public inline function splice(pre:CxFastNode_Properties,cur:CxFastNode_Properties,n:Int):CxFastNode_Properties {
  1003. while(n-->0 && cur!=end())
  1004. cur = erase(pre,cur);
  1005. return cur;
  1006. }
  1007. public inline function clear() {
  1008. if(true) {
  1009. while(!empty()) {
  1010. var old = begin();
  1011. head=old.next;
  1012. {};
  1013. alloc.CxFree_CxFastNode_Properties(old);
  1014. }
  1015. }else head=end();
  1016. }
  1017. public inline function reverse() {
  1018. var tmp = new CxFastList_Properties();
  1019. while(!empty())
  1020. tmp.add(pop());
  1021. head=tmp.begin();
  1022. }
  1023. public inline function empty():Bool return begin()==end()
  1024. public inline function size():Int {
  1025. var cnt = 0;
  1026. var cur = begin();
  1027. while(cur!=end()) { cnt++; cur=cur.next; }
  1028. return cnt;
  1029. }
  1030. public inline function has(obj:Properties) return ({
  1031. var ret = false;
  1032. {
  1033. var cxiterator = this.begin();
  1034. while(cxiterator != this.end()) {
  1035. var cxite = cxiterator.elem();
  1036. {
  1037. {
  1038. if(cxite==obj) {
  1039. ret = true;
  1040. break;
  1041. }
  1042. };
  1043. }
  1044. cxiterator = cxiterator.next;
  1045. }
  1046. };
  1047. ret;
  1048. })
  1049. public inline function front() return begin().elem()
  1050. public inline function back() {
  1051. var ret = begin();
  1052. var cur = ret;
  1053. while(cur!=end()) { ret = cur; cur = cur.next; }
  1054. return ret.elem();
  1055. }
  1056. public inline function at(ind:Int) {
  1057. var ret = begin();
  1058. while(ind-->0) ret = ret.next;
  1059. return ret.elem();
  1060. }
  1061. public inline function begin() return head
  1062. public inline function end () return null
  1063. }class CxFastList_Shape {
  1064. private var head:CxFastNode_Shape;
  1065. private var alloc:Allocator;
  1066. public function new(?a:Allocator) {
  1067. alloc = if(a==null) Allocator.GLOBAL else a;
  1068. }
  1069. public inline function add(o:Shape) {
  1070. var temp = {
  1071. var ret = alloc.CxAlloc_CxFastNode_Shape();
  1072. ret.elt = o;
  1073. ret;
  1074. };
  1075. temp.next = begin();
  1076. head=temp;
  1077. }
  1078. public inline function pop():Shape {
  1079. var ret = begin();
  1080. head=ret.next;
  1081. var retv = ret.elem();
  1082. alloc.CxFree_CxFastNode_Shape(ret);
  1083. return retv;
  1084. }
  1085. public inline function remove(obj:Shape):Bool {
  1086. var pre = null;
  1087. var cur = begin();
  1088. var ret = false;
  1089. while(cur!=end()) {
  1090. if(cur.elem()==obj) {
  1091. cur = erase(pre,cur);
  1092. ret = true;
  1093. break;
  1094. }
  1095. pre = cur;
  1096. cur = cur.next;
  1097. }
  1098. return ret;
  1099. }
  1100. public inline function erase(pre:CxFastNode_Shape,cur:CxFastNode_Shape):CxFastNode_Shape {
  1101. var old = cur; cur = cur.next;
  1102. if(pre==null) head=cur;
  1103. else pre.next = cur;
  1104. {};
  1105. alloc.CxFree_CxFastNode_Shape(old);
  1106. return cur;
  1107. }
  1108. public inline function splice(pre:CxFastNode_Shape,cur:CxFastNode_Shape,n:Int):CxFastNode_Shape {
  1109. while(n-->0 && cur!=end())
  1110. cur = erase(pre,cur);
  1111. return cur;
  1112. }
  1113. public inline function clear() {
  1114. if(true) {
  1115. while(!empty()) {
  1116. var old = begin();
  1117. head=old.next;
  1118. {};
  1119. alloc.CxFree_CxFastNode_Shape(old);
  1120. }
  1121. }else head=end();
  1122. }
  1123. public inline function reverse() {
  1124. var tmp = new CxFastList_Shape();
  1125. while(!empty())
  1126. tmp.add(pop());
  1127. head=tmp.begin();
  1128. }
  1129. public inline function empty():Bool return begin()==end()
  1130. public inline function size():Int {
  1131. var cnt = 0;
  1132. var cur = begin();
  1133. while(cur!=end()) { cnt++; cur=cur.next; }
  1134. return cnt;
  1135. }
  1136. public inline function has(obj:Shape) return ({
  1137. var ret = false;
  1138. {
  1139. var cxiterator = this.begin();
  1140. while(cxiterator != this.end()) {
  1141. var cxite = cxiterator.elem();
  1142. {
  1143. {
  1144. if(cxite==obj) {
  1145. ret = true;
  1146. break;
  1147. }
  1148. };
  1149. }
  1150. cxiterator = cxiterator.next;
  1151. }
  1152. };
  1153. ret;
  1154. })
  1155. public inline function front() return begin().elem()
  1156. public inline function back() {
  1157. var ret = begin();
  1158. var cur = ret;
  1159. while(cur!=end()) { ret = cur; cur = cur.next; }
  1160. return ret.elem();
  1161. }
  1162. public inline function at(ind:Int) {
  1163. var ret = begin();
  1164. while(ind-->0) ret = ret.next;
  1165. return ret.elem();
  1166. }
  1167. public inline function begin() return head
  1168. public inline function end () return null
  1169. }class CxFastList_Arbiter_false_false_true_true_Shape_Shape {
  1170. private var head:CxFastNode_Arbiter_false_false_true_true_Shape_Shape;
  1171. private var alloc:Allocator;
  1172. public function new(?a:Allocator) {
  1173. alloc = if(a==null) Allocator.GLOBAL else a;
  1174. }
  1175. public inline function add(o:Arbiter_false_false_true_true_Shape_Shape) {
  1176. var temp = {
  1177. var ret = alloc.CxAlloc_CxFastNode_Arbiter_false_false_true_true_Shape_Shape();
  1178. ret.elt = o;
  1179. ret;
  1180. };
  1181. temp.next = begin();
  1182. head=temp;
  1183. }
  1184. public inline function pop():Arbiter_false_false_true_true_Shape_Shape {
  1185. var ret = begin();
  1186. head=ret.next;
  1187. var retv = ret.elem();
  1188. alloc.CxFree_CxFastNode_Arbiter_false_false_true_true_Shape_Shape(ret);
  1189. return retv;
  1190. }
  1191. public inline function remove(obj:Arbiter_false_false_true_true_Shape_Shape):Bool {
  1192. var pre = null;
  1193. var cur = begin();
  1194. var ret = false;
  1195. while(cur!=end()) {
  1196. if(cur.elem()==obj) {
  1197. cur = erase(pre,cur);
  1198. ret = true;
  1199. break;
  1200. }
  1201. pre = cur;
  1202. cur = cur.next;
  1203. }
  1204. return ret;
  1205. }
  1206. public inline function erase(pre:CxFastNode_Arbiter_false_false_true_true_Shape_Shape,cur:CxFastNode_Arbiter_false_false_true_true_Shape_Shape):CxFastNode_Arbiter_false_false_true_true_Shape_Shape {
  1207. var old = cur; cur = cur.next;
  1208. if(pre==null) head=cur;
  1209. else pre.next = cur;
  1210. {};
  1211. alloc.CxFree_CxFastNode_Arbiter_false_false_true_true_Shape_Shape(old);
  1212. return cur;
  1213. }
  1214. public inline function splice(pre:CxFastNode_Arbiter_false_false_true_true_Shape_Shape,cur:CxFastNode_Arbiter_false_false_true_true_Shape_Shape,n:Int):CxFastNode_Arbiter_false_false_true_true_Shape_Shape {
  1215. while(n-->0 && cur!=end())
  1216. cur = erase(pre,cur);
  1217. return cur;
  1218. }
  1219. public inline function clear() {
  1220. if(true) {
  1221. while(!empty()) {
  1222. var old = begin();
  1223. head=old.next;
  1224. {};
  1225. alloc.CxFree_CxFastNode_Arbiter_false_false_true_true_Shape_Shape(old);
  1226. }
  1227. }else head=end();
  1228. }
  1229. public inline function reverse() {
  1230. var tmp = new CxFastList_Arbiter_false_false_true_true_Shape_Shape();
  1231. while(!empty())
  1232. tmp.add(pop());
  1233. head=tmp.begin();
  1234. }
  1235. public inline function empty():Bool return begin()==end()
  1236. public inline function size():Int {
  1237. var cnt = 0;
  1238. var cur = begin();
  1239. while(cur!=end()) { cnt++; cur=cur.next; }
  1240. return cnt;
  1241. }
  1242. public inline function has(obj:Arbiter_false_false_true_true_Shape_Shape) return ({
  1243. var ret = false;
  1244. {
  1245. var cxiterator = this.begin();
  1246. while(cxiterator != this.end()) {
  1247. var cxite = cxiterator.elem();
  1248. {
  1249. {
  1250. if(cxite==obj) {
  1251. ret = true;
  1252. break;
  1253. }
  1254. };
  1255. }
  1256. cxiterator = cxiterator.next;
  1257. }
  1258. };
  1259. ret;
  1260. })
  1261. public inline function front() return begin().elem()
  1262. public inline function back() {
  1263. var ret = begin();
  1264. var cur = ret;
  1265. while(cur!=end()) { ret = cur; cur = cur.next; }
  1266. return ret.elem();
  1267. }
  1268. public inline function at(ind:Int) {
  1269. var ret = begin();
  1270. while(ind-->0) ret = ret.next;
  1271. return ret.elem();
  1272. }
  1273. public inline function begin() return head
  1274. public inline function end () return null
  1275. }class CxFastList_Arbiter_false_false_true_false_Shape_Particle {
  1276. private var head:CxFastNode_Arbiter_false_false_true_false_Shape_Particle;
  1277. private var alloc:Allocator;
  1278. public function new(?a:Allocator) {
  1279. alloc = if(a==null) Allocator.GLOBAL else a;
  1280. }
  1281. public inline function add(o:Arbiter_false_false_true_false_Shape_Particle) {
  1282. var temp = {
  1283. var ret = alloc.CxAlloc_CxFastNode_Arbiter_false_false_true_false_Shape_Particle();
  1284. ret.elt = o;
  1285. ret;
  1286. };
  1287. temp.next = begin();
  1288. head=temp;
  1289. }
  1290. public inline function pop():Arbiter_false_false_true_false_Shape_Particle {
  1291. var ret = begin();
  1292. head=ret.next;
  1293. var retv = ret.elem();
  1294. alloc.CxFree_CxFastNode_Arbiter_false_false_true_false_Shape_Particle(ret);
  1295. return retv;
  1296. }
  1297. public inline function remove(obj:Arbiter_false_false_true_false_Shape_Particle):Bool {
  1298. var pre = null;
  1299. var cur = begin();
  1300. var ret = false;
  1301. while(cur!=end()) {
  1302. if(cur.elem()==obj) {
  1303. cur = erase(pre,cur);
  1304. ret = true;
  1305. break;
  1306. }
  1307. pre = cur;
  1308. cur = cur.next;
  1309. }
  1310. return ret;
  1311. }
  1312. public inline function erase(pre:CxFastNode_Arbiter_false_false_true_false_Shape_Particle,cur:CxFastNode_Arbiter_false_false_true_false_Shape_Particle):CxFastNode_Arbiter_false_false_true_false_Shape_Particle {
  1313. var old = cur; cur = cur.next;
  1314. if(pre==null) head=cur;
  1315. else pre.next = cur;
  1316. {};
  1317. alloc.CxFree_CxFastNode_Arbiter_false_false_true_false_Shape_Particle(old);
  1318. return cur;
  1319. }
  1320. public inline function splice(pre:CxFastNode_Arbiter_false_false_true_false_Shape_Particle,cur:CxFastNode_Arbiter_false_false_true_false_Shape_Particle,n:Int):CxFastNode_Arbiter_false_false_true_false_Shape_Particle {
  1321. while(n-->0 && cur!=end())
  1322. cur = erase(pre,cur);
  1323. return cur;
  1324. }
  1325. public inline function clear() {
  1326. if(true) {
  1327. while(!empty()) {
  1328. var old = begin();
  1329. head=old.next;
  1330. {};
  1331. alloc.CxFree_CxFastNode_Arbiter_false_false_true_false_Shape_Particle(old);
  1332. }
  1333. }else head=end();
  1334. }
  1335. public inline function reverse() {
  1336. var tmp = new CxFastList_Arbiter_false_false_true_false_Shape_Particle();
  1337. while(!empty())
  1338. tmp.add(pop());
  1339. head=tmp.begin();
  1340. }
  1341. public inline function empty():Bool return begin()==end()
  1342. public inline function size():Int {
  1343. var cnt = 0;
  1344. var cur = begin();
  1345. while(cur!=end()) { cnt++; cur=cur.next; }
  1346. return cnt;
  1347. }
  1348. public inline function has(obj:Arbiter_false_false_true_false_Shape_Particle) return ({
  1349. var ret = false;
  1350. {
  1351. var cxiterator = this.begin();
  1352. while(cxiterator != this.end()) {
  1353. var cxite = cxiterator.elem();
  1354. {
  1355. {
  1356. if(cxite==obj) {
  1357. ret = true;
  1358. break;
  1359. }
  1360. };
  1361. }
  1362. cxiterator = cxiterator.next;
  1363. }
  1364. };
  1365. ret;
  1366. })
  1367. public inline function front() return begin().elem()
  1368. public inline function back() {
  1369. var ret = begin();
  1370. var cur = ret;
  1371. while(cur!=end()) { ret = cur; cur = cur.next; }
  1372. return ret.elem();
  1373. }
  1374. public inline function at(ind:Int) {
  1375. var ret = begin();
  1376. while(ind-->0) ret = ret.next;
  1377. return ret.elem();
  1378. }
  1379. public inline function begin() return head
  1380. public inline function end () return null
  1381. }class CxFastList_Arbiter_true_true_true_true_Shape_Shape {
  1382. private var head:CxFastNode_Arbiter_true_true_true_true_Shape_Shape;
  1383. private var alloc:Allocator;
  1384. public function new(?a:Allocator) {
  1385. alloc = if(a==null) Allocator.GLOBAL else a;
  1386. }
  1387. public inline function add(o:Arbiter_true_true_true_true_Shape_Shape) {
  1388. var temp = {
  1389. var ret = alloc.CxAlloc_CxFastNode_Arbiter_true_true_true_true_Shape_Shape();
  1390. ret.elt = o;
  1391. ret;
  1392. };
  1393. temp.next = begin();
  1394. head=temp;
  1395. }
  1396. public inline function pop():Arbiter_true_true_true_true_Shape_Shape {
  1397. var ret = begin();
  1398. head=ret.next;
  1399. var retv = ret.elem();
  1400. alloc.CxFree_CxFastNode_Arbiter_true_true_true_true_Shape_Shape(ret);
  1401. return retv;
  1402. }
  1403. public inline function remove(obj:Arbiter_true_true_true_true_Shape_Shape):Bool {
  1404. var pre = null;
  1405. var cur = begin();
  1406. var ret = false;
  1407. while(cur!=end()) {
  1408. if(cur.elem()==obj) {
  1409. cur = erase(pre,cur);
  1410. ret = true;
  1411. break;
  1412. }
  1413. pre = cur;
  1414. cur = cur.next;
  1415. }
  1416. return ret;
  1417. }
  1418. public inline function erase(pre:CxFastNode_Arbiter_true_true_true_true_Shape_Shape,cur:CxFastNode_Arbiter_true_true_true_true_Shape_Shape):CxFastNode_Arbiter_true_true_true_true_Shape_Shape {
  1419. var old = cur; cur = cur.next;
  1420. if(pre==null) head=cur;
  1421. else pre.next = cur;
  1422. {};
  1423. alloc.CxFree_CxFastNode_Arbiter_true_true_true_true_Shape_Shape(old);
  1424. return cur;
  1425. }
  1426. public inline function splice(pre:CxFastNode_Arbiter_true_true_true_true_Shape_Shape,cur:CxFastNode_Arbiter_true_true_true_true_Shape_Shape,n:Int):CxFastNode_Arbiter_true_true_true_true_Shape_Shape {
  1427. while(n-->0 && cur!=end())
  1428. cur = erase(pre,cur);
  1429. return cur;
  1430. }
  1431. public inline function clear() {
  1432. if(true) {
  1433. while(!empty()) {
  1434. var old = begin();
  1435. head=old.next;
  1436. {};
  1437. alloc.CxFree_CxFastNode_Arbiter_true_true_true_true_Shape_Shape(old);
  1438. }
  1439. }else head=end();
  1440. }
  1441. public inline function reverse() {
  1442. var tmp = new CxFastList_Arbiter_true_true_true_true_Shape_Shape();
  1443. while(!empty())
  1444. tmp.add(pop());
  1445. head=tmp.begin();
  1446. }
  1447. public inline function empty():Bool return begin()==end()
  1448. public inline function size():Int {
  1449. var cnt = 0;
  1450. var cur = begin();
  1451. while(cur!=end()) { cnt++; cur=cur.next; }
  1452. return cnt;
  1453. }
  1454. public inline function has(obj:Arbiter_true_true_true_true_Shape_Shape) return ({
  1455. var ret = false;
  1456. {
  1457. var cxiterator = this.begin();
  1458. while(cxiterator != this.end()) {
  1459. var cxite = cxiterator.elem();
  1460. {
  1461. {
  1462. if(cxite==obj) {
  1463. ret = true;
  1464. break;
  1465. }
  1466. };
  1467. }
  1468. cxiterator = cxiterator.next;
  1469. }
  1470. };
  1471. ret;
  1472. })
  1473. public inline function front() return begin().elem()
  1474. public inline function back() {
  1475. var ret = begin();
  1476. var cur = ret;
  1477. while(cur!=end()) { ret = cur; cur = cur.next; }
  1478. return ret.elem();
  1479. }
  1480. public inline function at(ind:Int) {
  1481. var ret = begin();
  1482. while(ind-->0) ret = ret.next;
  1483. return ret.elem();
  1484. }
  1485. public inline function begin() return head
  1486. public inline function end () return null
  1487. }class CxFastList_Arbiter_true_true_true_false_Shape_Particle {
  1488. private var head:CxFastNode_Arbiter_true_true_true_false_Shape_Particle;
  1489. private var alloc:Allocator;
  1490. public function new(?a:Allocator) {
  1491. alloc = if(a==null) Allocator.GLOBAL else a;
  1492. }
  1493. public inline function add(o:Arbiter_true_true_true_false_Shape_Particle) {
  1494. var temp = {
  1495. var ret = alloc.CxAlloc_CxFastNode_Arbiter_true_true_true_false_Shape_Particle();
  1496. ret.elt = o;
  1497. ret;
  1498. };
  1499. temp.next = begin();
  1500. head=temp;
  1501. }
  1502. public inline function pop():Arbiter_true_true_true_false_Shape_Particle {
  1503. var ret = begin();
  1504. head=ret.next;
  1505. var retv = ret.elem();
  1506. alloc.CxFree_CxFastNode_Arbiter_true_true_true_false_Shape_Particle(ret);
  1507. return retv;
  1508. }
  1509. public inline function remove(obj:Arbiter_true_true_true_false_Shape_Particle):Bool {
  1510. var pre = null;
  1511. var cur = begin();
  1512. var ret = false;
  1513. while(cur!=end()) {
  1514. if(cur.elem()==obj) {
  1515. cur = erase(pre,cur);
  1516. ret = true;
  1517. break;
  1518. }
  1519. pre = cur;
  1520. cur = cur.next;
  1521. }
  1522. return ret;
  1523. }
  1524. public inline function erase(pre:CxFastNode_Arbiter_true_true_true_false_Shape_Particle,cur:CxFastNode_Arbiter_true_true_true_false_Shape_Particle):CxFastNode_Arbiter_true_true_true_false_Shape_Particle {
  1525. var old = cur; cur = cur.next;
  1526. if(pre==null) head=cur;
  1527. else pre.next = cur;
  1528. {};
  1529. alloc.CxFree_CxFastNode_Arbiter_true_true_true_false_Shape_Particle(old);
  1530. return cur;
  1531. }
  1532. public inline function splice(pre:CxFastNode_Arbiter_true_true_true_false_Shape_Particle,cur:CxFastNode_Arbiter_true_true_true_false_Shape_Particle,n:Int):CxFastNode_Arbiter_true_true_true_false_Shape_Particle {
  1533. while(n-->0 && cur!=end())
  1534. cur = erase(pre,cur);
  1535. return cur;
  1536. }
  1537. public inline function clear() {
  1538. if(true) {
  1539. while(!empty()) {
  1540. var old = begin();
  1541. head=old.next;
  1542. {};
  1543. alloc.CxFree_CxFastNode_Arbiter_true_true_true_false_Shape_Particle(old);
  1544. }
  1545. }else head=end();
  1546. }
  1547. public inline function reverse() {
  1548. var tmp = new CxFastList_Arbiter_true_true_true_false_Shape_Particle();
  1549. while(!empty())
  1550. tmp.add(pop());
  1551. head=tmp.begin();
  1552. }
  1553. public inline function empty():Bool return begin()==end()
  1554. public inline function size():Int {
  1555. var cnt = 0;
  1556. var cur = begin();
  1557. while(cur!=end()) { cnt++; cur=cur.next; }
  1558. return cnt;
  1559. }
  1560. public inline function has(obj:Arbiter_true_true_true_false_Shape_Particle) return ({
  1561. var ret = false;
  1562. {
  1563. var cxiterator = this.begin();
  1564. while(cxiterator != this.end()) {
  1565. var cxite = cxiterator.elem();
  1566. {
  1567. {
  1568. if(cxite==obj) {
  1569. ret = true;
  1570. break;
  1571. }
  1572. };
  1573. }
  1574. cxiterator = cxiterator.next;
  1575. }
  1576. };
  1577. ret;
  1578. })
  1579. public inline function front() return begin().elem()
  1580. public inline function back() {
  1581. var ret = begin();
  1582. var cur = ret;
  1583. while(cur!=end()) { ret = cur; cur = cur.next; }
  1584. return ret.elem();
  1585. }
  1586. public inline function at(ind:Int) {
  1587. var ret = begin();
  1588. while(ind-->0) ret = ret.next;
  1589. return ret.elem();
  1590. }
  1591. public inline function begin() return head
  1592. public inline function end () return null
  1593. }class CxFastList_UniformCell {
  1594. private var head:CxFastNode_UniformCell;
  1595. private var alloc:Allocator;
  1596. public function new(?a:Allocator) {
  1597. alloc = if(a==null) Allocator.GLOBAL else a;
  1598. }
  1599. public inline function add(o:UniformCell) {
  1600. var temp = {
  1601. var ret = alloc.CxAlloc_CxFastNode_UniformCell();
  1602. ret.elt = o;
  1603. ret;
  1604. };
  1605. temp.next = begin();
  1606. head=temp;
  1607. }
  1608. public inline function pop():UniformCell {
  1609. var ret = begin();
  1610. head=ret.next;
  1611. var retv = ret.elem();
  1612. alloc.CxFree_CxFastNode_UniformCell(ret);
  1613. return retv;
  1614. }
  1615. public inline function remove(obj:UniformCell):Bool {
  1616. var pre = null;
  1617. var cur = begin();
  1618. var ret = false;
  1619. while(cur!=end()) {
  1620. if(cur.elem()==obj) {
  1621. cur = erase(pre,cur);
  1622. ret = true;
  1623. break;
  1624. }
  1625. pre = cur;
  1626. cur = cur.next;
  1627. }
  1628. return ret;
  1629. }
  1630. public inline function erase(pre:CxFastNode_UniformCell,cur:CxFastNode_UniformCell):CxFastNode_UniformCell {
  1631. var old = cur; cur = cur.next;
  1632. if(pre==null) head=cur;
  1633. else pre.next = cur;
  1634. {};
  1635. alloc.CxFree_CxFastNode_UniformCell(old);
  1636. return cur;
  1637. }
  1638. public inline function splice(pre:CxFastNode_UniformCell,cur:CxFastNode_UniformCell,n:Int):CxFastNode_UniformCell {
  1639. while(n-->0 && cur!=end())
  1640. cur = erase(pre,cur);
  1641. return cur;
  1642. }
  1643. public inline function clear() {
  1644. if(true) {
  1645. while(!empty()) {
  1646. var old = begin();
  1647. head=old.next;
  1648. {};
  1649. alloc.CxFree_CxFastNode_UniformCell(old);
  1650. }
  1651. }else head=end();
  1652. }
  1653. public inline function reverse() {
  1654. var tmp = new CxFastList_UniformCell();
  1655. while(!empty())
  1656. tmp.add(pop());
  1657. head=tmp.begin();
  1658. }
  1659. public inline function empty():Bool return begin()==end()
  1660. public inline function size():Int {
  1661. var cnt = 0;
  1662. var cur = begin();
  1663. while(cur!=end()) { cnt++; cur=cur.next; }
  1664. return cnt;
  1665. }
  1666. public inline function has(obj:UniformCell) return ({
  1667. var ret = false;
  1668. {
  1669. var cxiterator = this.begin();
  1670. while(cxiterator != this.end()) {
  1671. var cxite = cxiterator.elem();
  1672. {
  1673. {
  1674. if(cxite==obj) {
  1675. ret = true;
  1676. break;
  1677. }
  1678. };
  1679. }
  1680. cxiterator = cxiterator.next;
  1681. }
  1682. };
  1683. ret;
  1684. })
  1685. public inline function front() return begin().elem()
  1686. public inline function back() {
  1687. var ret = begin();
  1688. var cur = ret;
  1689. while(cur!=end()) { ret = cur; cur = cur.next; }
  1690. return ret.elem();
  1691. }
  1692. public inline function at(ind:Int) {
  1693. var ret = begin();
  1694. while(ind-->0) ret = ret.next;
  1695. return ret.elem();
  1696. }
  1697. public inline function begin() return head
  1698. public inline function end () return null
  1699. }class CxFastList_UniformSleepCell {
  1700. private var head:CxFastNode_UniformSleepCell;
  1701. private var alloc:Allocator;
  1702. public function new(?a:Allocator) {
  1703. alloc = if(a==null) Allocator.GLOBAL else a;
  1704. }
  1705. public inline function add(o:UniformSleepCell) {
  1706. var temp = {
  1707. var ret = alloc.CxAlloc_CxFastNode_UniformSleepCell();
  1708. ret.elt = o;
  1709. ret;
  1710. };
  1711. temp.next = begin();
  1712. head=temp;
  1713. }
  1714. public inline function pop():UniformSleepCell {
  1715. var ret = begin();
  1716. head=ret.next;
  1717. var retv = ret.elem();
  1718. alloc.CxFree_CxFastNode_UniformSleepCell(ret);
  1719. return retv;
  1720. }
  1721. public inline function remove(obj:UniformSleepCell):Bool {
  1722. var pre = null;
  1723. var cur = begin();
  1724. var ret = false;
  1725. while(cur!=end()) {
  1726. if(cur.elem()==obj) {
  1727. cur = erase(pre,cur);
  1728. ret = true;
  1729. break;
  1730. }
  1731. pre = cur;
  1732. cur = cur.next;
  1733. }
  1734. return ret;
  1735. }
  1736. public inline function erase(pre:CxFastNode_UniformSleepCell,cur:CxFastNode_UniformSleepCell):CxFastNode_UniformSleepCell {
  1737. var old = cur; cur = cur.next;
  1738. if(pre==null) head=cur;
  1739. else pre.next = cur;
  1740. {};
  1741. alloc.CxFree_CxFastNode_UniformSleepCell(old);
  1742. return cur;
  1743. }
  1744. public inline function splice(pre:CxFastNode_UniformSleepCell,cur:CxFastNode_UniformSleepCell,n:Int):CxFastNode_UniformSleepCell {
  1745. while(n-->0 && cur!=end())
  1746. cur = erase(pre,cur);
  1747. return cur;
  1748. }
  1749. public inline function clear() {
  1750. if(true) {
  1751. while(!empty()) {
  1752. var old = begin();
  1753. head=old.next;
  1754. {};
  1755. alloc.CxFree_CxFastNode_UniformSleepCell(old);
  1756. }
  1757. }else head=end();
  1758. }
  1759. public inline function reverse() {
  1760. var tmp = new CxFastList_UniformSleepCell();
  1761. while(!empty())
  1762. tmp.add(pop());
  1763. head=tmp.begin();
  1764. }
  1765. public inline function empty():Bool return begin()==end()
  1766. public inline function size():Int {
  1767. var cnt = 0;
  1768. var cur = begin();
  1769. while(cur!=end()) { cnt++; cur=cur.next; }
  1770. return cnt;
  1771. }
  1772. public inline function has(obj:UniformSleepCell) return ({
  1773. var ret = false;
  1774. {
  1775. var cxiterator = this.begin();
  1776. while(cxiterator != this.end()) {
  1777. var cxite = cxiterator.elem();
  1778. {
  1779. {
  1780. if(cxite==obj) {
  1781. ret = true;
  1782. break;
  1783. }
  1784. };
  1785. }
  1786. cxiterator = cxiterator.next;
  1787. }
  1788. };
  1789. ret;
  1790. })
  1791. public inline function front() return begin().elem()
  1792. public inline function back() {
  1793. var ret = begin();
  1794. var cur = ret;
  1795. while(cur!=end()) { ret = cur; cur = cur.next; }
  1796. return ret.elem();
  1797. }
  1798. public inline function at(ind:Int) {
  1799. var ret = begin();
  1800. while(ind-->0) ret = ret.next;
  1801. return ret.elem();
  1802. }
  1803. public inline function begin() return head
  1804. public inline function end () return null
  1805. }
  1806. class CxFastNode_PhysObj {
  1807. public var elt:PhysObj;
  1808. public var next:CxFastNode_PhysObj;
  1809. public function new() {}
  1810. public inline function elem ():PhysObj return elt
  1811. }class CxFastNode_ObjArb {
  1812. public var elt:ObjArb;
  1813. public var next:CxFastNode_ObjArb;
  1814. public function new() {}
  1815. public inline function elem ():ObjArb return elt
  1816. }class CxFastNode_Arbiter {
  1817. public var elt:Arbiter;
  1818. public var next:CxFastNode_Arbiter;
  1819. public function new() {}
  1820. public inline function elem ():Arbiter return elt
  1821. }class CxFastNode_Contact {
  1822. public var elt:Contact;
  1823. public var next:CxFastNode_Contact;
  1824. public function new() {}
  1825. public inline function elem ():Contact return elt
  1826. }class CxFastNode_GeomPoly {
  1827. public var elt:GeomPoly;
  1828. public var next:CxFastNode_GeomPoly;
  1829. public function new() {}
  1830. public inline function elem ():GeomPoly return elt
  1831. }class CxFastNode_Constraint {
  1832. public var elt:Constraint;
  1833. public var next:CxFastNode_Constraint;
  1834. public function new() {}
  1835. public inline function elem ():Constraint return elt
  1836. }class CxFastNode_Body {
  1837. public var elt:Body;
  1838. public var next:CxFastNode_Body;
  1839. public function new() {}
  1840. public inline function elem ():Body return elt
  1841. }class CxFastNode_Particle {
  1842. public var elt:Particle;
  1843. public var next:CxFastNode_Particle;
  1844. public function new() {}
  1845. public inline function elem ():Particle return elt
  1846. }class CxFastNode_Group {
  1847. public var elt:Group;
  1848. public var next:CxFastNode_Group;
  1849. public function new() {}
  1850. public inline function elem ():Group return elt
  1851. }class CxFastNode_Properties {
  1852. public var elt:Properties;
  1853. public var next:CxFastNode_Properties;
  1854. public function new() {}
  1855. public inline function elem ():Properties return elt
  1856. }class CxFastNode_Callback {
  1857. public var elt:Callback;
  1858. public var next:CxFastNode_Callback;
  1859. public function new() {}
  1860. public inline function elem ():Callback return elt
  1861. }class CxFastNode_Shape {
  1862. public var elt:Shape;
  1863. public var next:CxFastNode_Shape;
  1864. public function new() {}
  1865. public inline function elem ():Shape return elt
  1866. }class CxFastNode_Arbiter_false_false_true_true_Shape_Shape {
  1867. public var elt:Arbiter_false_false_true_true_Shape_Shape;
  1868. public var next:CxFastNode_Arbiter_false_false_true_true_Shape_Shape;
  1869. public function new() {}
  1870. public inline function elem ():Arbiter_false_false_true_true_Shape_Shape return elt
  1871. }class CxFastNode_Arbiter_false_false_true_false_Shape_Particle {
  1872. public var elt:Arbiter_false_false_true_false_Shape_Particle;
  1873. public var next:CxFastNode_Arbiter_false_false_true_false_Shape_Particle;
  1874. public function new() {}
  1875. public inline function elem ():Arbiter_false_false_true_false_Shape_Particle return elt
  1876. }class CxFastNode_Arbiter_true_true_t

Large files files are truncated, but you can click here to view the full file