Contains standard libraries for ZenCode.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. [Native("stdlib::Arrays")]
  2. export expand <T : Comparable<T>> T[] {
  3. [Native("sort")]
  4. public extern sort() as void;
  5. [Native("sorted")]
  6. public extern sorted() as T[];
  7. }
  8. export expand <T : Hashable<T>> T[] {
  9. public implements Hashable<T[]> {
  10. public extern hashCode() as int;
  11. public extern == (other as T[]) as bool;
  12. }
  13. }
  14. [Native("stdlib::Arrays")]
  15. export expand <T> T[] {
  16. [Native("sortWithComparator")]
  17. public extern sort(comparator as function(a as T, b as T) as int) as void;
  18. [Native("sortedWithComparator")]
  19. public extern sorted(comparator as function(a as T, b as T) as int) as T[];
  20. [Native("copy")]
  21. public extern copy() as T[];
  22. [Native("copyResize")]
  23. public extern copy(newSize as usize) as T[];
  24. [Native("copyTo")]
  25. public extern copyTo(target as T[], sourceOffset as usize, targetOffset as usize, length as usize) as void;
  26. public get first as T?
  27. => this.isEmpty ? null : this[0];
  28. public get last as T?
  29. => this.isEmpty ? null : this[$ - (1 as usize)];
  30. [Native("reverse")]
  31. public reverse() as void {
  32. for i in 0 .. length / 2 {
  33. var temp = this[i];
  34. this[i] = this[length - i - 1];
  35. this[length - i - 1] = temp;
  36. }
  37. }
  38. // TODO: fix compilation for these
  39. /*[Native("reversed")]
  40. public reversed() as T[] {
  41. return new T[](this, (i, value) => this[length - i - 1]);
  42. }*/
  43. [Native("mapValues")]
  44. public map<U>(projection as function(value as T`borrow) as U) as U[]
  45. => new U[]<T>(this, projection);
  46. [Native("mapKeyValues")]
  47. public map<U>(projection as function(index as usize, value as T`borrow) as U) as U[]
  48. => new U[]<T>(this, projection);
  49. [Native("filterValues")]
  50. public filter(predicate as function(value as T`borrow) as bool) as T[] {
  51. var values = new List<T>();
  52. for value in this
  53. if predicate(value)
  54. values.add(value);
  55. return values as T[];
  56. }
  57. [Native("filterKeyValues")]
  58. public filter(predicate as function(index as usize, value as T) as bool) as T[] {
  59. var values = new List<T>();
  60. for i, value in this
  61. if predicate(i, value)
  62. values.add(value);
  63. return values as T[];
  64. }
  65. public each(consumer as function(value as T) as void) as void {
  66. for value in this
  67. consumer(value);
  68. }
  69. public each(consumer as function(index as usize, value as T) as void) as void {
  70. for i, value in this
  71. consumer(i, value);
  72. }
  73. public contains(predicate as function(value as T) as bool) as bool {
  74. for value in this
  75. if predicate(value)
  76. return true;
  77. return false;
  78. }
  79. public contains(predicate as function(index as usize, value as T) as bool) as bool {
  80. for i, value in this
  81. if predicate(i, value)
  82. return true;
  83. return false;
  84. }
  85. public all(predicate as function(value as T) as bool) as bool {
  86. for value in this
  87. if !predicate(value)
  88. return false;
  89. return true;
  90. }
  91. public all(predicate as function(i as usize, value as T) as bool) as bool {
  92. for i, value in this
  93. if !predicate(i, value)
  94. return false;
  95. return true;
  96. }
  97. public first(predicate as function(value as T) as bool) as T? {
  98. for value in this
  99. if predicate(value)
  100. return value;
  101. return null;
  102. }
  103. public first(predicate as function(i as usize, value as T) as bool) as T? {
  104. for i, value in this
  105. if predicate(i, value)
  106. return value;
  107. return null;
  108. }
  109. public last(predicate as function(value as T) as bool) as T? {
  110. var i = length;
  111. while i > 0 {
  112. i--;
  113. if predicate(this[i])
  114. return this[i];
  115. }
  116. return null;
  117. }
  118. public last(predicate as function(index as usize, value as T) as bool) as T? {
  119. var i = length;
  120. while i > 0 {
  121. i--;
  122. if predicate(i, this[i])
  123. return this[i];
  124. }
  125. return null;
  126. }
  127. public count(predicate as function(value as T) as bool) as usize {
  128. var result = 0;
  129. for value in this
  130. if predicate(value)
  131. result++;
  132. return result;
  133. }
  134. public count(predicate as function(index as usize, value as T) as bool) as usize {
  135. var result = 0;
  136. for i, value in this
  137. if predicate(i, value)
  138. result++;
  139. return result;
  140. }
  141. public index<K>(key as function(value as T) as K) as T[K] {
  142. var result = new T[K];
  143. for value in this
  144. result[key(value)] = value;
  145. return result;
  146. }
  147. }