Main Page   Compound List   File List   Compound Members   File Members  

callback.h

Go to the documentation of this file.
00001 
00028  /* Two points about this enumeration: a) The first entry is not */
00029  /* a valid callback because 0 is used to indicate an invalid or */
00030  /* missing callback and b) The last entry in the enum list      */
00031  /* indicates how many enums are defined.                        */
00032 
00033 #ifndef CALLBACK_H_INCLUDED         /* Avoid duplicate includes  */
00034 #define CALLBACK_H_INCLUDED          /* excludeFromBuildInfo */
00035 
00036  /* First we define the possible callbacks in an enum.  Then we  */
00037  /* describe how each one will be called in user code.           */
00038 
00039 typedef enum {
00040   NO_CALLBACK,                      /* Used for missing callback */
00041   SYSTEM_STARTUP_CALLBACK,
00042   SYSTEM_TERMINATION_CALLBACK,
00043   BEFORE_INIT_SOAR_CALLBACK,
00044   AFTER_INIT_SOAR_CALLBACK,
00045   AFTER_HALT_SOAR_CALLBACK,
00046   BEFORE_SCHEDULE_CYCLE_CALLBACK,
00047   AFTER_SCHEDULE_CYCLE_CALLBACK,
00048   BEFORE_DECISION_CYCLE_CALLBACK,
00049   AFTER_DECISION_CYCLE_CALLBACK,
00050   BEFORE_INPUT_PHASE_CALLBACK,
00051   INPUT_PHASE_CALLBACK,
00052   AFTER_INPUT_PHASE_CALLBACK,
00053   BEFORE_PREFERENCE_PHASE_CALLBACK,
00054   AFTER_PREFERENCE_PHASE_CALLBACK,
00055   BEFORE_WM_PHASE_CALLBACK,
00056   AFTER_WM_PHASE_CALLBACK,
00057   BEFORE_OUTPUT_PHASE_CALLBACK,
00058   OUTPUT_PHASE_CALLBACK,
00059   AFTER_OUTPUT_PHASE_CALLBACK,
00060   BEFORE_DECISION_PHASE_CALLBACK,
00061   AFTER_DECISION_PHASE_CALLBACK,
00062   WM_CHANGES_CALLBACK,
00063   CREATE_NEW_CONTEXT_CALLBACK,
00064   POP_CONTEXT_STACK_CALLBACK,
00065   CREATE_NEW_ATTRIBUTE_IMPASSE_CALLBACK,
00066   REMOVE_ATTRIBUTE_IMPASSE_CALLBACK,
00067   PRODUCTION_JUST_ADDED_CALLBACK,
00068   PRODUCTION_JUST_ABOUT_TO_BE_EXCISED_CALLBACK,
00069   FIRING_CALLBACK,
00070   RETRACTION_CALLBACK,
00071   SYSTEM_PARAMETER_CHANGED_CALLBACK,
00072   PRINT_CALLBACK,
00073   LOG_CALLBACK,
00074   ASK_CALLBACK,
00075   WAIT_CALLBACK,
00076 #ifdef ATTENTION_LAPSE
00077   INIT_LAPSE_DURATION_CALLBACK,
00078 #endif
00079   /*  READ_CALLBACK,    */                              /* kjh CUSP B10 */
00080   /*  RECORD_CALLBACK,  */                              /* kjh CUSP B10 */
00081   NUMBER_OF_CALLBACKS               /* Not actually a callback   */
00082                                     /* type.  Used to indicate   */
00083                                     /* list size and MUST ALWAYS */
00084                                     /* BE LAST.                  */
00085 } SOAR_CALLBACK_TYPE;
00086 
00087 #define NUMBER_OF_MONITORABLE_CALLBACKS (NUMBER_OF_CALLBACKS - 2)
00088 
00089 
00090 typedef enum {
00091   NO_GLOBAL_CALLBACK,
00092   GLB_CREATE_AGENT,
00093   GLB_AGENT_CREATED,
00094   GLB_DESTROY_AGENT,
00095   NUMBER_OF_GLOBAL_CALLBACKS
00096 
00097 } SOAR_GLOBAL_CALLBACK_TYPE; 
00098 
00099 typedef list * soar_global_callback_array[NUMBER_OF_GLOBAL_CALLBACKS];
00100 
00101 
00377 typedef list * soar_callback_array[NUMBER_OF_CALLBACKS];
00378 
00383 typedef void * soar_callback_agent;
00384 
00388 typedef char * soar_callback_id;  
00389 
00396 typedef void * soar_callback_data;
00397 
00403 typedef void * soar_call_data;
00404 
00409 typedef void (*soar_callback_fn)(soar_callback_agent, 
00410                                  soar_callback_data, 
00411                                  soar_call_data);
00412 
00413 
00414 typedef void (*soar_callback_free_fn)(soar_callback_data);
00415 
00416 typedef struct callback_struct 
00417 {
00418   soar_callback_id      id;
00419   soar_callback_fn      function;
00420   soar_callback_data    data;
00421   soar_callback_free_fn free_function;
00422 } soar_callback;
00423 
00424 
00425 extern void soar_callback_data_free_string (soar_callback_data);
00426 extern char * soar_callback_enum_to_name (SOAR_CALLBACK_TYPE, bool);
00427 extern void soar_destroy_callback(soar_callback *);
00428 extern bool soar_exists_callback (soar_callback_agent, SOAR_CALLBACK_TYPE);
00429 extern soar_callback * soar_exists_callback_id (soar_callback_agent the_agent,
00430                                               SOAR_CALLBACK_TYPE callback_type,
00431                                                 soar_callback_id id);
00432 extern void soar_init_callbacks (soar_callback_agent);
00433 extern void soar_init_global_callbacks( void );
00434 
00435 extern void soar_invoke_callbacks (soar_callback_agent, SOAR_CALLBACK_TYPE, 
00436                                    soar_call_data);
00437 extern void soar_invoke_global_callbacks ( soar_callback_agent,
00438                                    SOAR_CALLBACK_TYPE, 
00439                                    soar_call_data);
00440 extern void soar_invoke_first_callback (soar_callback_agent, 
00441                                         SOAR_CALLBACK_TYPE, 
00442                                         soar_call_data);
00443 extern bool soar_exists_global_callback( SOAR_GLOBAL_CALLBACK_TYPE );
00444 
00445 
00446 #endif

Generated at Wed Aug 8 09:49:32 2001 for The Soar Application Programming Interface by doxygen1.2.6 written by Dimitri van Heesch, © 1997-2001