Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-196
[bpt/emacs.git] / oldXMenu / XCrAssoc.c
CommitLineData
e745ede7
DL
1/* Copyright Massachusetts Institute of Technology 1985 */
2
3/*
4Permission to use, copy, modify, distribute, and sell this software and its
5documentation for any purpose is hereby granted without fee, provided that
6the above copyright notice appear in all copies and that both that
7copyright notice and this permission notice appear in supporting
8documentation, and that the name of M.I.T. not be used in advertising or
9publicity pertaining to distribution of the software without specific,
10written prior permission. M.I.T. makes no representations about the
11suitability of this software for any purpose. It is provided "as is"
12without express or implied warranty.
13*/
14
15#include <config.h>
16#include <X11/Xlib.h>
17#include <errno.h>
18#include "X10.h"
19
20#ifndef NULL
21#define NULL 0
22#endif
23
24extern int errno;
25
26/*
27 * XCreateAssocTable - Create an XAssocTable. The size argument should be
28 * a power of two for efficiency reasons. Some size suggestions: use 32
29 * buckets per 100 objects; a reasonable maximum number of object per
30 * buckets is 8. If there is an error creating the XAssocTable, a NULL
31 * pointer is returned.
32 */
33XAssocTable *XCreateAssocTable(size)
34 register int size; /* Desired size of the table. */
35{
36 register XAssocTable *table; /* XAssocTable to be initialized. */
37 register XAssoc *buckets; /* Pointer to the first bucket in */
38 /* the bucket array. */
177c0ea7 39
e745ede7
DL
40 /* Malloc the XAssocTable. */
41 if ((table = (XAssocTable *)malloc(sizeof(XAssocTable))) == NULL) {
42 /* malloc call failed! */
43 errno = ENOMEM;
44 return(NULL);
45 }
177c0ea7 46
e745ede7
DL
47 /* calloc the buckets (actually just their headers). */
48 buckets = (XAssoc *)calloc((unsigned)size, (unsigned)sizeof(XAssoc));
49 if (buckets == NULL) {
50 /* calloc call failed! */
51 errno = ENOMEM;
52 return(NULL);
53 }
54
55 /* Insert table data into the XAssocTable structure. */
56 table->buckets = buckets;
57 table->size = size;
58
59 while (--size >= 0) {
60 /* Initialize each bucket. */
61 buckets->prev = buckets;
62 buckets->next = buckets;
63 buckets++;
64 }
65
66 return(table);
67}
ab5796a9
MB
68
69/* arch-tag: 5df3237d-ada0-4345-a3ab-282cafb397aa
70 (do not change this comment) */