|
|
1.1 root 1: .NH 2
2: Associating X Resources to User Data Structures
3: .IN "Hash Lookup"
4: .IN "Window" "ID's"
5: .IN "Resource ID's"
6: .IN "XId"
7: .PP
8: Application programs often need to be able to easily refer to
9: their own data structures when an event arrives.
10: The \fIXAssocTable\fP system provides users of the X library with a method
11: of associating their own data structures with X resources.
12: (Bitmaps, Pixmaps, Fonts, Windows, and so on).
13: .PP
14: An \fIXAssocTable\fP can be used to type X resources.
15: For example, the user
16: may wish to have three or four `types' of windows each with different
17: properties.
18: This can be accomplished by associating each X window id
19: with a pointer to a `window property' data structure defined by the
20: user.
21: .IN "Definitions" "XId"
22: A generic type has been defined in the X library for resource id's.
23: .IN "XId"
24: It is called ``XId''.
25: .PP
26: There are a few guidelines that should be observed when using an
27: \fIXAssocTable\fP:
28: .LP
29: .IN "XId"
30: First, all \fIXId\fP's are relative to the currently active display.
31: Therefore, if you are using multiple displays you need to be sure the
32: correct display is active before performing an \fIXAssocTable\fP operation.
33: \fIXAssocTable\fP imposes no restrictions on the number of X ids per table,
34: the number of X ids per display or the number of displays per table.
35: .LP
36: Second, because of the hashing scheme used by the association
37: mechanism the following rules for determining the size of \fIXAssocTable\fPs
38: should be followed.
39: Associations will be made and looked up more
40: efficiently if the table size (number of buckets in the hashing
41: system) is a power of two and if there are not more than 8 Xids per
42: bucket.
43: .FD
44: .IN "XAssocTable"
45: .IN "Definitions" "XCreateAssocTable"
46: .IN "XCreateAssocTable"
47: XAssocTable *XCreateAssocTable(size)
48: int size; /* Desired size (in buckets) of the table. */
49: .FN
50: This routine returns a pointer to a newly created \fIXAssocTable\fP.
51: The "size" argument specifies the number of buckets in \fIXAssocTable\fP's
52: hashing system. For reasons of efficiency the number of buckets
53: should be a power of two. Some size suggestions might be: use 32
54: buckets per 100 objects; a reasonable maximum number of object per
55: buckets is 8. If there is an error allocating memory for the
56: \fIXAssocTable\fP, a NULL pointer is returned.
57: .FD
58: .IN "XAssocTable"
59: .IN "Definitions" "XDestroyAssocTable"
60: .IN "XDestroyAssocTable"
61: XDestroyAssocTable(table)
62: XAssocTable *table; /* Table to destroy. */
63: .FN
64: Destroy (free the memory associated with) an XAssocTable.
65: Using an \fIXAssocTable\fP after it has been destroyed is guaranteed to have
66: unpredictable and probably disastrous consequences!
67: .FD
68: .IN "XAssocTable"
69: .IN "Definitions" "XMakeAssoc"
70: .IN "XMakeAssoc"
71: XMakeAssoc(table, x_id, data)
72: XAssocTable *table; /* Table in which to make the association. */
73: XId x_id; /* X resource id. */
74: caddr_t data; /* Data to associate with the XId. */
75: .FN
76: .IN "XId"
77: Insert data into an \fIXAssocTable\fP keyed on an XId. Data is
78: inserted into the table only once. Redundant inserts are meaningless
79: and cause no problems. The queue in each association bucket is sorted
80: from the lowest XId to the highest XId.
81: .FD
82: .IN "XAssocTable"
83: .IN "Definitions" "XLookUpAssoc"
84: .IN "XLookupAssoc"
85: caddr_t XLookUpAssoc(table, x_id)
86: XAssocTable *table; /* Table to look in. */
87: XId x_id; /* XId to look for. */
88: .FN
89: .IN "XId"
90: Retrieve the data stored in an \fIXAssocTable\fP by its XId. If an
91: appropriately matching XId can be found in the table the routine will
92: return the data associated with it. If the \fIx_id\fP can not be found in the
93: table the routine will return NULL.
94: .FD
95: .IN "XAssocTable"
96: .IN "Definitions" "XDeleteAssoc"
97: .IN "XDeleteAssoc"
98: XDeleteAssoc(table, x_id)
99: XAssocTable *table; /* Table to look in. */
100: XId x_id; /* XId to delete. */
101: .FN
102: .IN "XId"
103: Delete an association in an \fIXAssocTable\fP keyed on its XId.
104: Redundant deletes (and deletes of non-existant XId's) are meaningless
105: and cause no problems. Deleteing associations in no way impares
106: the performance of an \fIXAssocTable\fP.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.