1 | /******************
2 | Copyright (c) 2002 RIPE NCC
3 |
4 | All Rights Reserved
5 |
6 | Permission to use, copy, modify, and distribute this software and its
7 | documentation for any purpose and without fee is hereby granted,
8 | provided that the above copyright notice appear in all copies and that
9 | both that copyright notice and this permission notice appear in
10 | supporting documentation, and that the name of the author not be
11 | used in advertising or publicity pertaining to distribution of the
12 | software without specific, written prior permission.
13 |
14 | THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
15 | ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL
16 | AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
17 | DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
18 | AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
19 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20 | ***************************************/
21 |
22 | #ifndef CLASS_H
23 | #define CLASS_H
24 |
25 | #include <glib.h>
26 |
27 | typedef enum {
28 | ATTR_MANDATORY,
29 | ATTR_OPTIONAL,
30 | ATTR_GENERATED
31 | } attr_choice_t;
32 |
33 | typedef enum {
34 | ATTR_SINGLE,
35 | ATTR_MULTIPLE
36 | } attr_number_t;
37 |
38 | /* info about attributes used by this class */
39 | typedef struct {
40 | int offset;
41 | attr_choice_t choice;
42 | attr_number_t number;
43 | } class_attr_t;
44 |
45 | /* maximum number of attributes in a class */
46 | #define MAX_CLASS_ATTR 50
47 |
48 | typedef struct {
49 | char *name; /* name of class */
50 | int id; /* identifier for this class,
51 | e.g. C_MT, C_RS, etc. */
52 | int num_attr; /* number of attributes */
53 | class_attr_t attr[MAX_CLASS_ATTR]; /* attribute information (in-order) */
54 | GHashTable *attr_hash; /* hash of attribute name ->
55 | class_attr_t */
56 | } class_t;
57 |
58 | /* functions */
59 | const class_t *class_lookup(const char *name);
60 | const class_attr_t *class_attr_lookup(const class_t *class,
61 | const char *attr_name);
62 |
63 | #endif /* CLASS_H */