LinkedBlockList.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #include "LinkedBlockList.h"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. using namespace OBJREC;
  5. /*********************************************************************/
  6. void LinkedBlockList::addFront(ListType item) {
  7. if ( m_head_block_size == GCLL_BLOCK_SIZE )
  8. {
  9. LLBlock *tmp = (LLBlock *) new LLBlock;
  10. if ( !tmp ) {
  11. printf("\nOut of memory");
  12. exit(1);
  13. }
  14. tmp -> m_next = m_head;
  15. m_head = tmp;
  16. m_head_block_size = 0;
  17. }
  18. m_head ->m_item[m_head_block_size] = item;
  19. m_head_block_size++;
  20. }
  21. /*********************************************************************/
  22. ListType LinkedBlockList::next()
  23. {
  24. ListType toReturn = m_cursor -> m_item[m_cursor_ind];
  25. m_cursor_ind++;
  26. if ( m_cursor == m_head && m_cursor_ind >= m_head_block_size )
  27. {
  28. m_cursor = m_cursor ->m_next;
  29. m_cursor_ind = 0;
  30. }
  31. else if ( m_cursor_ind == GCLL_BLOCK_SIZE )
  32. {
  33. m_cursor = m_cursor ->m_next;
  34. m_cursor_ind = 0;
  35. }
  36. return(toReturn);
  37. }
  38. /*********************************************************************/
  39. bool LinkedBlockList::hasNext()
  40. {
  41. if ( m_cursor != 0 ) return (true);
  42. else return(false);
  43. }
  44. /*********************************************************************/
  45. LinkedBlockList::~LinkedBlockList()
  46. {
  47. LLBlock *tmp;
  48. while ( m_head != 0 )
  49. {
  50. tmp = m_head;
  51. m_head = m_head->m_next;
  52. delete tmp;
  53. }
  54. };
  55. /*********************************************************************/