aboutsummaryrefslogtreecommitdiffstats
path: root/conditions.h
blob: 79c2cfad3d2dfae83066717c8c9321cd77d2f72f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/* conditions.h
 * Header for condition handler.
 *
 * $Id$
 *
 * Wireshark - Network traffic analyzer
 * By Gerald Combs <gerald@wireshark.org>
 * Copyright 1998 Gerald Combs
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */

#ifndef CONDITIONS_H
#define CONDITIONS_H

#include <stdarg.h>

#include <glib.h>

/* forward declaration for type 'condition' */
typedef struct condition condition;

/* condition evaluation handler type */
typedef gboolean (*_cnd_eval)(condition*, va_list);

/* condition reset handler type */
typedef void (*_cnd_reset)(condition*);

/* condition class constructor type */
typedef condition* (*_cnd_constr)(condition*, va_list);

/* condition class destructor type */
typedef void (*_cnd_destr)(condition*);

/*
 * Conditions must be created with this function. They can be created for
 * registered classes only.
 *
 * parameter: const char* - Identification of a registered condition class.
 *            ...         - Any number of class specific initial values.
 * returns:   Pointer to a initialized condition of the particular class on
 *            success or NULL on failure.
 */
condition* cnd_new(const char*, ...);

/*
 * Conditions must be deleted with this function when not used anymore.
 *
 * parameter: condition* - Pointer to a condition created with 'cnd_new()'.
 * returns:   -
 */
void cnd_delete(condition*);

/*
 * Call this function to check whether or not a particular condition is true.
 *
 * parameter: condition* - Pointer to an initialized condition.
 *            ...        - Any number of condition specific arguments.
 * returns:   TRUE  - Condition is true.
 *            FALSE - Condition is false.
 */
gboolean cnd_eval(condition*, ...);

/*
 * Call this function to reset this condition to its initial state, i.e. the
 * state it was in right after creation.
 *
 * parameter: condition* - Pointer to an initialized condition.
 * returns:   -
 */
void cnd_reset(condition*);

/*
 * Register a new conditon class.
 * New conditions of this class can be created by calling 'cnd_new()' and
 * supplying the appropriate class id.
 *
 * parameter: const char*  - The class id.
 *            _cnd_constr  - User supplied constructor function for this
 *                           class.
 *            _cnd_destr   - User supplied destructor function for this
 *                           class.
 *            _cnd_eval    - User supplied evaluation handler function for this
                             class.
 *            _cnd_reset   - User supplied reset handler for this class.
 * returns:   TRUE  - Success.
 *            FALSE - Failure.
 */
gboolean cnd_register_class(const char*,
                            _cnd_constr,
                            _cnd_destr,
                            _cnd_eval,
                            _cnd_reset);

/*
 * Unregister a previously registered conditon class. After unregistration
 * of a class it is no longer possible to create conditions of this kind by
 * calling 'cnd_new()'.
 *
 * parameter: const char* - An identification for this condition class.
 * returns:   -
 */
void cnd_unregister_class(const char*);

/*
 * This function returns the user data of the condition.
 *
 * parameter: condition* - Pointer to an initialized condition.
 * returns:   void*      - Pointer to user data of this condition.
 */
void* cnd_get_user_data(condition*);

/*
 * This function sets the user data of the condition.
 *
 * parameter: condition* - Pointer to an initialized condition.
 *            void*      - Pointer to user specified data structure.
 * returns:   -
 */
void cnd_set_user_data(condition*, void*);

#endif /* CONDITIONS_H */