| 1 | /* Copyright Massachusetts Institute of Technology 1985 */ |
| 2 | #include "copyright.h" |
| 3 | |
| 4 | |
| 5 | #include <config.h> |
| 6 | #include <X11/Xlib.h> |
| 7 | #include <errno.h> |
| 8 | #include "X10.h" |
| 9 | |
| 10 | #ifndef NULL |
| 11 | #define NULL 0 |
| 12 | #endif |
| 13 | |
| 14 | extern int errno; |
| 15 | |
| 16 | /* |
| 17 | * XCreateAssocTable - Create an XAssocTable. The size argument should be |
| 18 | * a power of two for efficiency reasons. Some size suggestions: use 32 |
| 19 | * buckets per 100 objects; a reasonable maximum number of object per |
| 20 | * buckets is 8. If there is an error creating the XAssocTable, a NULL |
| 21 | * pointer is returned. |
| 22 | */ |
| 23 | XAssocTable *XCreateAssocTable(size) |
| 24 | register int size; /* Desired size of the table. */ |
| 25 | { |
| 26 | register XAssocTable *table; /* XAssocTable to be initialized. */ |
| 27 | register XAssoc *buckets; /* Pointer to the first bucket in */ |
| 28 | /* the bucket array. */ |
| 29 | |
| 30 | /* Malloc the XAssocTable. */ |
| 31 | if ((table = (XAssocTable *)malloc(sizeof(XAssocTable))) == NULL) { |
| 32 | /* malloc call failed! */ |
| 33 | errno = ENOMEM; |
| 34 | return(NULL); |
| 35 | } |
| 36 | |
| 37 | /* calloc the buckets (actually just their headers). */ |
| 38 | buckets = (XAssoc *)calloc((unsigned)size, (unsigned)sizeof(XAssoc)); |
| 39 | if (buckets == NULL) { |
| 40 | /* calloc call failed! */ |
| 41 | errno = ENOMEM; |
| 42 | return(NULL); |
| 43 | } |
| 44 | |
| 45 | /* Insert table data into the XAssocTable structure. */ |
| 46 | table->buckets = buckets; |
| 47 | table->size = size; |
| 48 | |
| 49 | while (--size >= 0) { |
| 50 | /* Initialize each bucket. */ |
| 51 | buckets->prev = buckets; |
| 52 | buckets->next = buckets; |
| 53 | buckets++; |
| 54 | } |
| 55 | |
| 56 | return(table); |
| 57 | } |
| 58 | |
| 59 | /* arch-tag: 5df3237d-ada0-4345-a3ab-282cafb397aa |
| 60 | (do not change this comment) */ |