Some atom related optimizations
[platform/upstream/libxkbcommon.git] / src / xkbcomp / expr.h
1 /************************************************************
2  * Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
3  *
4  * Permission to use, copy, modify, and distribute this
5  * software and its documentation for any purpose and without
6  * fee is hereby granted, provided that the above copyright
7  * notice appear in all copies and that both that copyright
8  * notice and this permission notice appear in supporting
9  * documentation, and that the name of Silicon Graphics not be
10  * used in advertising or publicity pertaining to distribution
11  * of the software without specific prior written permission.
12  * Silicon Graphics makes no representation about the suitability
13  * of this software for any purpose. It is provided "as is"
14  * without any express or implied warranty.
15  *
16  * SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
17  * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
18  * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
19  * GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
20  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
21  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
22  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
23  * THE USE OR PERFORMANCE OF THIS SOFTWARE.
24  *
25  ********************************************************/
26
27 #ifndef EXPR_H
28 #define EXPR_H 1
29
30 #include "xkbcomp-priv.h"
31
32 typedef union _ExprResult {
33     const char *str;
34     int ival;
35     unsigned uval;
36     char name[XkbKeyNameLength];
37 } ExprResult;
38
39 extern int
40 ExprResolveLhs(struct xkb_keymap *keymap, ExprDef *expr,
41                ExprResult *elem_rtrn, ExprResult *field_rtrn,
42                ExprDef **index_rtrn);
43
44 typedef struct _LookupEntry {
45     const char *name;
46     unsigned result;
47 } LookupEntry;
48
49 extern const char *
50 exprOpText(unsigned type);
51
52 extern bool
53 LookupModMask(struct xkb_context *ctx, const void *priv, xkb_atom_t field,
54               unsigned type,
55               ExprResult *val_rtrn);
56
57 extern bool
58 LookupVModMask(struct xkb_context *ctx, const void *priv, xkb_atom_t field,
59                unsigned type,
60                ExprResult *val_rtrn);
61
62 extern bool
63 LookupModIndex(struct xkb_context *ctx, const void *priv, xkb_atom_t field,
64                unsigned type,
65                ExprResult *val_rtrn);
66
67 extern int
68 ExprResolveModMask(struct xkb_context *ctx, ExprDef *expr,
69                    ExprResult *val_rtrn);
70
71 extern int
72 ExprResolveVModMask(struct xkb_keymap *keymap, ExprDef *expr,
73                     ExprResult *val_rtrn);
74
75 extern int
76 ExprResolveBoolean(struct xkb_context *ctx, ExprDef *expr,
77                    ExprResult *val_rtrn);
78
79 extern int
80 ExprResolveKeyCode(struct xkb_context *ctx, ExprDef *expr,
81                    ExprResult *val_rtrn);
82
83 extern int
84 ExprResolveInteger(struct xkb_context *ctx, ExprDef *expr,
85                    ExprResult *val_rtrn);
86
87 extern int
88 ExprResolveLevel(struct xkb_context *ctx, ExprDef *expr, ExprResult *val_rtrn);
89
90 extern int
91 ExprResolveGroup(struct xkb_context *ctx, ExprDef *expr, ExprResult *val_rtrn);
92
93 extern int
94 ExprResolveButton(struct xkb_context *ctx, ExprDef *expr,
95                   ExprResult *val_rtrn);
96
97 extern int
98 ExprResolveString(struct xkb_context *ctx, ExprDef *expr,
99                   ExprResult *val_rtrn);
100
101 extern int
102 ExprResolveKeyName(struct xkb_context *ctx, ExprDef *expr,
103                    ExprResult *val_rtrn);
104
105 extern int
106 ExprResolveEnum(struct xkb_context *ctx, ExprDef *expr, ExprResult *val_rtrn,
107                 const LookupEntry *values);
108
109 extern int
110 ExprResolveMask(struct xkb_context *ctx, ExprDef *expr, ExprResult *val_rtrn,
111                 const LookupEntry *values);
112
113 extern int
114 ExprResolveKeySym(struct xkb_context *ctx, ExprDef *expr,
115                   ExprResult *val_rtrn);
116
117 #endif /* EXPR_H */