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_simcontext_int.h -- For inline definitions of some utility functions.
2312027Sjungma@eit.uni-kl.de                         DO NOT EXPORT THIS INCLUDE FILE. Include this file
2412027Sjungma@eit.uni-kl.de                         after "sc_process_int.h" so that we can get the base
2512027Sjungma@eit.uni-kl.de                         class right.
2612027Sjungma@eit.uni-kl.de
2712027Sjungma@eit.uni-kl.de  Original Author: Stan Y. Liao, Synopsys, Inc.
2812027Sjungma@eit.uni-kl.de
2912027Sjungma@eit.uni-kl.de  CHANGE LOG AT THE END OF THE FILE
3012027Sjungma@eit.uni-kl.de *****************************************************************************/
3112027Sjungma@eit.uni-kl.de
3212027Sjungma@eit.uni-kl.de#ifndef SC_SIMCONTEXT_INT_H
3312027Sjungma@eit.uni-kl.de#define SC_SIMCONTEXT_INT_H
3412027Sjungma@eit.uni-kl.de
3512027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_simcontext.h"
3612027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_runnable.h"
3712027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_runnable_int.h"
3812027Sjungma@eit.uni-kl.de
3912027Sjungma@eit.uni-kl.de// DEBUGGING MACROS:
4012027Sjungma@eit.uni-kl.de//
4112027Sjungma@eit.uni-kl.de// DEBUG_MSG(NAME,P,MSG)
4212027Sjungma@eit.uni-kl.de//     MSG  = message to print
4312027Sjungma@eit.uni-kl.de//     NAME = name that must match the process for the message to print, or
4412027Sjungma@eit.uni-kl.de//            null if the message should be printed unconditionally.
4512027Sjungma@eit.uni-kl.de//     P    = pointer to process message is for, or NULL in which case the
4612027Sjungma@eit.uni-kl.de//            message will not print.
4712027Sjungma@eit.uni-kl.de#if 0
4812027Sjungma@eit.uni-kl.de#   define DEBUG_NAME ""
4912027Sjungma@eit.uni-kl.de#   define DEBUG_MSG(NAME,P,MSG) \
5012027Sjungma@eit.uni-kl.de    { \
5112027Sjungma@eit.uni-kl.de        if ( P && ( (strlen(NAME)==0) || !strcmp(NAME,P->name())) ) \
5212027Sjungma@eit.uni-kl.de          std::cout << "**** " << sc_time_stamp() << " ("  \
5312027Sjungma@eit.uni-kl.de	            << sc_get_current_process_name() << "): " << MSG \
5412027Sjungma@eit.uni-kl.de		    << " - " << P->name() << std::endl; \
5512027Sjungma@eit.uni-kl.de    }
5612027Sjungma@eit.uni-kl.de#else
5712027Sjungma@eit.uni-kl.de#   define DEBUG_MSG(NAME,P,MSG)
5812027Sjungma@eit.uni-kl.de#endif
5912027Sjungma@eit.uni-kl.de
6012027Sjungma@eit.uni-kl.de
6112027Sjungma@eit.uni-kl.denamespace sc_core {
6212027Sjungma@eit.uni-kl.de
6312027Sjungma@eit.uni-kl.deinline
6412027Sjungma@eit.uni-kl.deconst char*
6512027Sjungma@eit.uni-kl.desc_get_current_process_name()
6612027Sjungma@eit.uni-kl.de{
6712027Sjungma@eit.uni-kl.de    sc_process_b* active_p; // active process to get name of.
6812027Sjungma@eit.uni-kl.de    const char*   result;   // name of active process.
6912027Sjungma@eit.uni-kl.de
7012027Sjungma@eit.uni-kl.de    active_p = sc_get_curr_simcontext()->get_curr_proc_info()->process_handle;
7112027Sjungma@eit.uni-kl.de    if ( active_p )
7212027Sjungma@eit.uni-kl.de        result = active_p->name();
7312027Sjungma@eit.uni-kl.de    else
7412027Sjungma@eit.uni-kl.de        result = "** NONE **";
7512027Sjungma@eit.uni-kl.de    return result;
7612027Sjungma@eit.uni-kl.de}
7712027Sjungma@eit.uni-kl.de
7812027Sjungma@eit.uni-kl.de// We use m_current_writer rather than m_curr_proc_info.process_handle to
7912027Sjungma@eit.uni-kl.de// return the active process for sc_signal<T>::check_write since that lets
8012027Sjungma@eit.uni-kl.de// us turn it off a library compile time, and only incur the overhead at
8112027Sjungma@eit.uni-kl.de// the time of process switches rather than having to interrogate an
8212027Sjungma@eit.uni-kl.de// additional switch every time a signal is written.
8312027Sjungma@eit.uni-kl.de
8412027Sjungma@eit.uni-kl.deinline
8512027Sjungma@eit.uni-kl.devoid
8612027Sjungma@eit.uni-kl.desc_simcontext::set_curr_proc( sc_process_b* process_h )
8712027Sjungma@eit.uni-kl.de{
8812027Sjungma@eit.uni-kl.de    m_curr_proc_info.process_handle = process_h;
8912027Sjungma@eit.uni-kl.de    m_curr_proc_info.kind           = process_h->proc_kind();
9012027Sjungma@eit.uni-kl.de    m_current_writer = m_write_check ? process_h : (sc_object*)0;
9112027Sjungma@eit.uni-kl.de}
9212027Sjungma@eit.uni-kl.de
9312027Sjungma@eit.uni-kl.deinline
9412027Sjungma@eit.uni-kl.devoid
9512027Sjungma@eit.uni-kl.desc_simcontext::reset_curr_proc()
9612027Sjungma@eit.uni-kl.de{
9712027Sjungma@eit.uni-kl.de    m_curr_proc_info.process_handle = 0;
9812027Sjungma@eit.uni-kl.de    m_curr_proc_info.kind           = SC_NO_PROC_;
9912027Sjungma@eit.uni-kl.de    m_current_writer                = 0;
10012027Sjungma@eit.uni-kl.de    sc_process_b::m_last_created_process_p = 0;
10112027Sjungma@eit.uni-kl.de}
10212027Sjungma@eit.uni-kl.de
10312027Sjungma@eit.uni-kl.deinline
10412027Sjungma@eit.uni-kl.devoid
10512027Sjungma@eit.uni-kl.desc_simcontext::execute_method_next( sc_method_handle method_h )
10612027Sjungma@eit.uni-kl.de{
10712027Sjungma@eit.uni-kl.de    m_runnable->execute_method_next( method_h );
10812027Sjungma@eit.uni-kl.de}
10912027Sjungma@eit.uni-kl.de
11012027Sjungma@eit.uni-kl.deinline
11112027Sjungma@eit.uni-kl.devoid
11212027Sjungma@eit.uni-kl.desc_simcontext::execute_thread_next( sc_thread_handle thread_h )
11312027Sjungma@eit.uni-kl.de{
11412027Sjungma@eit.uni-kl.de    m_runnable->execute_thread_next( thread_h );
11512027Sjungma@eit.uni-kl.de}
11612027Sjungma@eit.uni-kl.de
11712027Sjungma@eit.uni-kl.de// +----------------------------------------------------------------------------
11812027Sjungma@eit.uni-kl.de// |"sc_simcontext::preempt_with"
11912027Sjungma@eit.uni-kl.de// |
12012027Sjungma@eit.uni-kl.de// | This method executes the supplied thread immediately, suspending the
12112027Sjungma@eit.uni-kl.de// | caller. After executing the supplied thread the caller's execution will
12212027Sjungma@eit.uni-kl.de// | be restored. It is used to allow a thread to immediately throw an
12312027Sjungma@eit.uni-kl.de// | exception, e.g., when the thread's kill_process() method was called.
12412027Sjungma@eit.uni-kl.de// | There are three cases to consider:
12512027Sjungma@eit.uni-kl.de// |   (1) The caller is a method, e.g., murder by method.
12612027Sjungma@eit.uni-kl.de// |   (2) The caller is another thread instance, e.g., murder by thread.
12712027Sjungma@eit.uni-kl.de// |   (3) The caller is this thread instance, e.g., suicide.
12812027Sjungma@eit.uni-kl.de// |
12912027Sjungma@eit.uni-kl.de// | Arguments:
13012027Sjungma@eit.uni-kl.de// |     thread_h -> thread to be executed.
13112027Sjungma@eit.uni-kl.de// +----------------------------------------------------------------------------
13212027Sjungma@eit.uni-kl.deinline
13312027Sjungma@eit.uni-kl.devoid
13412027Sjungma@eit.uni-kl.desc_simcontext::preempt_with( sc_thread_handle thread_h )
13512027Sjungma@eit.uni-kl.de{
13612027Sjungma@eit.uni-kl.de    sc_thread_handle  active_p;    // active thread or null.
13712027Sjungma@eit.uni-kl.de    sc_curr_proc_info caller_info; // process info for caller.
13812027Sjungma@eit.uni-kl.de
13912027Sjungma@eit.uni-kl.de    // Determine the active process and take the thread to be run off the
14012027Sjungma@eit.uni-kl.de    // run queue, if its there, since we will be explicitly causing its
14112027Sjungma@eit.uni-kl.de    // execution.
14212027Sjungma@eit.uni-kl.de
14312027Sjungma@eit.uni-kl.de    active_p = DCAST<sc_thread_handle>(sc_get_current_process_b());
14412027Sjungma@eit.uni-kl.de    if ( thread_h->next_runnable() != NULL )
14512027Sjungma@eit.uni-kl.de	remove_runnable_thread( thread_h );
14612027Sjungma@eit.uni-kl.de
14712027Sjungma@eit.uni-kl.de    // THE CALLER IS A METHOD:
14812027Sjungma@eit.uni-kl.de    //
14912027Sjungma@eit.uni-kl.de    //   (a) Set the current process information to our thread.
15012027Sjungma@eit.uni-kl.de    //   (b) If the method was called by an invoker thread push that thread
15112027Sjungma@eit.uni-kl.de    //       onto the front of the run queue, this will cause the method
15212027Sjungma@eit.uni-kl.de    //       to be resumed after this thread waits.
15312027Sjungma@eit.uni-kl.de    //   (c) Invoke our thread directly by-passing the run queue.
15412027Sjungma@eit.uni-kl.de    //   (d) Restore the process info to the caller.
15512027Sjungma@eit.uni-kl.de    //   (e) Check to see if the calling method should throw an exception
15612027Sjungma@eit.uni-kl.de    //       because of activity that occurred during the preemption.
15712027Sjungma@eit.uni-kl.de
15812027Sjungma@eit.uni-kl.de    if ( active_p == NULL )
15912027Sjungma@eit.uni-kl.de    {
16012027Sjungma@eit.uni-kl.de	std::vector<sc_thread_handle>* invokers_p;  // active invokers stack.
16112027Sjungma@eit.uni-kl.de	sc_thread_handle           invoke_thread_p; // latest invocation thread.
16212027Sjungma@eit.uni-kl.de        sc_method_handle           method_p;        // active method.
16312027Sjungma@eit.uni-kl.de
16412027Sjungma@eit.uni-kl.de	method_p = DCAST<sc_method_handle>(sc_get_current_process_b());
16512027Sjungma@eit.uni-kl.de	invokers_p = &get_active_invokers();
16612027Sjungma@eit.uni-kl.de	caller_info = m_curr_proc_info;
16712027Sjungma@eit.uni-kl.de	if ( invokers_p->size() != 0 )
16812027Sjungma@eit.uni-kl.de	{
16912027Sjungma@eit.uni-kl.de	    invoke_thread_p = invokers_p->back();
17012027Sjungma@eit.uni-kl.de	    DEBUG_MSG( DEBUG_NAME, invoke_thread_p,
17112027Sjungma@eit.uni-kl.de	        "queueing invocation thread to execute next" );
17212027Sjungma@eit.uni-kl.de	    execute_thread_next(invoke_thread_p);
17312027Sjungma@eit.uni-kl.de	}
17412027Sjungma@eit.uni-kl.de        DEBUG_MSG( DEBUG_NAME, thread_h, "preempting method with thread" );
17512027Sjungma@eit.uni-kl.de	set_curr_proc( (sc_process_b*)thread_h );
17612027Sjungma@eit.uni-kl.de	m_cor_pkg->yield( thread_h->m_cor_p );
17712027Sjungma@eit.uni-kl.de	m_curr_proc_info = caller_info;
17812027Sjungma@eit.uni-kl.de        DEBUG_MSG(DEBUG_NAME, thread_h, "back from preempting method w/thread");
17912027Sjungma@eit.uni-kl.de	method_p->check_for_throws();
18012027Sjungma@eit.uni-kl.de    }
18112027Sjungma@eit.uni-kl.de
18212027Sjungma@eit.uni-kl.de    // CALLER IS A THREAD, BUT NOT THE THREAD TO BE RUN:
18312027Sjungma@eit.uni-kl.de    //
18412027Sjungma@eit.uni-kl.de    //   (a) Push the calling thread onto the front of the runnable queue
18512027Sjungma@eit.uni-kl.de    //       so it be the first thread to be run after this thread.
18612027Sjungma@eit.uni-kl.de    //   (b) Push the thread to be run onto the front of the runnable queue so
18712027Sjungma@eit.uni-kl.de    //       it will execute when we suspend the calling thread.
18812027Sjungma@eit.uni-kl.de    //   (c) Suspend the active thread.
18912027Sjungma@eit.uni-kl.de
19012027Sjungma@eit.uni-kl.de    else if ( active_p != thread_h )
19112027Sjungma@eit.uni-kl.de    {
19212027Sjungma@eit.uni-kl.de        DEBUG_MSG( DEBUG_NAME, thread_h,
19312027Sjungma@eit.uni-kl.de	           "preempting active thread with thread" );
19412027Sjungma@eit.uni-kl.de        execute_thread_next( active_p );
19512027Sjungma@eit.uni-kl.de	execute_thread_next( thread_h );
19612027Sjungma@eit.uni-kl.de	active_p->suspend_me();
19712027Sjungma@eit.uni-kl.de    }
19812027Sjungma@eit.uni-kl.de
19912027Sjungma@eit.uni-kl.de    // CALLER IS THE THREAD TO BE RUN:
20012027Sjungma@eit.uni-kl.de    //
20112027Sjungma@eit.uni-kl.de    //   (a) Push the thread to be run onto the front of the runnable queue so
20212027Sjungma@eit.uni-kl.de    //       it will execute when we suspend the calling thread.
20312027Sjungma@eit.uni-kl.de    //   (b) Suspend the active thread.
20412027Sjungma@eit.uni-kl.de
20512027Sjungma@eit.uni-kl.de    else
20612027Sjungma@eit.uni-kl.de    {
20712027Sjungma@eit.uni-kl.de        DEBUG_MSG(DEBUG_NAME,thread_h,"self preemption of active thread");
20812027Sjungma@eit.uni-kl.de	execute_thread_next( thread_h );
20912027Sjungma@eit.uni-kl.de	active_p->suspend_me();
21012027Sjungma@eit.uni-kl.de    }
21112027Sjungma@eit.uni-kl.de}
21212027Sjungma@eit.uni-kl.de
21312027Sjungma@eit.uni-kl.de
21412027Sjungma@eit.uni-kl.deinline
21512027Sjungma@eit.uni-kl.devoid
21612027Sjungma@eit.uni-kl.desc_simcontext::push_runnable_method( sc_method_handle method_h )
21712027Sjungma@eit.uni-kl.de{
21812027Sjungma@eit.uni-kl.de    m_runnable->push_back_method( method_h );
21912027Sjungma@eit.uni-kl.de}
22012027Sjungma@eit.uni-kl.de
22112027Sjungma@eit.uni-kl.deinline
22212027Sjungma@eit.uni-kl.devoid
22312027Sjungma@eit.uni-kl.desc_simcontext::push_runnable_method_front( sc_method_handle method_h )
22412027Sjungma@eit.uni-kl.de{
22512027Sjungma@eit.uni-kl.de    m_runnable->push_front_method( method_h );
22612027Sjungma@eit.uni-kl.de}
22712027Sjungma@eit.uni-kl.de
22812027Sjungma@eit.uni-kl.deinline
22912027Sjungma@eit.uni-kl.devoid
23012027Sjungma@eit.uni-kl.desc_simcontext::push_runnable_thread( sc_thread_handle thread_h )
23112027Sjungma@eit.uni-kl.de{
23212027Sjungma@eit.uni-kl.de    m_runnable->push_back_thread( thread_h );
23312027Sjungma@eit.uni-kl.de}
23412027Sjungma@eit.uni-kl.de
23512027Sjungma@eit.uni-kl.deinline
23612027Sjungma@eit.uni-kl.devoid
23712027Sjungma@eit.uni-kl.desc_simcontext::push_runnable_thread_front( sc_thread_handle thread_h )
23812027Sjungma@eit.uni-kl.de{
23912027Sjungma@eit.uni-kl.de    m_runnable->push_front_thread( thread_h );
24012027Sjungma@eit.uni-kl.de}
24112027Sjungma@eit.uni-kl.de
24212027Sjungma@eit.uni-kl.de
24312027Sjungma@eit.uni-kl.deinline
24412027Sjungma@eit.uni-kl.desc_method_handle
24512027Sjungma@eit.uni-kl.desc_simcontext::pop_runnable_method()
24612027Sjungma@eit.uni-kl.de{
24712027Sjungma@eit.uni-kl.de    sc_method_handle method_h = m_runnable->pop_method();
24812027Sjungma@eit.uni-kl.de    if( method_h == 0 ) {
24912027Sjungma@eit.uni-kl.de	reset_curr_proc();
25012027Sjungma@eit.uni-kl.de	return 0;
25112027Sjungma@eit.uni-kl.de    }
25212027Sjungma@eit.uni-kl.de    set_curr_proc( (sc_process_b*)method_h );
25312027Sjungma@eit.uni-kl.de    return method_h;
25412027Sjungma@eit.uni-kl.de}
25512027Sjungma@eit.uni-kl.de
25612027Sjungma@eit.uni-kl.deinline
25712027Sjungma@eit.uni-kl.desc_thread_handle
25812027Sjungma@eit.uni-kl.desc_simcontext::pop_runnable_thread()
25912027Sjungma@eit.uni-kl.de{
26012027Sjungma@eit.uni-kl.de    sc_thread_handle thread_h = m_runnable->pop_thread();
26112027Sjungma@eit.uni-kl.de    if( thread_h == 0 ) {
26212027Sjungma@eit.uni-kl.de	reset_curr_proc();
26312027Sjungma@eit.uni-kl.de	return 0;
26412027Sjungma@eit.uni-kl.de    }
26512027Sjungma@eit.uni-kl.de    set_curr_proc( (sc_process_b*)thread_h );
26612027Sjungma@eit.uni-kl.de    return thread_h;
26712027Sjungma@eit.uni-kl.de}
26812027Sjungma@eit.uni-kl.de
26912027Sjungma@eit.uni-kl.deinline
27012027Sjungma@eit.uni-kl.devoid
27112027Sjungma@eit.uni-kl.desc_simcontext::remove_runnable_method( sc_method_handle method_h )
27212027Sjungma@eit.uni-kl.de{
27312027Sjungma@eit.uni-kl.de    m_runnable->remove_method( method_h );
27412027Sjungma@eit.uni-kl.de}
27512027Sjungma@eit.uni-kl.de
27612027Sjungma@eit.uni-kl.deinline
27712027Sjungma@eit.uni-kl.devoid
27812027Sjungma@eit.uni-kl.desc_simcontext::remove_runnable_thread( sc_thread_handle thread_h )
27912027Sjungma@eit.uni-kl.de{
28012027Sjungma@eit.uni-kl.de    m_runnable->remove_thread( thread_h );
28112027Sjungma@eit.uni-kl.de}
28212027Sjungma@eit.uni-kl.de
28312027Sjungma@eit.uni-kl.deinline
28412027Sjungma@eit.uni-kl.destd::vector<sc_thread_handle>&
28512027Sjungma@eit.uni-kl.desc_simcontext::get_active_invokers()
28612027Sjungma@eit.uni-kl.de{
28712027Sjungma@eit.uni-kl.de    return m_active_invokers;
28812027Sjungma@eit.uni-kl.de}
28912027Sjungma@eit.uni-kl.de
29012027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
29112027Sjungma@eit.uni-kl.de
29212027Sjungma@eit.uni-kl.deextern void sc_defunct_process_function( sc_module* );
29312027Sjungma@eit.uni-kl.de
29412027Sjungma@eit.uni-kl.de
29512027Sjungma@eit.uni-kl.de} // namespace sc_core
29612027Sjungma@eit.uni-kl.de
29712027Sjungma@eit.uni-kl.de#undef DEBUG_MSG
29812027Sjungma@eit.uni-kl.de#undef DEBUG_NAME
29912027Sjungma@eit.uni-kl.de
30012027Sjungma@eit.uni-kl.de// $Log: sc_simcontext_int.h,v $
30112027Sjungma@eit.uni-kl.de// Revision 1.14  2011/08/29 18:04:32  acg
30212027Sjungma@eit.uni-kl.de//  Philipp A. Hartmann: miscellaneous clean ups.
30312027Sjungma@eit.uni-kl.de//
30412027Sjungma@eit.uni-kl.de// Revision 1.13  2011/08/26 20:46:11  acg
30512027Sjungma@eit.uni-kl.de//  Andy Goodrich: moved the modification log to the end of the file to
30612027Sjungma@eit.uni-kl.de//  eliminate source line number skew when check-ins are done.
30712027Sjungma@eit.uni-kl.de//
30812027Sjungma@eit.uni-kl.de// Revision 1.12  2011/07/29 22:45:06  acg
30912027Sjungma@eit.uni-kl.de//  Andy Goodrich: added invocation of sc_method_process::check_for_throws()
31012027Sjungma@eit.uni-kl.de//  to the preempt_with() code to handle case where the preempting process
31112027Sjungma@eit.uni-kl.de//  causes a throw on the invoking method process.
31212027Sjungma@eit.uni-kl.de//
31312027Sjungma@eit.uni-kl.de// Revision 1.11  2011/04/13 02:45:11  acg
31412027Sjungma@eit.uni-kl.de//  Andy Goodrich: eliminated warning message that occurred if the DEBUG_MSG
31512027Sjungma@eit.uni-kl.de//  macro was used.
31612027Sjungma@eit.uni-kl.de//
31712027Sjungma@eit.uni-kl.de// Revision 1.10  2011/04/11 22:05:48  acg
31812027Sjungma@eit.uni-kl.de//  Andy Goodrich: use the DEBUG_NAME macro in DEBUG_MSG invocations.
31912027Sjungma@eit.uni-kl.de//
32012027Sjungma@eit.uni-kl.de// Revision 1.9  2011/04/10 22:12:32  acg
32112027Sjungma@eit.uni-kl.de//  Andy Goodrich: adding debugging macros.
32212027Sjungma@eit.uni-kl.de//
32312027Sjungma@eit.uni-kl.de// Revision 1.8  2011/04/08 18:26:07  acg
32412027Sjungma@eit.uni-kl.de//  Andy Goodrich: added execute_method_next() to handle method dispatch
32512027Sjungma@eit.uni-kl.de//   for asynchronous notifications that occur outside the evaluation phase.
32612027Sjungma@eit.uni-kl.de//
32712027Sjungma@eit.uni-kl.de// Revision 1.7  2011/02/18 20:27:14  acg
32812027Sjungma@eit.uni-kl.de//  Andy Goodrich: Updated Copyrights.
32912027Sjungma@eit.uni-kl.de//
33012027Sjungma@eit.uni-kl.de// Revision 1.6  2011/02/13 21:47:38  acg
33112027Sjungma@eit.uni-kl.de//  Andy Goodrich: update copyright notice.
33212027Sjungma@eit.uni-kl.de//
33312027Sjungma@eit.uni-kl.de// Revision 1.5  2011/02/08 08:17:50  acg
33412027Sjungma@eit.uni-kl.de//  Andy Goodrich: fixed bug in preempt_with() where I was resetting the
33512027Sjungma@eit.uni-kl.de//  process context rather than saving and restoring it.
33612027Sjungma@eit.uni-kl.de//
33712027Sjungma@eit.uni-kl.de// Revision 1.4  2011/02/01 21:12:56  acg
33812027Sjungma@eit.uni-kl.de//  Andy Goodrich: addition of preempt_with() method to allow immediate
33912027Sjungma@eit.uni-kl.de//  execution of threads for throws.
34012027Sjungma@eit.uni-kl.de//
34112027Sjungma@eit.uni-kl.de// Revision 1.3  2011/01/25 20:50:37  acg
34212027Sjungma@eit.uni-kl.de//  Andy Goodrich: changes for IEEE 1666 2011.
34312027Sjungma@eit.uni-kl.de//
34412027Sjungma@eit.uni-kl.de// Revision 1.2  2008/05/22 17:06:26  acg
34512027Sjungma@eit.uni-kl.de//  Andy Goodrich: updated copyright notice to include 2008.
34612027Sjungma@eit.uni-kl.de//
34712027Sjungma@eit.uni-kl.de// Revision 1.1.1.1  2006/12/15 20:20:05  acg
34812027Sjungma@eit.uni-kl.de// SystemC 2.3
34912027Sjungma@eit.uni-kl.de//
35012027Sjungma@eit.uni-kl.de// Revision 1.6  2006/05/26 20:33:16  acg
35112027Sjungma@eit.uni-kl.de//   Andy Goodrich: changes required by additional platform compilers (i.e.,
35212027Sjungma@eit.uni-kl.de//   Microsoft VC++, Sun Forte, HP aCC).
35312027Sjungma@eit.uni-kl.de//
35412027Sjungma@eit.uni-kl.de// Revision 1.5  2006/01/19 00:29:52  acg
35512027Sjungma@eit.uni-kl.de// Andy Goodrich: Yet another implementation for signal write checking. This
35612027Sjungma@eit.uni-kl.de// one uses an environment variable SC_SIGNAL_WRITE_CHECK, that when set to
35712027Sjungma@eit.uni-kl.de// DISABLE will disable write checking on signals.
35812027Sjungma@eit.uni-kl.de//
35912027Sjungma@eit.uni-kl.de// Revision 1.4  2006/01/18 21:42:37  acg
36012027Sjungma@eit.uni-kl.de// Andy Goodrich: Changes for check writer support.
36112027Sjungma@eit.uni-kl.de//
36212027Sjungma@eit.uni-kl.de// Revision 1.3  2006/01/13 18:44:30  acg
36312027Sjungma@eit.uni-kl.de// Added $Log to record CVS changes into the source.
36412027Sjungma@eit.uni-kl.de
36512027Sjungma@eit.uni-kl.de#endif
366