Anophoo

deque.c

Mar 1st, 2017
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.26 KB | None | 0 0
  1. #include "MyDeque.h"
  2. #define initialAllocation 4
  3.  
  4. void DequeNew(deque* dq, int elemSize) {
  5. dq->elemSize = elemSize;
  6. dq->allocLen = initialAllocation;
  7. dq->logLen = 0;
  8. dq->addr = malloc(dq->elemSize * dq->allocLen);
  9. assert(dq->addr != NULL);
  10. }
  11.  
  12. int DequeSize(deque* dq) {
  13. return dq->logLen;
  14. }
  15.  
  16. void growBabeGrow(deque* dq) {
  17. if (dq->logLen == dq->allocLen) {
  18. dq->addr = realloc(dq->addr, dq->elemSize * dq->logLen * 2);
  19. dq->allocLen *= 2;
  20. }
  21. assert (dq->addr != NULL);
  22. }
  23.  
  24. void DequePushBack(deque* dq, void* elem) {
  25. growBabeGrow(dq);
  26. memcpy((char*)dq->addr + dq->elemSize * dq->logLen, elem, dq->elemSize);
  27. dq->logLen++;
  28. }
  29.  
  30. void DequePushFront(deque* dq, void* elem) {
  31. growBabeGrow(dq);
  32. memmove((char*)dq->addr + dq->elemSize, dq->addr, dq->elemSize * dq->logLen);
  33. memcpy(dq->addr, elem, dq->elemSize);
  34. dq->logLen++;
  35. }
  36.  
  37. void DequePopBack(deque* dq, void* elem) {
  38. assert(dq->logLen > 0);
  39. dq->logLen--;
  40. elem = (char*)dq->addr + dq->logLen * dq->elemSize;
  41. // free((char*)dq->addr + dq->logLen * dq->elemSize);
  42. }
  43.  
  44. void DequePrintInt(deque* dq) {
  45. for (int i = 0; i < dq->logLen; ++i)
  46. {
  47. int* k = (int*)((char*)dq->addr + i * sizeof(int));
  48. printf("%d\n", *k);
  49. }
  50. }
  51.  
  52. void DequeDispose(deque* dq) {
  53. free(dq->addr);
  54. }
Advertisement
Add Comment
Please, Sign In to add comment