MCPcopy Create free account
hub / github.com/SoarGroup/Soar / UnregisterWithKernel

Method UnregisterWithKernel

Core/KernelSML/src/sml_KernelCallback.cpp:219–254  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

217}
218
219void KernelCallback::UnregisterWithKernel(int eventID)
220{
221 if (m_Registered[eventID] != true)
222 {
223 return ;
224 }
225
226 m_Registered[eventID] = false ;
227
228 std::ostringstream buffer;
229 buffer << "id_0x" << this << "_evt_" << eventID;
230 std::string callbackID = buffer.str() ;
231
232 agent* pAgent = m_pCallbackAgentSML->GetSoarAgent() ;
233
234 if (eventID != smlEVENT_BEFORE_PHASE_EXECUTED && eventID != smlEVENT_AFTER_PHASE_EXECUTED)
235 {
236 SOAR_CALLBACK_TYPE callbackType = SOAR_CALLBACK_TYPE(GetCallbackFromEventID(eventID));
237 soar_remove_callback(pAgent, callbackType, callbackID.c_str()) ;
238 }
239 else
240 {
241 // BEFORE_PHASE and AFTER_PHASE are implemented by listening for all lower level phase events
242 int beforePhaseEvents[] = { smlEVENT_BEFORE_INPUT_PHASE, smlEVENT_BEFORE_PROPOSE_PHASE, smlEVENT_BEFORE_DECISION_PHASE, smlEVENT_BEFORE_APPLY_PHASE, smlEVENT_BEFORE_OUTPUT_PHASE, smlEVENT_BEFORE_PREFERENCE_PHASE, smlEVENT_BEFORE_WM_PHASE } ;
243 int afterPhaseEvents[] = { smlEVENT_AFTER_INPUT_PHASE, smlEVENT_AFTER_PROPOSE_PHASE, smlEVENT_AFTER_DECISION_PHASE, smlEVENT_AFTER_APPLY_PHASE, smlEVENT_AFTER_OUTPUT_PHASE, smlEVENT_AFTER_PREFERENCE_PHASE, smlEVENT_AFTER_WM_PHASE } ;
244
245 int* events = (eventID == smlEVENT_BEFORE_PHASE_EXECUTED) ? beforePhaseEvents : afterPhaseEvents ;
246
247 for (int i = 0 ; i < 7 ; i++)
248 {
249 int phaseEvent = events[i] ;
250 SOAR_CALLBACK_TYPE callbackType = SOAR_CALLBACK_TYPE(GetCallbackFromEventID(phaseEvent)) ;
251 soar_remove_callback(pAgent, callbackType, callbackID.c_str()) ;
252 }
253 }
254}
255

Callers 7

DoSourceMethod · 0.80
~AgentOutputFlusherMethod · 0.80
RemoveListenerMethod · 0.80
RemoveListenerMethod · 0.80

Calls 2

SOAR_CALLBACK_TYPEEnum · 0.85
soar_remove_callbackFunction · 0.85

Tested by

no test coverage detected