home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / calc / part02 / alloc.h next >
C/C++ Source or Header  |  1992-05-09  |  3KB  |  124 lines

  1. /*
  2.  * Copyright (c) 1992 David I. Bell
  3.  * Permission is granted to use, distribute, or modify this source,
  4.  * provided that this copyright notice remains intact.
  5.  *
  6.  * Allocator definitions (fast malloc and free)
  7.  */
  8.  
  9. #if defined(UNIX_MALLOC)
  10.  
  11. #include "have_malloc.h"
  12. #ifdef HAVE_MALLOC_H
  13. # include <malloc.h>
  14. #else
  15. # if defined(__STDC__)
  16.    extern void *malloc();
  17.    extern void *realloc();
  18.    extern void free();
  19. # else
  20.    extern char *malloc();
  21.    extern char *realloc();
  22.    extern void free();
  23. # endif
  24. #endif
  25.  
  26. #include "have_string.h"
  27.  
  28. #ifdef HAVE_STRING_H
  29. # include <string.h>
  30.  
  31. #else
  32.  
  33. # ifdef OLD_BSD
  34. extern void bcopy();
  35. extern void bfill();
  36. extern char *index();
  37. # else /* OLD_BSD */
  38. extern void memcpy();
  39. extern void memset();
  40. #  if defined(__STDC__)
  41. extern void *strchr();
  42. #  else
  43. extern char *strchr();
  44. #  endif
  45. # endif /* OLD_BSD */
  46. extern void strcpy();
  47. extern void strncpy();
  48. extern void strcat();
  49. extern int strcmp();
  50. extern long strlen();    /* should be size_t, but old systems don't have it */
  51.  
  52. #endif
  53.  
  54. #ifdef OLD_BSD
  55. #undef memcpy
  56. #define memcpy(s1, s2, n) bcopy(s2, s1, n)
  57. #undef memset
  58. #define memset(s, c, n) bfill(s, n, c)
  59. #undef strchr
  60. #define strchr(s, c) index(s, c)
  61. #endif
  62.  
  63. #ifdef VSPRINTF
  64. /*
  65.  * XXX - hack aleart
  66.  *
  67.  * Systems that do not have vsprintf() need something.  In some cases
  68.  * the sprintf function will deal correctly with the va_alist 3rd arg.
  69.  * Hope for the best!
  70.  */
  71. #define vsprintf sprintf
  72. #endif
  73.  
  74. extern void exit();
  75.  
  76. #define mem_alloc malloc
  77. #define mem_realloc realloc
  78. #define mem_free free
  79.  
  80. #else /*UNIX_MALLOC*/
  81.  
  82. #define malloc(a) mem_alloc((long) a)
  83. #define realloc(a,b) mem_realloc((char *) a, (long) b)
  84. #define free(a) mem_free((char *) a)
  85. extern char *mem_alloc();
  86. extern char *mem_realloc();
  87. extern int mem_free();        /* MUST be int even though no return value */
  88.  
  89. #endif /*UNIX_MALLOC*/
  90.  
  91.  
  92. /*
  93.  * An item to be placed on a free list.
  94.  * These items are overlayed on top of the actual item being managed.
  95.  * Therefore, the managed items must be at least this size!
  96.  * Also, all items on a single free list must be the same size.
  97.  */
  98. struct free_item {
  99.     struct free_item *next;            /* next item on free list */
  100. };
  101. typedef struct free_item FREEITEM;
  102.  
  103.  
  104. /*
  105.  * The actual free list header.
  106.  */
  107. typedef struct {
  108.     long        itemsize;    /* size of an item being managed */
  109.     long        maxfree;    /* maximum number of free items */
  110.     long        curfree;    /* current number of free items */
  111.     FREEITEM    *freelist;    /* the free list */
  112. } FREELIST;
  113.  
  114. #if defined(__STDC__)
  115. typedef void ALLOCITEM;
  116. #else
  117. typedef char ALLOCITEM;
  118. #endif
  119. extern ALLOCITEM * allocitem( /* FREELIST * */ );
  120. extern void freeitem( /* FREELIST *, char * */ );
  121. extern void mem_stats();
  122.  
  123. /* END CODE */
  124.