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