Advertisement
Guest User

Untitled

a guest
Sep 16th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. #include <malloc.h>
  2. #include <stdio.h>
  3. #include <assert.h>
  4. #include <string.h>
  5.  
  6. #include "array.h"
  7.  
  8.  
  9. // Construction / Destruction
  10.  
  11. Array array_new(long capacity){
  12. assert(capacity > 0);
  13. return (Array){malloc(sizeof(long)*capacity), 0, 0, capacity};
  14. }
  15.  
  16. void array_destroy(Array a){
  17. free(a.data);
  18. }
  19.  
  20.  
  21. // Primitives
  22.  
  23. long array_empty(Array a){
  24. return a.back <= a.front;
  25. }
  26.  
  27. long array_front(Array a){
  28. return a.data[a.front];
  29. }
  30.  
  31. long array_back(Array a){
  32. return a.data[a.back - 1];
  33. }
  34.  
  35. void array_popFront(Array* a){
  36. a->front++;
  37. }
  38.  
  39. void array_popBack(Array* a){
  40. a->back--;
  41. }
  42.  
  43. Array array_save(Array a){
  44. return (Array){a.data, a.front, a.back, a.capacity};
  45. }
  46.  
  47.  
  48. // Iteration
  49.  
  50. void array_foreach(Array a, void fn(long)){
  51. for(Array b = array_save(a); !array_empty(b); array_popFront(&b)){
  52. fn(array_front(b));
  53. }
  54. }
  55.  
  56. void array_foreachReverse(Array a, void fn(long)){
  57. for(Array b = array_save(a); !array_empty(b); array_popBack(&b)){
  58. fn(array_back(b));
  59. }
  60. }
  61.  
  62. static void _array_printSingleLongHelper(long i){
  63. printf(", %ld", i);
  64. }
  65.  
  66. void array_print(Array a){
  67. printf("Array:{");
  68. if(!array_empty(a)){
  69. printf("%ld", array_front(a));
  70. array_popFront(&a);
  71. }
  72. array_foreach(a, _array_printSingleLongHelper);
  73. printf("}\n");
  74. }
  75.  
  76.  
  77. // Capacity
  78.  
  79. long array_length(Array a){
  80. return a.back - a.front;
  81. }
  82.  
  83. void array_reserve(Array* a, long capacity){
  84.  
  85. }
  86.  
  87.  
  88. // Modifiers
  89.  
  90. void array_insertBack(Array* a, long stuff){
  91.  
  92. a->data[a->back] = stuff;
  93. a->back++;
  94. printf("back = %ld\n", a->back);
  95. }
  96.  
  97.  
  98. int main(int argc, char const *argv[])
  99. {
  100. Array test = array_new(10);
  101. /*array_insertBack(&test, 5);
  102.  
  103. array_print(test);*/
  104.  
  105. for (int i = 0; i < 20; i++) {
  106.  
  107. array_print(test);
  108. array_insertBack(&test, i);
  109. }
  110. return 0;
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement