sc_event.cpp revision 12027
112027Sjungma@eit.uni-kl.de/***************************************************************************** 212027Sjungma@eit.uni-kl.de 312027Sjungma@eit.uni-kl.de Licensed to Accellera Systems Initiative Inc. (Accellera) under one or 412027Sjungma@eit.uni-kl.de more contributor license agreements. See the NOTICE file distributed 512027Sjungma@eit.uni-kl.de with this work for additional information regarding copyright ownership. 612027Sjungma@eit.uni-kl.de Accellera licenses this file to you under the Apache License, Version 2.0 712027Sjungma@eit.uni-kl.de (the "License"); you may not use this file except in compliance with the 812027Sjungma@eit.uni-kl.de License. You may obtain a copy of the License at 912027Sjungma@eit.uni-kl.de 1012027Sjungma@eit.uni-kl.de http://www.apache.org/licenses/LICENSE-2.0 1112027Sjungma@eit.uni-kl.de 1212027Sjungma@eit.uni-kl.de Unless required by applicable law or agreed to in writing, software 1312027Sjungma@eit.uni-kl.de distributed under the License is distributed on an "AS IS" BASIS, 1412027Sjungma@eit.uni-kl.de WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 1512027Sjungma@eit.uni-kl.de implied. See the License for the specific language governing 1612027Sjungma@eit.uni-kl.de permissions and limitations under the License. 1712027Sjungma@eit.uni-kl.de 1812027Sjungma@eit.uni-kl.de *****************************************************************************/ 1912027Sjungma@eit.uni-kl.de 2012027Sjungma@eit.uni-kl.de/***************************************************************************** 2112027Sjungma@eit.uni-kl.de 2212027Sjungma@eit.uni-kl.de sc_event.cpp -- 2312027Sjungma@eit.uni-kl.de 2412027Sjungma@eit.uni-kl.de Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 2512027Sjungma@eit.uni-kl.de 2612027Sjungma@eit.uni-kl.de CHANGE LOG APPEARS AT THE END OF THE FILE 2712027Sjungma@eit.uni-kl.de *****************************************************************************/ 2812027Sjungma@eit.uni-kl.de 2912027Sjungma@eit.uni-kl.de#include <stdlib.h> 3012027Sjungma@eit.uni-kl.de#include <string.h> 3112027Sjungma@eit.uni-kl.de 3212027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_event.h" 3312027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_kernel_ids.h" 3412027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_phase_callback_registry.h" 3512027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_process.h" 3612027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_process_handle.h" 3712027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_simcontext_int.h" 3812027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_object_manager.h" 3912027Sjungma@eit.uni-kl.de#include "sysc/utils/sc_utils_ids.h" 4012027Sjungma@eit.uni-kl.de 4112027Sjungma@eit.uni-kl.denamespace sc_core { 4212027Sjungma@eit.uni-kl.de 4312027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 4412027Sjungma@eit.uni-kl.de// CLASS : sc_event 4512027Sjungma@eit.uni-kl.de// 4612027Sjungma@eit.uni-kl.de// The event class. 4712027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 4812027Sjungma@eit.uni-kl.de 4912027Sjungma@eit.uni-kl.deconst char* 5012027Sjungma@eit.uni-kl.desc_event::basename() const 5112027Sjungma@eit.uni-kl.de{ 5212027Sjungma@eit.uni-kl.de const char* p = strrchr( m_name.c_str(), SC_HIERARCHY_CHAR ); 5312027Sjungma@eit.uni-kl.de return p ? (p + 1) : m_name.c_str(); 5412027Sjungma@eit.uni-kl.de} 5512027Sjungma@eit.uni-kl.de 5612027Sjungma@eit.uni-kl.devoid 5712027Sjungma@eit.uni-kl.desc_event::cancel() 5812027Sjungma@eit.uni-kl.de{ 5912027Sjungma@eit.uni-kl.de // cancel a delta or timed notification 6012027Sjungma@eit.uni-kl.de switch( m_notify_type ) { 6112027Sjungma@eit.uni-kl.de case DELTA: { 6212027Sjungma@eit.uni-kl.de // remove this event from the delta events set 6312027Sjungma@eit.uni-kl.de m_simc->remove_delta_event( this ); 6412027Sjungma@eit.uni-kl.de m_notify_type = NONE; 6512027Sjungma@eit.uni-kl.de break; 6612027Sjungma@eit.uni-kl.de } 6712027Sjungma@eit.uni-kl.de case TIMED: { 6812027Sjungma@eit.uni-kl.de // remove this event from the timed events set 6912027Sjungma@eit.uni-kl.de sc_assert( m_timed != 0 ); 7012027Sjungma@eit.uni-kl.de m_timed->m_event = 0; 7112027Sjungma@eit.uni-kl.de m_timed = 0; 7212027Sjungma@eit.uni-kl.de m_notify_type = NONE; 7312027Sjungma@eit.uni-kl.de break; 7412027Sjungma@eit.uni-kl.de } 7512027Sjungma@eit.uni-kl.de default: 7612027Sjungma@eit.uni-kl.de ; 7712027Sjungma@eit.uni-kl.de } 7812027Sjungma@eit.uni-kl.de} 7912027Sjungma@eit.uni-kl.de 8012027Sjungma@eit.uni-kl.de 8112027Sjungma@eit.uni-kl.devoid 8212027Sjungma@eit.uni-kl.desc_event::notify() 8312027Sjungma@eit.uni-kl.de{ 8412027Sjungma@eit.uni-kl.de // immediate notification 8512027Sjungma@eit.uni-kl.de if( 8612027Sjungma@eit.uni-kl.de // coming from sc_prim_channel::update 8712027Sjungma@eit.uni-kl.de m_simc->update_phase() 8812027Sjungma@eit.uni-kl.de#if SC_HAS_PHASE_CALLBACKS_ 8912027Sjungma@eit.uni-kl.de // coming from phase callbacks 9012027Sjungma@eit.uni-kl.de || m_simc->notify_phase() 9112027Sjungma@eit.uni-kl.de#endif 9212027Sjungma@eit.uni-kl.de ) 9312027Sjungma@eit.uni-kl.de { 9412027Sjungma@eit.uni-kl.de SC_REPORT_ERROR( SC_ID_IMMEDIATE_NOTIFICATION_, "" ); 9512027Sjungma@eit.uni-kl.de return; 9612027Sjungma@eit.uni-kl.de } 9712027Sjungma@eit.uni-kl.de cancel(); 9812027Sjungma@eit.uni-kl.de trigger(); 9912027Sjungma@eit.uni-kl.de} 10012027Sjungma@eit.uni-kl.de 10112027Sjungma@eit.uni-kl.devoid 10212027Sjungma@eit.uni-kl.desc_event::notify( const sc_time& t ) 10312027Sjungma@eit.uni-kl.de{ 10412027Sjungma@eit.uni-kl.de if( m_notify_type == DELTA ) { 10512027Sjungma@eit.uni-kl.de return; 10612027Sjungma@eit.uni-kl.de } 10712027Sjungma@eit.uni-kl.de if( t == SC_ZERO_TIME ) { 10812027Sjungma@eit.uni-kl.de# if SC_HAS_PHASE_CALLBACKS_ 10912027Sjungma@eit.uni-kl.de if( SC_UNLIKELY_( m_simc->get_status() 11012027Sjungma@eit.uni-kl.de & (SC_END_OF_UPDATE|SC_BEFORE_TIMESTEP) ) ) 11112027Sjungma@eit.uni-kl.de { 11212027Sjungma@eit.uni-kl.de std::stringstream msg; 11312027Sjungma@eit.uni-kl.de msg << m_simc->get_status() 11412027Sjungma@eit.uni-kl.de << ":\n\t delta notification of `" 11512027Sjungma@eit.uni-kl.de << name() << "' ignored"; 11612027Sjungma@eit.uni-kl.de SC_REPORT_WARNING( SC_ID_PHASE_CALLBACK_FORBIDDEN_ 11712027Sjungma@eit.uni-kl.de , msg.str().c_str() ); 11812027Sjungma@eit.uni-kl.de return; 11912027Sjungma@eit.uni-kl.de } 12012027Sjungma@eit.uni-kl.de# endif 12112027Sjungma@eit.uni-kl.de if( m_notify_type == TIMED ) { 12212027Sjungma@eit.uni-kl.de // remove this event from the timed events set 12312027Sjungma@eit.uni-kl.de sc_assert( m_timed != 0 ); 12412027Sjungma@eit.uni-kl.de m_timed->m_event = 0; 12512027Sjungma@eit.uni-kl.de m_timed = 0; 12612027Sjungma@eit.uni-kl.de } 12712027Sjungma@eit.uni-kl.de // add this event to the delta events set 12812027Sjungma@eit.uni-kl.de m_delta_event_index = m_simc->add_delta_event( this ); 12912027Sjungma@eit.uni-kl.de m_notify_type = DELTA; 13012027Sjungma@eit.uni-kl.de return; 13112027Sjungma@eit.uni-kl.de } 13212027Sjungma@eit.uni-kl.de# if SC_HAS_PHASE_CALLBACKS_ 13312027Sjungma@eit.uni-kl.de if( SC_UNLIKELY_( m_simc->get_status() 13412027Sjungma@eit.uni-kl.de & (SC_END_OF_UPDATE|SC_BEFORE_TIMESTEP) ) ) 13512027Sjungma@eit.uni-kl.de { 13612027Sjungma@eit.uni-kl.de std::stringstream msg; 13712027Sjungma@eit.uni-kl.de msg << m_simc->get_status() 13812027Sjungma@eit.uni-kl.de << ":\n\t timed notification of `" 13912027Sjungma@eit.uni-kl.de << name() << "' ignored"; 14012027Sjungma@eit.uni-kl.de SC_REPORT_WARNING( SC_ID_PHASE_CALLBACK_FORBIDDEN_ 14112027Sjungma@eit.uni-kl.de , msg.str().c_str() ); 14212027Sjungma@eit.uni-kl.de return; 14312027Sjungma@eit.uni-kl.de } 14412027Sjungma@eit.uni-kl.de# endif 14512027Sjungma@eit.uni-kl.de if( m_notify_type == TIMED ) { 14612027Sjungma@eit.uni-kl.de sc_assert( m_timed != 0 ); 14712027Sjungma@eit.uni-kl.de if( m_timed->m_notify_time <= m_simc->time_stamp() + t ) { 14812027Sjungma@eit.uni-kl.de return; 14912027Sjungma@eit.uni-kl.de } 15012027Sjungma@eit.uni-kl.de // remove this event from the timed events set 15112027Sjungma@eit.uni-kl.de m_timed->m_event = 0; 15212027Sjungma@eit.uni-kl.de m_timed = 0; 15312027Sjungma@eit.uni-kl.de } 15412027Sjungma@eit.uni-kl.de // add this event to the timed events set 15512027Sjungma@eit.uni-kl.de sc_event_timed* et = new sc_event_timed( this, m_simc->time_stamp() + t ); 15612027Sjungma@eit.uni-kl.de m_simc->add_timed_event( et ); 15712027Sjungma@eit.uni-kl.de m_timed = et; 15812027Sjungma@eit.uni-kl.de m_notify_type = TIMED; 15912027Sjungma@eit.uni-kl.de} 16012027Sjungma@eit.uni-kl.de 16112027Sjungma@eit.uni-kl.destatic void sc_warn_notify_delayed() 16212027Sjungma@eit.uni-kl.de{ 16312027Sjungma@eit.uni-kl.de static bool warn_notify_delayed=true; 16412027Sjungma@eit.uni-kl.de if ( warn_notify_delayed ) 16512027Sjungma@eit.uni-kl.de { 16612027Sjungma@eit.uni-kl.de warn_notify_delayed = false; 16712027Sjungma@eit.uni-kl.de SC_REPORT_INFO(SC_ID_IEEE_1666_DEPRECATION_, 16812027Sjungma@eit.uni-kl.de "notify_delayed(...) is deprecated, use notify(sc_time) instead" ); 16912027Sjungma@eit.uni-kl.de } 17012027Sjungma@eit.uni-kl.de} 17112027Sjungma@eit.uni-kl.de 17212027Sjungma@eit.uni-kl.devoid 17312027Sjungma@eit.uni-kl.desc_event::notify_delayed() 17412027Sjungma@eit.uni-kl.de{ 17512027Sjungma@eit.uni-kl.de sc_warn_notify_delayed(); 17612027Sjungma@eit.uni-kl.de if( m_notify_type != NONE ) { 17712027Sjungma@eit.uni-kl.de SC_REPORT_ERROR( SC_ID_NOTIFY_DELAYED_, 0 ); 17812027Sjungma@eit.uni-kl.de } 17912027Sjungma@eit.uni-kl.de // add this event to the delta events set 18012027Sjungma@eit.uni-kl.de m_delta_event_index = m_simc->add_delta_event( this ); 18112027Sjungma@eit.uni-kl.de m_notify_type = DELTA; 18212027Sjungma@eit.uni-kl.de} 18312027Sjungma@eit.uni-kl.de 18412027Sjungma@eit.uni-kl.devoid 18512027Sjungma@eit.uni-kl.desc_event::notify_delayed( const sc_time& t ) 18612027Sjungma@eit.uni-kl.de{ 18712027Sjungma@eit.uni-kl.de sc_warn_notify_delayed(); 18812027Sjungma@eit.uni-kl.de if( m_notify_type != NONE ) { 18912027Sjungma@eit.uni-kl.de SC_REPORT_ERROR( SC_ID_NOTIFY_DELAYED_, 0 ); 19012027Sjungma@eit.uni-kl.de } 19112027Sjungma@eit.uni-kl.de if( t == SC_ZERO_TIME ) { 19212027Sjungma@eit.uni-kl.de // add this event to the delta events set 19312027Sjungma@eit.uni-kl.de m_delta_event_index = m_simc->add_delta_event( this ); 19412027Sjungma@eit.uni-kl.de m_notify_type = DELTA; 19512027Sjungma@eit.uni-kl.de } else { 19612027Sjungma@eit.uni-kl.de // add this event to the timed events set 19712027Sjungma@eit.uni-kl.de sc_event_timed* et = new sc_event_timed( this, 19812027Sjungma@eit.uni-kl.de m_simc->time_stamp() + t ); 19912027Sjungma@eit.uni-kl.de m_simc->add_timed_event( et ); 20012027Sjungma@eit.uni-kl.de m_timed = et; 20112027Sjungma@eit.uni-kl.de m_notify_type = TIMED; 20212027Sjungma@eit.uni-kl.de } 20312027Sjungma@eit.uni-kl.de} 20412027Sjungma@eit.uni-kl.de 20512027Sjungma@eit.uni-kl.de// +---------------------------------------------------------------------------- 20612027Sjungma@eit.uni-kl.de// |"sc_event::register_event" 20712027Sjungma@eit.uni-kl.de// | 20812027Sjungma@eit.uni-kl.de// | This method sets the name of this object instance and optionally adds 20912027Sjungma@eit.uni-kl.de// | it to the object manager's hierarchy. The object instance will be 21012027Sjungma@eit.uni-kl.de// | inserted into the object manager's hierarchy if one of the following is 21112027Sjungma@eit.uni-kl.de// | true: 21212027Sjungma@eit.uni-kl.de// | (a) the leaf name is non-null and does not start with 21312027Sjungma@eit.uni-kl.de// | SC_KERNEL_EVENT_PREFIX. 21412027Sjungma@eit.uni-kl.de// | (b) the event is being created before the start of simulation. 21512027Sjungma@eit.uni-kl.de// | 21612027Sjungma@eit.uni-kl.de// | Arguments: 21712027Sjungma@eit.uni-kl.de// | leaf_name = leaf name of the object or NULL. 21812027Sjungma@eit.uni-kl.de// +---------------------------------------------------------------------------- 21912027Sjungma@eit.uni-kl.devoid sc_event::register_event( const char* leaf_name ) 22012027Sjungma@eit.uni-kl.de{ 22112027Sjungma@eit.uni-kl.de sc_object_manager* object_manager = m_simc->get_object_manager(); 22212027Sjungma@eit.uni-kl.de m_parent_p = m_simc->active_object(); 22312027Sjungma@eit.uni-kl.de 22412027Sjungma@eit.uni-kl.de // No name provided, if we are not executing then create a name: 22512027Sjungma@eit.uni-kl.de 22612027Sjungma@eit.uni-kl.de if( !leaf_name || !leaf_name[0] ) 22712027Sjungma@eit.uni-kl.de { 22812027Sjungma@eit.uni-kl.de if ( sc_is_running( m_simc ) ) return; 22912027Sjungma@eit.uni-kl.de leaf_name = sc_gen_unique_name("event"); 23012027Sjungma@eit.uni-kl.de } 23112027Sjungma@eit.uni-kl.de 23212027Sjungma@eit.uni-kl.de // Create a hierarchichal name and place it into the object manager if 23312027Sjungma@eit.uni-kl.de // its not a kernel event: 23412027Sjungma@eit.uni-kl.de 23512027Sjungma@eit.uni-kl.de object_manager->create_name( leaf_name ).swap( m_name ); 23612027Sjungma@eit.uni-kl.de 23712027Sjungma@eit.uni-kl.de if ( strncmp( leaf_name, SC_KERNEL_EVENT_PREFIX, 23812027Sjungma@eit.uni-kl.de strlen(SC_KERNEL_EVENT_PREFIX) ) ) 23912027Sjungma@eit.uni-kl.de { 24012027Sjungma@eit.uni-kl.de object_manager->insert_event(m_name, this); 24112027Sjungma@eit.uni-kl.de if ( m_parent_p ) 24212027Sjungma@eit.uni-kl.de m_parent_p->add_child_event( this ); 24312027Sjungma@eit.uni-kl.de else 24412027Sjungma@eit.uni-kl.de m_simc->add_child_event( this ); 24512027Sjungma@eit.uni-kl.de } 24612027Sjungma@eit.uni-kl.de} 24712027Sjungma@eit.uni-kl.de 24812027Sjungma@eit.uni-kl.devoid 24912027Sjungma@eit.uni-kl.desc_event::reset() 25012027Sjungma@eit.uni-kl.de{ 25112027Sjungma@eit.uni-kl.de m_notify_type = NONE; 25212027Sjungma@eit.uni-kl.de m_delta_event_index = -1; 25312027Sjungma@eit.uni-kl.de m_timed = 0; 25412027Sjungma@eit.uni-kl.de // clear the dynamic sensitive methods 25512027Sjungma@eit.uni-kl.de m_methods_dynamic.resize(0); 25612027Sjungma@eit.uni-kl.de // clear the dynamic sensitive threads 25712027Sjungma@eit.uni-kl.de m_threads_dynamic.resize(0); 25812027Sjungma@eit.uni-kl.de} 25912027Sjungma@eit.uni-kl.de 26012027Sjungma@eit.uni-kl.de// +---------------------------------------------------------------------------- 26112027Sjungma@eit.uni-kl.de// |"sc_event::sc_event(name)" 26212027Sjungma@eit.uni-kl.de// | 26312027Sjungma@eit.uni-kl.de// | This is the object instance constructor for named sc_event instances. 26412027Sjungma@eit.uni-kl.de// | If the name is non-null or the this is during elaboration add the 26512027Sjungma@eit.uni-kl.de// | event to the object hierarchy. 26612027Sjungma@eit.uni-kl.de// | 26712027Sjungma@eit.uni-kl.de// | Arguments: 26812027Sjungma@eit.uni-kl.de// | name = name of the event. 26912027Sjungma@eit.uni-kl.de// +---------------------------------------------------------------------------- 27012027Sjungma@eit.uni-kl.desc_event::sc_event( const char* name ) : 27112027Sjungma@eit.uni-kl.de m_name(), 27212027Sjungma@eit.uni-kl.de m_parent_p(NULL), 27312027Sjungma@eit.uni-kl.de m_simc( sc_get_curr_simcontext() ), 27412027Sjungma@eit.uni-kl.de m_notify_type( NONE ), 27512027Sjungma@eit.uni-kl.de m_delta_event_index( -1 ), 27612027Sjungma@eit.uni-kl.de m_timed( 0 ), 27712027Sjungma@eit.uni-kl.de m_methods_static(), 27812027Sjungma@eit.uni-kl.de m_methods_dynamic(), 27912027Sjungma@eit.uni-kl.de m_threads_static(), 28012027Sjungma@eit.uni-kl.de m_threads_dynamic() 28112027Sjungma@eit.uni-kl.de{ 28212027Sjungma@eit.uni-kl.de // Skip simulator's internally defined events. 28312027Sjungma@eit.uni-kl.de 28412027Sjungma@eit.uni-kl.de register_event( name ); 28512027Sjungma@eit.uni-kl.de} 28612027Sjungma@eit.uni-kl.de 28712027Sjungma@eit.uni-kl.de// +---------------------------------------------------------------------------- 28812027Sjungma@eit.uni-kl.de// |"sc_event::sc_event(name)" 28912027Sjungma@eit.uni-kl.de// | 29012027Sjungma@eit.uni-kl.de// | This is the object instance constructor for non-named sc_event instances. 29112027Sjungma@eit.uni-kl.de// | If this is during elaboration add create a name and add it to the object 29212027Sjungma@eit.uni-kl.de// | hierarchy. 29312027Sjungma@eit.uni-kl.de// +---------------------------------------------------------------------------- 29412027Sjungma@eit.uni-kl.desc_event::sc_event() : 29512027Sjungma@eit.uni-kl.de m_name(), 29612027Sjungma@eit.uni-kl.de m_parent_p(NULL), 29712027Sjungma@eit.uni-kl.de m_simc( sc_get_curr_simcontext() ), 29812027Sjungma@eit.uni-kl.de m_notify_type( NONE ), 29912027Sjungma@eit.uni-kl.de m_delta_event_index( -1 ), 30012027Sjungma@eit.uni-kl.de m_timed( 0 ), 30112027Sjungma@eit.uni-kl.de m_methods_static(), 30212027Sjungma@eit.uni-kl.de m_methods_dynamic(), 30312027Sjungma@eit.uni-kl.de m_threads_static(), 30412027Sjungma@eit.uni-kl.de m_threads_dynamic() 30512027Sjungma@eit.uni-kl.de{ 30612027Sjungma@eit.uni-kl.de 30712027Sjungma@eit.uni-kl.de register_event( NULL ); 30812027Sjungma@eit.uni-kl.de} 30912027Sjungma@eit.uni-kl.de 31012027Sjungma@eit.uni-kl.de// +---------------------------------------------------------------------------- 31112027Sjungma@eit.uni-kl.de// |"sc_event::~sc_event" 31212027Sjungma@eit.uni-kl.de// | 31312027Sjungma@eit.uni-kl.de// | This is the object instance destructor for this class. It cancels any 31412027Sjungma@eit.uni-kl.de// | outstanding waits and removes the event from the object manager's 31512027Sjungma@eit.uni-kl.de// | instance table if it has a name. 31612027Sjungma@eit.uni-kl.de// +---------------------------------------------------------------------------- 31712027Sjungma@eit.uni-kl.desc_event::~sc_event() 31812027Sjungma@eit.uni-kl.de{ 31912027Sjungma@eit.uni-kl.de cancel(); 32012027Sjungma@eit.uni-kl.de if ( m_name.length() != 0 ) 32112027Sjungma@eit.uni-kl.de { 32212027Sjungma@eit.uni-kl.de sc_object_manager* object_manager_p = m_simc->get_object_manager(); 32312027Sjungma@eit.uni-kl.de object_manager_p->remove_event( m_name ); 32412027Sjungma@eit.uni-kl.de } 32512027Sjungma@eit.uni-kl.de} 32612027Sjungma@eit.uni-kl.de 32712027Sjungma@eit.uni-kl.de// +---------------------------------------------------------------------------- 32812027Sjungma@eit.uni-kl.de// |"sc_event::trigger" 32912027Sjungma@eit.uni-kl.de// | 33012027Sjungma@eit.uni-kl.de// | This method "triggers" this object instance. This consists of scheduling 33112027Sjungma@eit.uni-kl.de// | for execution all the processes that are schedulable and waiting on this 33212027Sjungma@eit.uni-kl.de// | event. 33312027Sjungma@eit.uni-kl.de// +---------------------------------------------------------------------------- 33412027Sjungma@eit.uni-kl.devoid 33512027Sjungma@eit.uni-kl.desc_event::trigger() 33612027Sjungma@eit.uni-kl.de{ 33712027Sjungma@eit.uni-kl.de int last_i; // index of last element in vector now accessing. 33812027Sjungma@eit.uni-kl.de int size; // size of vector now accessing. 33912027Sjungma@eit.uni-kl.de 34012027Sjungma@eit.uni-kl.de 34112027Sjungma@eit.uni-kl.de // trigger the static sensitive methods 34212027Sjungma@eit.uni-kl.de 34312027Sjungma@eit.uni-kl.de if( ( size = m_methods_static.size() ) != 0 ) 34412027Sjungma@eit.uni-kl.de { 34512027Sjungma@eit.uni-kl.de sc_method_handle* l_methods_static = &m_methods_static[0]; 34612027Sjungma@eit.uni-kl.de int i = size - 1; 34712027Sjungma@eit.uni-kl.de do { 34812027Sjungma@eit.uni-kl.de sc_method_handle method_h = l_methods_static[i]; 34912027Sjungma@eit.uni-kl.de method_h->trigger_static(); 35012027Sjungma@eit.uni-kl.de } while( -- i >= 0 ); 35112027Sjungma@eit.uni-kl.de } 35212027Sjungma@eit.uni-kl.de 35312027Sjungma@eit.uni-kl.de // trigger the dynamic sensitive methods 35412027Sjungma@eit.uni-kl.de 35512027Sjungma@eit.uni-kl.de 35612027Sjungma@eit.uni-kl.de if( ( size = m_methods_dynamic.size() ) != 0 ) 35712027Sjungma@eit.uni-kl.de { 35812027Sjungma@eit.uni-kl.de last_i = size - 1; 35912027Sjungma@eit.uni-kl.de sc_method_handle* l_methods_dynamic = &m_methods_dynamic[0]; 36012027Sjungma@eit.uni-kl.de for ( int i = 0; i <= last_i; i++ ) 36112027Sjungma@eit.uni-kl.de { 36212027Sjungma@eit.uni-kl.de sc_method_handle method_h = l_methods_dynamic[i]; 36312027Sjungma@eit.uni-kl.de if ( method_h->trigger_dynamic( this ) ) 36412027Sjungma@eit.uni-kl.de { 36512027Sjungma@eit.uni-kl.de l_methods_dynamic[i] = l_methods_dynamic[last_i]; 36612027Sjungma@eit.uni-kl.de last_i--; 36712027Sjungma@eit.uni-kl.de i--; 36812027Sjungma@eit.uni-kl.de } 36912027Sjungma@eit.uni-kl.de } 37012027Sjungma@eit.uni-kl.de m_methods_dynamic.resize(last_i+1); 37112027Sjungma@eit.uni-kl.de } 37212027Sjungma@eit.uni-kl.de 37312027Sjungma@eit.uni-kl.de 37412027Sjungma@eit.uni-kl.de // trigger the static sensitive threads 37512027Sjungma@eit.uni-kl.de 37612027Sjungma@eit.uni-kl.de if( ( size = m_threads_static.size() ) != 0 ) 37712027Sjungma@eit.uni-kl.de { 37812027Sjungma@eit.uni-kl.de sc_thread_handle* l_threads_static = &m_threads_static[0]; 37912027Sjungma@eit.uni-kl.de int i = size - 1; 38012027Sjungma@eit.uni-kl.de do { 38112027Sjungma@eit.uni-kl.de sc_thread_handle thread_h = l_threads_static[i]; 38212027Sjungma@eit.uni-kl.de thread_h->trigger_static(); 38312027Sjungma@eit.uni-kl.de } while( -- i >= 0 ); 38412027Sjungma@eit.uni-kl.de } 38512027Sjungma@eit.uni-kl.de 38612027Sjungma@eit.uni-kl.de // trigger the dynamic sensitive threads 38712027Sjungma@eit.uni-kl.de 38812027Sjungma@eit.uni-kl.de if( ( size = m_threads_dynamic.size() ) != 0 ) 38912027Sjungma@eit.uni-kl.de { 39012027Sjungma@eit.uni-kl.de last_i = size - 1; 39112027Sjungma@eit.uni-kl.de sc_thread_handle* l_threads_dynamic = &m_threads_dynamic[0]; 39212027Sjungma@eit.uni-kl.de for ( int i = 0; i <= last_i; i++ ) 39312027Sjungma@eit.uni-kl.de { 39412027Sjungma@eit.uni-kl.de sc_thread_handle thread_h = l_threads_dynamic[i]; 39512027Sjungma@eit.uni-kl.de if ( thread_h->trigger_dynamic( this ) ) 39612027Sjungma@eit.uni-kl.de { 39712027Sjungma@eit.uni-kl.de l_threads_dynamic[i] = l_threads_dynamic[last_i]; 39812027Sjungma@eit.uni-kl.de i--; 39912027Sjungma@eit.uni-kl.de last_i--; 40012027Sjungma@eit.uni-kl.de } 40112027Sjungma@eit.uni-kl.de } 40212027Sjungma@eit.uni-kl.de m_threads_dynamic.resize(last_i+1); 40312027Sjungma@eit.uni-kl.de } 40412027Sjungma@eit.uni-kl.de 40512027Sjungma@eit.uni-kl.de m_notify_type = NONE; 40612027Sjungma@eit.uni-kl.de m_delta_event_index = -1; 40712027Sjungma@eit.uni-kl.de m_timed = 0; 40812027Sjungma@eit.uni-kl.de} 40912027Sjungma@eit.uni-kl.de 41012027Sjungma@eit.uni-kl.de 41112027Sjungma@eit.uni-kl.debool 41212027Sjungma@eit.uni-kl.desc_event::remove_static( sc_method_handle method_h_ ) const 41312027Sjungma@eit.uni-kl.de{ 41412027Sjungma@eit.uni-kl.de int size; 41512027Sjungma@eit.uni-kl.de if ( ( size = m_methods_static.size() ) != 0 ) { 41612027Sjungma@eit.uni-kl.de sc_method_handle* l_methods_static = &m_methods_static[0]; 41712027Sjungma@eit.uni-kl.de for( int i = size - 1; i >= 0; -- i ) { 41812027Sjungma@eit.uni-kl.de if( l_methods_static[i] == method_h_ ) { 41912027Sjungma@eit.uni-kl.de l_methods_static[i] = l_methods_static[size - 1]; 42012027Sjungma@eit.uni-kl.de m_methods_static.resize(size-1); 42112027Sjungma@eit.uni-kl.de return true; 42212027Sjungma@eit.uni-kl.de } 42312027Sjungma@eit.uni-kl.de } 42412027Sjungma@eit.uni-kl.de } 42512027Sjungma@eit.uni-kl.de return false; 42612027Sjungma@eit.uni-kl.de} 42712027Sjungma@eit.uni-kl.de 42812027Sjungma@eit.uni-kl.debool 42912027Sjungma@eit.uni-kl.desc_event::remove_static( sc_thread_handle thread_h_ ) const 43012027Sjungma@eit.uni-kl.de{ 43112027Sjungma@eit.uni-kl.de int size; 43212027Sjungma@eit.uni-kl.de if ( ( size = m_threads_static.size() ) != 0 ) { 43312027Sjungma@eit.uni-kl.de sc_thread_handle* l_threads_static = &m_threads_static[0]; 43412027Sjungma@eit.uni-kl.de for( int i = size - 1; i >= 0; -- i ) { 43512027Sjungma@eit.uni-kl.de if( l_threads_static[i] == thread_h_ ) { 43612027Sjungma@eit.uni-kl.de l_threads_static[i] = l_threads_static[size - 1]; 43712027Sjungma@eit.uni-kl.de m_threads_static.resize(size-1); 43812027Sjungma@eit.uni-kl.de return true; 43912027Sjungma@eit.uni-kl.de } 44012027Sjungma@eit.uni-kl.de } 44112027Sjungma@eit.uni-kl.de } 44212027Sjungma@eit.uni-kl.de return false; 44312027Sjungma@eit.uni-kl.de} 44412027Sjungma@eit.uni-kl.de 44512027Sjungma@eit.uni-kl.debool 44612027Sjungma@eit.uni-kl.desc_event::remove_dynamic( sc_method_handle method_h_ ) const 44712027Sjungma@eit.uni-kl.de{ 44812027Sjungma@eit.uni-kl.de int size; 44912027Sjungma@eit.uni-kl.de if ( ( size = m_methods_dynamic.size() ) != 0 ) { 45012027Sjungma@eit.uni-kl.de sc_method_handle* l_methods_dynamic = &m_methods_dynamic[0]; 45112027Sjungma@eit.uni-kl.de for( int i = size - 1; i >= 0; -- i ) { 45212027Sjungma@eit.uni-kl.de if( l_methods_dynamic[i] == method_h_ ) { 45312027Sjungma@eit.uni-kl.de l_methods_dynamic[i] = l_methods_dynamic[size - 1]; 45412027Sjungma@eit.uni-kl.de m_methods_dynamic.resize(size-1); 45512027Sjungma@eit.uni-kl.de return true; 45612027Sjungma@eit.uni-kl.de } 45712027Sjungma@eit.uni-kl.de } 45812027Sjungma@eit.uni-kl.de } 45912027Sjungma@eit.uni-kl.de return false; 46012027Sjungma@eit.uni-kl.de} 46112027Sjungma@eit.uni-kl.de 46212027Sjungma@eit.uni-kl.debool 46312027Sjungma@eit.uni-kl.desc_event::remove_dynamic( sc_thread_handle thread_h_ ) const 46412027Sjungma@eit.uni-kl.de{ 46512027Sjungma@eit.uni-kl.de int size; 46612027Sjungma@eit.uni-kl.de if ( ( size= m_threads_dynamic.size() ) != 0 ) { 46712027Sjungma@eit.uni-kl.de sc_thread_handle* l_threads_dynamic = &m_threads_dynamic[0]; 46812027Sjungma@eit.uni-kl.de for( int i = size - 1; i >= 0; -- i ) { 46912027Sjungma@eit.uni-kl.de if( l_threads_dynamic[i] == thread_h_ ) { 47012027Sjungma@eit.uni-kl.de l_threads_dynamic[i] = l_threads_dynamic[size - 1]; 47112027Sjungma@eit.uni-kl.de m_threads_dynamic.resize(size-1); 47212027Sjungma@eit.uni-kl.de return true; 47312027Sjungma@eit.uni-kl.de } 47412027Sjungma@eit.uni-kl.de } 47512027Sjungma@eit.uni-kl.de } 47612027Sjungma@eit.uni-kl.de return false; 47712027Sjungma@eit.uni-kl.de} 47812027Sjungma@eit.uni-kl.de 47912027Sjungma@eit.uni-kl.de 48012027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 48112027Sjungma@eit.uni-kl.de// CLASS : sc_event_timed 48212027Sjungma@eit.uni-kl.de// 48312027Sjungma@eit.uni-kl.de// Class for storing the time to notify a timed event. 48412027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 48512027Sjungma@eit.uni-kl.de 48612027Sjungma@eit.uni-kl.de// dedicated memory management; not MT-Safe 48712027Sjungma@eit.uni-kl.de 48812027Sjungma@eit.uni-kl.deunion sc_event_timed_u 48912027Sjungma@eit.uni-kl.de{ 49012027Sjungma@eit.uni-kl.de sc_event_timed_u* next; 49112027Sjungma@eit.uni-kl.de char dummy[sizeof( sc_event_timed )]; 49212027Sjungma@eit.uni-kl.de}; 49312027Sjungma@eit.uni-kl.de 49412027Sjungma@eit.uni-kl.destatic 49512027Sjungma@eit.uni-kl.desc_event_timed_u* free_list = 0; 49612027Sjungma@eit.uni-kl.de 49712027Sjungma@eit.uni-kl.devoid* 49812027Sjungma@eit.uni-kl.desc_event_timed::allocate() 49912027Sjungma@eit.uni-kl.de{ 50012027Sjungma@eit.uni-kl.de const int ALLOC_SIZE = 64; 50112027Sjungma@eit.uni-kl.de 50212027Sjungma@eit.uni-kl.de if( free_list == 0 ) { 50312027Sjungma@eit.uni-kl.de free_list = (sc_event_timed_u*) malloc( ALLOC_SIZE * 50412027Sjungma@eit.uni-kl.de sizeof( sc_event_timed ) ); 50512027Sjungma@eit.uni-kl.de int i = 0; 50612027Sjungma@eit.uni-kl.de for( ; i < ALLOC_SIZE - 1; ++ i ) { 50712027Sjungma@eit.uni-kl.de free_list[i].next = &free_list[i + 1]; 50812027Sjungma@eit.uni-kl.de } 50912027Sjungma@eit.uni-kl.de free_list[i].next = 0; 51012027Sjungma@eit.uni-kl.de } 51112027Sjungma@eit.uni-kl.de 51212027Sjungma@eit.uni-kl.de sc_event_timed_u* q = free_list; 51312027Sjungma@eit.uni-kl.de free_list = free_list->next; 51412027Sjungma@eit.uni-kl.de return q; 51512027Sjungma@eit.uni-kl.de} 51612027Sjungma@eit.uni-kl.de 51712027Sjungma@eit.uni-kl.devoid 51812027Sjungma@eit.uni-kl.desc_event_timed::deallocate( void* p ) 51912027Sjungma@eit.uni-kl.de{ 52012027Sjungma@eit.uni-kl.de if( p != 0 ) { 52112027Sjungma@eit.uni-kl.de sc_event_timed_u* q = RCAST<sc_event_timed_u*>( p ); 52212027Sjungma@eit.uni-kl.de q->next = free_list; 52312027Sjungma@eit.uni-kl.de free_list = q; 52412027Sjungma@eit.uni-kl.de } 52512027Sjungma@eit.uni-kl.de} 52612027Sjungma@eit.uni-kl.de 52712027Sjungma@eit.uni-kl.de 52812027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 52912027Sjungma@eit.uni-kl.de// CLASS : sc_event_list 53012027Sjungma@eit.uni-kl.de// 53112027Sjungma@eit.uni-kl.de// Base class for lists of events. 53212027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 53312027Sjungma@eit.uni-kl.de 53412027Sjungma@eit.uni-kl.devoid 53512027Sjungma@eit.uni-kl.desc_event_list::push_back( const sc_event& e ) 53612027Sjungma@eit.uni-kl.de{ 53712027Sjungma@eit.uni-kl.de // make sure e is not already in the list 53812027Sjungma@eit.uni-kl.de if ( m_events.size() != 0 ) { 53912027Sjungma@eit.uni-kl.de const sc_event** l_events = &m_events[0]; 54012027Sjungma@eit.uni-kl.de for( int i = m_events.size() - 1; i >= 0; -- i ) { 54112027Sjungma@eit.uni-kl.de if( &e == l_events[i] ) { 54212027Sjungma@eit.uni-kl.de // event already in the list; ignore 54312027Sjungma@eit.uni-kl.de return; 54412027Sjungma@eit.uni-kl.de } 54512027Sjungma@eit.uni-kl.de } 54612027Sjungma@eit.uni-kl.de } 54712027Sjungma@eit.uni-kl.de m_events.push_back( &e ); 54812027Sjungma@eit.uni-kl.de} 54912027Sjungma@eit.uni-kl.de 55012027Sjungma@eit.uni-kl.devoid 55112027Sjungma@eit.uni-kl.desc_event_list::push_back( const sc_event_list& el ) 55212027Sjungma@eit.uni-kl.de{ 55312027Sjungma@eit.uni-kl.de m_events.reserve( size() + el.size() ); 55412027Sjungma@eit.uni-kl.de for ( int i = el.m_events.size() - 1; i >= 0; --i ) 55512027Sjungma@eit.uni-kl.de { 55612027Sjungma@eit.uni-kl.de push_back( *el.m_events[i] ); 55712027Sjungma@eit.uni-kl.de } 55812027Sjungma@eit.uni-kl.de el.auto_delete(); 55912027Sjungma@eit.uni-kl.de} 56012027Sjungma@eit.uni-kl.de 56112027Sjungma@eit.uni-kl.devoid 56212027Sjungma@eit.uni-kl.desc_event_list::add_dynamic( sc_method_handle method_h ) const 56312027Sjungma@eit.uni-kl.de{ 56412027Sjungma@eit.uni-kl.de m_busy++; 56512027Sjungma@eit.uni-kl.de if ( m_events.size() != 0 ) { 56612027Sjungma@eit.uni-kl.de const sc_event* const * l_events = &m_events[0]; 56712027Sjungma@eit.uni-kl.de for( int i = m_events.size() - 1; i >= 0; -- i ) { 56812027Sjungma@eit.uni-kl.de l_events[i]->add_dynamic( method_h ); 56912027Sjungma@eit.uni-kl.de } 57012027Sjungma@eit.uni-kl.de } 57112027Sjungma@eit.uni-kl.de} 57212027Sjungma@eit.uni-kl.de 57312027Sjungma@eit.uni-kl.devoid 57412027Sjungma@eit.uni-kl.desc_event_list::add_dynamic( sc_thread_handle thread_h ) const 57512027Sjungma@eit.uni-kl.de{ 57612027Sjungma@eit.uni-kl.de m_busy++; 57712027Sjungma@eit.uni-kl.de if ( m_events.size() != 0 ) { 57812027Sjungma@eit.uni-kl.de const sc_event* const* l_events = &m_events[0]; 57912027Sjungma@eit.uni-kl.de for( int i = m_events.size() - 1; i >= 0; -- i ) { 58012027Sjungma@eit.uni-kl.de l_events[i]->add_dynamic( thread_h ); 58112027Sjungma@eit.uni-kl.de } 58212027Sjungma@eit.uni-kl.de } 58312027Sjungma@eit.uni-kl.de} 58412027Sjungma@eit.uni-kl.de 58512027Sjungma@eit.uni-kl.devoid 58612027Sjungma@eit.uni-kl.desc_event_list::remove_dynamic( sc_method_handle method_h, 58712027Sjungma@eit.uni-kl.de const sc_event* e_not ) const 58812027Sjungma@eit.uni-kl.de{ 58912027Sjungma@eit.uni-kl.de if ( m_events.size() != 0 ) { 59012027Sjungma@eit.uni-kl.de const sc_event* const* l_events = &m_events[0]; 59112027Sjungma@eit.uni-kl.de for( int i = m_events.size() - 1; i >= 0; -- i ) { 59212027Sjungma@eit.uni-kl.de const sc_event* e = l_events[i]; 59312027Sjungma@eit.uni-kl.de if( e != e_not ) { 59412027Sjungma@eit.uni-kl.de e->remove_dynamic( method_h ); 59512027Sjungma@eit.uni-kl.de } 59612027Sjungma@eit.uni-kl.de } 59712027Sjungma@eit.uni-kl.de } 59812027Sjungma@eit.uni-kl.de} 59912027Sjungma@eit.uni-kl.de 60012027Sjungma@eit.uni-kl.devoid 60112027Sjungma@eit.uni-kl.desc_event_list::remove_dynamic( sc_thread_handle thread_h, 60212027Sjungma@eit.uni-kl.de const sc_event* e_not ) const 60312027Sjungma@eit.uni-kl.de{ 60412027Sjungma@eit.uni-kl.de if ( m_events.size() != 0 ) { 60512027Sjungma@eit.uni-kl.de const sc_event* const* l_events = &m_events[0]; 60612027Sjungma@eit.uni-kl.de for( int i = m_events.size() - 1; i >= 0; -- i ) { 60712027Sjungma@eit.uni-kl.de const sc_event* e = l_events[i]; 60812027Sjungma@eit.uni-kl.de if( e != e_not ) { 60912027Sjungma@eit.uni-kl.de e->remove_dynamic( thread_h ); 61012027Sjungma@eit.uni-kl.de } 61112027Sjungma@eit.uni-kl.de } 61212027Sjungma@eit.uni-kl.de } 61312027Sjungma@eit.uni-kl.de} 61412027Sjungma@eit.uni-kl.de 61512027Sjungma@eit.uni-kl.devoid 61612027Sjungma@eit.uni-kl.desc_event_list::report_premature_destruction() const 61712027Sjungma@eit.uni-kl.de{ 61812027Sjungma@eit.uni-kl.de // TDB: reliably detect premature destruction 61912027Sjungma@eit.uni-kl.de // 62012027Sjungma@eit.uni-kl.de // If an event list is used as a member of a module, 62112027Sjungma@eit.uni-kl.de // its lifetime may (correctly) end, although there 62212027Sjungma@eit.uni-kl.de // are processes currently waiting for it. 62312027Sjungma@eit.uni-kl.de // 62412027Sjungma@eit.uni-kl.de // Detecting (and ignoring) this corner-case is quite 62512027Sjungma@eit.uni-kl.de // difficult for similar reasons to the sc_is_running() 62612027Sjungma@eit.uni-kl.de // return value during the destruction of the module 62712027Sjungma@eit.uni-kl.de // hierarchy. 62812027Sjungma@eit.uni-kl.de // 62912027Sjungma@eit.uni-kl.de // Ignoring the lifetime checks for now, if no process 63012027Sjungma@eit.uni-kl.de // is currently running (which is only part of the story): 63112027Sjungma@eit.uni-kl.de 63212027Sjungma@eit.uni-kl.de if( sc_get_current_process_handle().valid() ) { 63312027Sjungma@eit.uni-kl.de // FIXME: improve error-handling 63412027Sjungma@eit.uni-kl.de sc_assert( false && "sc_event_list prematurely destroyed" ); 63512027Sjungma@eit.uni-kl.de } 63612027Sjungma@eit.uni-kl.de 63712027Sjungma@eit.uni-kl.de} 63812027Sjungma@eit.uni-kl.de 63912027Sjungma@eit.uni-kl.devoid 64012027Sjungma@eit.uni-kl.desc_event_list::report_invalid_modification() const 64112027Sjungma@eit.uni-kl.de{ 64212027Sjungma@eit.uni-kl.de // FIXME: improve error-handling 64312027Sjungma@eit.uni-kl.de sc_assert( false && "sc_event_list modfied while being waited on" ); 64412027Sjungma@eit.uni-kl.de} 64512027Sjungma@eit.uni-kl.de 64612027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 64712027Sjungma@eit.uni-kl.de// Deprecated functional notation for notifying events. 64812027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 64912027Sjungma@eit.uni-kl.de 65012027Sjungma@eit.uni-kl.destatic void sc_warn_notify() 65112027Sjungma@eit.uni-kl.de{ 65212027Sjungma@eit.uni-kl.de static bool warn_notify=true; 65312027Sjungma@eit.uni-kl.de if ( warn_notify ) 65412027Sjungma@eit.uni-kl.de { 65512027Sjungma@eit.uni-kl.de SC_REPORT_INFO(SC_ID_IEEE_1666_DEPRECATION_, 65612027Sjungma@eit.uni-kl.de "the notify() function is deprecated use sc_event::notify()" ); 65712027Sjungma@eit.uni-kl.de warn_notify = false; 65812027Sjungma@eit.uni-kl.de } 65912027Sjungma@eit.uni-kl.de} 66012027Sjungma@eit.uni-kl.de 66112027Sjungma@eit.uni-kl.devoid 66212027Sjungma@eit.uni-kl.denotify( sc_event& e ) 66312027Sjungma@eit.uni-kl.de{ 66412027Sjungma@eit.uni-kl.de sc_warn_notify(); 66512027Sjungma@eit.uni-kl.de e.notify(); 66612027Sjungma@eit.uni-kl.de} 66712027Sjungma@eit.uni-kl.de 66812027Sjungma@eit.uni-kl.devoid 66912027Sjungma@eit.uni-kl.denotify( const sc_time& t, sc_event& e ) 67012027Sjungma@eit.uni-kl.de{ 67112027Sjungma@eit.uni-kl.de sc_warn_notify(); 67212027Sjungma@eit.uni-kl.de e.notify( t ); 67312027Sjungma@eit.uni-kl.de} 67412027Sjungma@eit.uni-kl.de 67512027Sjungma@eit.uni-kl.devoid 67612027Sjungma@eit.uni-kl.denotify( double v, sc_time_unit tu, sc_event& e ) 67712027Sjungma@eit.uni-kl.de{ 67812027Sjungma@eit.uni-kl.de sc_warn_notify(); 67912027Sjungma@eit.uni-kl.de e.notify( v, tu ); 68012027Sjungma@eit.uni-kl.de} 68112027Sjungma@eit.uni-kl.de 68212027Sjungma@eit.uni-kl.de} // namespace sc_core 68312027Sjungma@eit.uni-kl.de 68412027Sjungma@eit.uni-kl.de// $Log: sc_event.cpp,v $ 68512027Sjungma@eit.uni-kl.de// Revision 1.17 2011/08/26 20:46:09 acg 68612027Sjungma@eit.uni-kl.de// Andy Goodrich: moved the modification log to the end of the file to 68712027Sjungma@eit.uni-kl.de// eliminate source line number skew when check-ins are done. 68812027Sjungma@eit.uni-kl.de// 68912027Sjungma@eit.uni-kl.de// Revision 1.16 2011/08/24 22:05:50 acg 69012027Sjungma@eit.uni-kl.de// Torsten Maehne: initialization changes to remove warnings. 69112027Sjungma@eit.uni-kl.de// 69212027Sjungma@eit.uni-kl.de// Revision 1.15 2011/03/12 21:07:51 acg 69312027Sjungma@eit.uni-kl.de// Andy Goodrich: changes to kernel generated event support. 69412027Sjungma@eit.uni-kl.de// 69512027Sjungma@eit.uni-kl.de// Revision 1.14 2011/03/06 15:55:52 acg 69612027Sjungma@eit.uni-kl.de// Andy Goodrich: changes for named events. 69712027Sjungma@eit.uni-kl.de// 69812027Sjungma@eit.uni-kl.de// Revision 1.13 2011/03/05 01:39:21 acg 69912027Sjungma@eit.uni-kl.de// Andy Goodrich: changes for named events. 70012027Sjungma@eit.uni-kl.de// 70112027Sjungma@eit.uni-kl.de// Revision 1.12 2011/02/19 08:33:25 acg 70212027Sjungma@eit.uni-kl.de// Andy Goodrich: remove }'s that should have been removed before. 70312027Sjungma@eit.uni-kl.de// 70412027Sjungma@eit.uni-kl.de// Revision 1.11 2011/02/19 08:30:53 acg 70512027Sjungma@eit.uni-kl.de// Andy Goodrich: Moved process queueing into trigger_static from 70612027Sjungma@eit.uni-kl.de// sc_event::notify. 70712027Sjungma@eit.uni-kl.de// 70812027Sjungma@eit.uni-kl.de// Revision 1.10 2011/02/18 20:27:14 acg 70912027Sjungma@eit.uni-kl.de// Andy Goodrich: Updated Copyrights. 71012027Sjungma@eit.uni-kl.de// 71112027Sjungma@eit.uni-kl.de// Revision 1.9 2011/02/17 19:49:51 acg 71212027Sjungma@eit.uni-kl.de// Andy Goodrich: 71312027Sjungma@eit.uni-kl.de// (1) Changed signature of trigger_dynamic() to return a bool again. 71412027Sjungma@eit.uni-kl.de// (2) Moved process run queue processing into trigger_dynamic(). 71512027Sjungma@eit.uni-kl.de// 71612027Sjungma@eit.uni-kl.de// Revision 1.8 2011/02/16 22:37:30 acg 71712027Sjungma@eit.uni-kl.de// Andy Goodrich: clean up to remove need for ps_disable_pending. 71812027Sjungma@eit.uni-kl.de// 71912027Sjungma@eit.uni-kl.de// Revision 1.7 2011/02/13 21:47:37 acg 72012027Sjungma@eit.uni-kl.de// Andy Goodrich: update copyright notice. 72112027Sjungma@eit.uni-kl.de// 72212027Sjungma@eit.uni-kl.de// Revision 1.6 2011/02/01 21:02:28 acg 72312027Sjungma@eit.uni-kl.de// Andy Goodrich: new return code for trigger_dynamic() calls. 72412027Sjungma@eit.uni-kl.de// 72512027Sjungma@eit.uni-kl.de// Revision 1.5 2011/01/18 20:10:44 acg 72612027Sjungma@eit.uni-kl.de// Andy Goodrich: changes for IEEE1666_2011 semantics. 72712027Sjungma@eit.uni-kl.de// 72812027Sjungma@eit.uni-kl.de// Revision 1.4 2011/01/06 18:04:05 acg 72912027Sjungma@eit.uni-kl.de// Andy Goodrich: added code to leave disabled processes on the dynamic 73012027Sjungma@eit.uni-kl.de// method and thread queues. 73112027Sjungma@eit.uni-kl.de// 73212027Sjungma@eit.uni-kl.de// Revision 1.3 2008/05/22 17:06:25 acg 73312027Sjungma@eit.uni-kl.de// Andy Goodrich: updated copyright notice to include 2008. 73412027Sjungma@eit.uni-kl.de// 73512027Sjungma@eit.uni-kl.de// Revision 1.2 2007/01/17 22:44:30 acg 73612027Sjungma@eit.uni-kl.de// Andy Goodrich: fix for Microsoft compiler. 73712027Sjungma@eit.uni-kl.de// 73812027Sjungma@eit.uni-kl.de// Revision 1.7 2006/04/11 23:13:20 acg 73912027Sjungma@eit.uni-kl.de// Andy Goodrich: Changes for reduced reset support that only includes 74012027Sjungma@eit.uni-kl.de// sc_cthread, but has preliminary hooks for expanding to method and thread 74112027Sjungma@eit.uni-kl.de// processes also. 74212027Sjungma@eit.uni-kl.de// 74312027Sjungma@eit.uni-kl.de// Revision 1.6 2006/01/25 00:31:19 acg 74412027Sjungma@eit.uni-kl.de// Andy Goodrich: Changed over to use a standard message id of 74512027Sjungma@eit.uni-kl.de// SC_ID_IEEE_1666_DEPRECATION for all deprecation messages. 74612027Sjungma@eit.uni-kl.de// 74712027Sjungma@eit.uni-kl.de// Revision 1.5 2006/01/24 20:59:11 acg 74812027Sjungma@eit.uni-kl.de// Andy Goodrich: fix up of CVS comments, new version roll. 74912027Sjungma@eit.uni-kl.de// 75012027Sjungma@eit.uni-kl.de// Revision 1.4 2006/01/24 20:48:14 acg 75112027Sjungma@eit.uni-kl.de// Andy Goodrich: added deprecation warnings for notify_delayed(). Added two 75212027Sjungma@eit.uni-kl.de// new implementation-dependent methods, notify_next_delta() & notify_internal() 75312027Sjungma@eit.uni-kl.de// to replace calls to notify_delayed() from within the simulator. These two 75412027Sjungma@eit.uni-kl.de// new methods are simpler than notify_delayed() and should speed up simulations 75512027Sjungma@eit.uni-kl.de// 75612027Sjungma@eit.uni-kl.de// Revision 1.3 2006/01/13 18:44:29 acg 75712027Sjungma@eit.uni-kl.de// Added $Log to record CVS changes into the source. 75812027Sjungma@eit.uni-kl.de 75912027Sjungma@eit.uni-kl.de// Taf! 760