Main Page | Modules | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals | Related Pages

engines.h

Go to the documentation of this file.
00001 /*
00002 ** Copyright (C) 2005 by Kevin L. Mitchell <klmitch@mit.edu>
00003 **
00004 ** This program is free software; you can redistribute it and/or modify
00005 ** it under the terms of the GNU General Public License as published by
00006 ** the Free Software Foundation; either version 2 of the License, or
00007 ** (at your option) any later version.
00008 **
00009 ** This program is distributed in the hope that it will be useful,
00010 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
00011 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012 ** GNU General Public License for more details.
00013 **
00014 ** You should have received a copy of the GNU General Public License
00015 ** along with this program; if not, write to the Free Software
00016 ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00017 **
00018 ** @(#)$Id: engines.h,v 1.18 2005/12/29 04:33:58 klmitch Exp $
00019 */
00020 #ifndef __include_event_engines_h__
00021 #define __include_event_engines_h__
00022 
00037 #ifndef __EVENT_LIBRARY__
00038 # include <event/event.h>
00039 # include <event/sock.h>
00040 # include <event/sig.h>
00041 # include <event/tim.h>
00042 #endif /* __EVENT_LIBRARY__ */
00043 
00044 EV_BEGIN_C_DECLS
00045 
00046 struct timeval;
00047 
00055 #if DOXYGEN
00056 #define ENGINE_MODULE
00057 #endif /* DOXYGEN */
00058 
00068 #define _ev__p(l, r)    l ## r
00069 
00080 #define _ev_paste(l, r) _ev__p(l, r)
00081 
00101 #if DOXYGEN
00102 extern ev_engine_t *engine_mod_init(ev_ctx_t *ctx);
00103 #else
00104 #define engine_mod_init _ev_paste(ENGINE_MODULE, _LTX_engine_mod_init)
00105 #endif /* DOXYGEN */
00106 
00121 #if DOXYGEN
00122 extern ev_engine_t *engine_module;
00123 #else
00124 #define engine_module   _ev_paste(ENGINE_MODULE, _LTX_engine_module)
00125 #endif /* DOXYGEN */
00126 
00133 typedef struct _ev_engine_s ev_engine_t;
00134 
00141 typedef struct _ev_englink_s _ev_englink_t;
00142 
00150 typedef struct _ev_sockets_s _ev_sockets_t;
00151 
00159 typedef struct _ev_signals_s _ev_signals_t;
00160 
00168 typedef struct _ev_timers_s _ev_timers_t;
00169 
00187 typedef ev_engine_t *(*ev_modinit_t)(ev_ctx_t *ctx);
00188 
00205 typedef ev_err_t (*ev_init_t)(ev_ctx_t *ctx, ev_engine_t *engine,
00206                               ev_flags_t *eng_flags);
00207 
00223 typedef ev_err_t (*ev_poll_t)(ev_ctx_t *ctx, ev_engine_t *engine,
00224                               struct timeval *timeout);
00225 
00235 typedef void (*ev_fini_t)(ev_ctx_t *ctx, ev_engine_t *engine);
00236 
00250 typedef ev_err_t (*ev_sockadd_t)(ev_ctx_t *ctx, ev_engine_t *engine,
00251                                  ev_sock_t *sock);
00252 
00266 typedef ev_err_t (*ev_sockrem_t)(ev_ctx_t *ctx, ev_engine_t *engine,
00267                                  ev_sock_t *sock);
00268 
00284 typedef ev_err_t (*ev_sockev_t)(ev_ctx_t *ctx, ev_engine_t *engine,
00285                                 ev_sock_t *sock, ev_flags_t evs);
00286 
00300 typedef ev_err_t (*ev_sigadd_t)(ev_ctx_t *ctx, ev_engine_t *engine,
00301                                 ev_sig_t *sig);
00302 
00316 typedef ev_err_t (*ev_sigrem_t)(ev_ctx_t *ctx, ev_engine_t *engine,
00317                                 ev_sig_t *sig);
00318 
00332 typedef ev_err_t (*ev_timadd_t)(ev_ctx_t *ctx, ev_engine_t *engine,
00333                                 ev_tim_t *tim);
00334 
00348 typedef ev_err_t (*ev_timrem_t)(ev_ctx_t *ctx, ev_engine_t *engine,
00349                                 ev_tim_t *tim);
00350 
00356 struct _ev_englink_s {
00357   ev_engine_t          *el_next;        
00358   ev_engine_t          *el_prev;        
00359 };
00360 
00366 struct _ev_sockets_s {
00367   _ev_englink_t         eso_active;     
00368   void                 *eso_data;       
00369   ev_sockadd_t          eso_add;        
00370   ev_sockrem_t          eso_rem;        
00371   ev_sockev_t           eso_ev;         
00372 };
00373 
00379 struct _ev_signals_s {
00380   _ev_englink_t         esi_active;     
00381   void                 *esi_data;       
00382   ev_sigadd_t           esi_add;        
00383   ev_sigrem_t           esi_rem;        
00384 };
00385 
00391 struct _ev_timers_s {
00392   _ev_englink_t         eti_active;     
00393   void                 *eti_data;       
00394   ev_timadd_t           eti_add;        
00395   ev_timrem_t           eti_rem;        
00396 };
00397 
00403 struct _ev_engine_s {
00404   ev_magic_t            eng_magic;      
00405   const char           *eng_name;       
00406   const char           *eng_desc;       
00407   ev_flags_t            eng_flags;      
00408   ev_flags_t            eng_runfl;      
00409   _ev_englink_t         eng_list;       
00410   void                 *eng_handle;     
00411   void                 *eng_data;       
00412   ev_init_t             eng_init;       
00413   ev_poll_t             eng_poll;       
00414   ev_fini_t             eng_fini;       
00415   _ev_sockets_t         eng_socket;     
00416   _ev_signals_t         eng_signal;     
00417   _ev_timers_t          eng_timer;      
00418 };
00419 
00424 #define EV_ENGINE_MAGIC 0x909ca8e5
00425 
00483 #define EV_ENGINE_INIT(name, desc, flags, init, poll, fini, so_add, so_rem,   \
00484                        so_ev, si_add, si_rem, ti_add, ti_rem)                 \
00485         { EV_ENGINE_MAGIC, (name), (desc), (flags), 0, { 0, 0 }, 0,           \
00486           0, (init), (poll), (fini),                                          \
00487           { { 0, 0 }, 0, (so_add), (so_rem), (so_ev) },                       \
00488           { { 0, 0 }, 0, (si_add), (si_rem) },                                \
00489           { { 0, 0 }, 0, (ti_add), (ti_rem) } }
00490 
00499 #define EV_ENGINE_SOCKET        0x00000001
00500 
00509 #define EV_ENGINE_SIGNAL        0x00000002
00510 
00519 #define EV_ENGINE_TIMER         0x00000004
00520 
00527 #define EV_ENGINE_COMPMASK      (EV_ENGINE_SOCKET | EV_ENGINE_SIGNAL |        \
00528                                  EV_ENGINE_TIMER)
00529 
00535 #define EV_ENGINE_REGISTERED    0x00000008
00536 
00542 #define EV_ENGINE_RUNNING       0x00000010
00543 
00556 #define eng_verify(eng)         ((eng) && (eng)->eng_magic == EV_ENGINE_MAGIC)
00557 
00566 #define eng_name(eng)           ((eng)->eng_name)
00567 
00576 #define eng_desc(eng)           ((eng)->eng_desc)
00577 
00586 #define eng_flags(eng)          ((eng)->eng_flags)
00587 
00597 #define eng_runfl(eng)          ((eng)->eng_runfl)
00598 
00607 #define eng_runfl_set(eng, fl)  ((eng)->eng_runfl |= (fl))
00608 
00617 #define eng_runfl_clr(eng, fl)  ((eng)->eng_runfl &= ~(fl))
00618 
00628 #define eng_data(eng)           ((eng)->eng_data)
00629 
00639 #define eng_data_set(eng, data) ((eng)->eng_data = (data))
00640 
00650 #define eng_sockdata(eng)       ((eng)->eng_socket.eso_data)
00651 
00661 #define eng_sockdata_set(eng, data)                                           \
00662                                 ((eng)->eng_socket.eso_data = (data))
00663 
00673 #define eng_sigdata(eng)        ((eng)->eng_signal.esi_data)
00674 
00684 #define eng_sigdata_set(eng, data)                                            \
00685                                 ((eng)->eng_signal.esi_data = (data))
00686 
00696 #define eng_timdata(eng)        ((eng)->eng_timer.eti_data)
00697 
00707 #define eng_timdata_set(eng, data)                                            \
00708                                 ((eng)->eng_timer.eti_data = (data))
00709 
00717 #define so_eevents_set(sock, flags)                                           \
00718                                 _so_set((sock), _so_encev((flags),            \
00719                                                           _EV_SOCK_EEVENTS))
00720 
00728 #define so_eevents_clr(sock, flags)                                           \
00729                                 _so_clr((sock), _so_encev((flags),            \
00730                                                           _EV_SOCK_EEVENTS))
00731 
00749 extern ev_err_t engine_register(ev_ctx_t *ctx, ev_engine_t *engine)
00750      _gca_nonnull((1, 2));
00751 
00771 extern ev_err_t engine_activate(ev_ctx_t *ctx, ev_engine_t *engine,
00772                                 ev_flags_t comps)
00773      _gca_nonnull((1, 2));
00774 
00794 extern ev_err_t event_attr_engine(ev_attr_t *attr, ev_engine_t *engine)
00795      _gca_nonnull((1, 2));
00796 
00797 EV_END_C_DECLS
00798 
00801 #endif /* __include_event_engines_h__ */

Generated on Wed Dec 28 23:36:56 2005 for event by  doxygen 1.4.4