sw_memory.c 714 B

12345678910111213141516171819202122232425262728293031323334
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <grass/gis.h>
  4. #include "sw_defs.h"
  5. int freeinit(struct Freelist *fl, int size)
  6. {
  7. fl->head = (struct Freenode *)NULL;
  8. fl->nodesize = size;
  9. return 0;
  10. }
  11. char *getfree(struct Freelist *fl)
  12. {
  13. int i;
  14. struct Freenode *t;
  15. if (fl->head == (struct Freenode *)NULL) {
  16. t = (struct Freenode *)G_malloc(sqrt_nsites * fl->nodesize);
  17. for (i = 0; i < sqrt_nsites; i++)
  18. makefree((struct Freenode *)((char *)t + i * fl->nodesize), fl);
  19. }
  20. t = fl->head;
  21. fl->head = (fl->head)->nextfree;
  22. return ((char *)t);
  23. }
  24. int makefree(struct Freenode *curr, struct Freelist *fl)
  25. {
  26. curr->nextfree = fl->head;
  27. fl->head = curr;
  28. return 0;
  29. }