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_spawn.h -- Process spawning support.
2312027Sjungma@eit.uni-kl.de
2412027Sjungma@eit.uni-kl.de  Original Authors: Andy Goodrich, Forte Design Systems, 17 June 2003
2512027Sjungma@eit.uni-kl.de                    Stuart Swan, Cadence,
2612027Sjungma@eit.uni-kl.de                    Bishnupriya Bhattacharya, Cadence Design Systems,
2712027Sjungma@eit.uni-kl.de                    25 August, 2003
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
3312027Sjungma@eit.uni-kl.de#if !defined(sc_spawn_h_INCLUDED)
3412027Sjungma@eit.uni-kl.de#define sc_spawn_h_INCLUDED
3512027Sjungma@eit.uni-kl.de
3612027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_process_handle.h"
3712027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_spawn_options.h"
3812027Sjungma@eit.uni-kl.de
3912027Sjungma@eit.uni-kl.denamespace sc_core {
4012027Sjungma@eit.uni-kl.de
4112027Sjungma@eit.uni-kl.declass sc_event;
4212027Sjungma@eit.uni-kl.declass sc_port_base;
4312027Sjungma@eit.uni-kl.declass sc_interface;
4412027Sjungma@eit.uni-kl.declass sc_event_finder;
4512027Sjungma@eit.uni-kl.declass sc_process_b;
4612027Sjungma@eit.uni-kl.de
4712027Sjungma@eit.uni-kl.de//=============================================================================
4812027Sjungma@eit.uni-kl.de// CLASS sc_spawn_object<T>
4912027Sjungma@eit.uni-kl.de//
5012027Sjungma@eit.uni-kl.de// This templated helper class allows an object to provide the execution
5112027Sjungma@eit.uni-kl.de// semantics for a process via its () operator. An instance of the supplied
5212027Sjungma@eit.uni-kl.de// execution object will be kept to provide the semantics when the process is
5312027Sjungma@eit.uni-kl.de// scheduled for execution. The () operator does not return a value. An example
5412027Sjungma@eit.uni-kl.de// of an object that might be used for this helper function would be void
5512027Sjungma@eit.uni-kl.de// SC_BOOST bound function or method.
5612027Sjungma@eit.uni-kl.de//
5712027Sjungma@eit.uni-kl.de// This class is derived from sc_process_host and overloads
5812027Sjungma@eit.uni-kl.de// sc_process_host::semantics to provide the actual semantic content.
5912027Sjungma@eit.uni-kl.de//
6012027Sjungma@eit.uni-kl.de//   sc_spawn_object(T object, const char* name, const sc_spawn_options* opt_p)
6112027Sjungma@eit.uni-kl.de//     This is the object instance constructor for this class. It makes a
6212027Sjungma@eit.uni-kl.de//     copy of the supplied object. The tp_call constructor is called
6312027Sjungma@eit.uni-kl.de//     with an indication that this object instance should be reclaimed when
6412027Sjungma@eit.uni-kl.de//     execution completes.
6512027Sjungma@eit.uni-kl.de//         object   =  object whose () operator will be called to provide
6612027Sjungma@eit.uni-kl.de//                     the process semantics.
6712027Sjungma@eit.uni-kl.de//         name_p   =  optional name for object instance, or zero.
6812027Sjungma@eit.uni-kl.de//         opt_p    -> spawn options or zero.
6912027Sjungma@eit.uni-kl.de//
7012027Sjungma@eit.uni-kl.de//   virtual void semantics()
7112027Sjungma@eit.uni-kl.de//     This virtual method provides the execution semantics for its process.
7212027Sjungma@eit.uni-kl.de//     It performs a () operation on m_object.
7312027Sjungma@eit.uni-kl.de//=============================================================================
7412027Sjungma@eit.uni-kl.detemplate<typename T>
7512027Sjungma@eit.uni-kl.declass sc_spawn_object : public sc_process_host {
7612027Sjungma@eit.uni-kl.de  public:
7712027Sjungma@eit.uni-kl.de    sc_spawn_object( T object) : m_object(object)
7812027Sjungma@eit.uni-kl.de    {
7912027Sjungma@eit.uni-kl.de    }
8012027Sjungma@eit.uni-kl.de
8112027Sjungma@eit.uni-kl.de    virtual void semantics()
8212027Sjungma@eit.uni-kl.de    {
8312027Sjungma@eit.uni-kl.de        m_object();
8412027Sjungma@eit.uni-kl.de    }
8512027Sjungma@eit.uni-kl.de
8612027Sjungma@eit.uni-kl.de  protected:
8712027Sjungma@eit.uni-kl.de    T                        m_object;
8812027Sjungma@eit.uni-kl.de};
8912027Sjungma@eit.uni-kl.de
9012027Sjungma@eit.uni-kl.de
9112027Sjungma@eit.uni-kl.de//------------------------------------------------------------------------------
9212027Sjungma@eit.uni-kl.de//"sc_spawn - semantic object with no return value"
9312027Sjungma@eit.uni-kl.de//
9412027Sjungma@eit.uni-kl.de// This inline function spawns a process for execution. The execution semantics
9512027Sjungma@eit.uni-kl.de// for the process being spawned will be provided by the supplied object
9612027Sjungma@eit.uni-kl.de// instance via its () operator. (E.g., a SC_BOOST bound function)
9712027Sjungma@eit.uni-kl.de// After creating the process it is registered with the simulator.
9812027Sjungma@eit.uni-kl.de//     object   =   object instance providing the execution semantics via its
9912027Sjungma@eit.uni-kl.de//                  () operator.
10012027Sjungma@eit.uni-kl.de//     name_p   =   optional name for object instance, or zero.
10112027Sjungma@eit.uni-kl.de//     opt_p    ->  optional spawn options for process, or zero for the default.
10212027Sjungma@eit.uni-kl.de//------------------------------------------------------------------------------
10312027Sjungma@eit.uni-kl.detemplate <typename T>
10412027Sjungma@eit.uni-kl.deinline sc_process_handle sc_spawn(
10512027Sjungma@eit.uni-kl.de    T object,
10612027Sjungma@eit.uni-kl.de    const char* name_p = 0,
10712027Sjungma@eit.uni-kl.de    const sc_spawn_options* opt_p = 0)
10812027Sjungma@eit.uni-kl.de{
10912027Sjungma@eit.uni-kl.de    sc_simcontext*      context_p;
11012027Sjungma@eit.uni-kl.de    sc_spawn_object<T>* spawn_p;
11112027Sjungma@eit.uni-kl.de
11212027Sjungma@eit.uni-kl.de    context_p = sc_get_curr_simcontext();
11312027Sjungma@eit.uni-kl.de    spawn_p = new sc_spawn_object<T>(object);
11412027Sjungma@eit.uni-kl.de    if ( !opt_p || !opt_p->is_method() )
11512027Sjungma@eit.uni-kl.de    {
11612027Sjungma@eit.uni-kl.de            sc_process_handle thread_handle = context_p->create_thread_process(
11712027Sjungma@eit.uni-kl.de            name_p, true,
11812027Sjungma@eit.uni-kl.de            SC_MAKE_FUNC_PTR(sc_spawn_object<T>,semantics),
11912027Sjungma@eit.uni-kl.de            spawn_p, opt_p
12012027Sjungma@eit.uni-kl.de        );
12112027Sjungma@eit.uni-kl.de        return thread_handle;
12212027Sjungma@eit.uni-kl.de    }
12312027Sjungma@eit.uni-kl.de    else
12412027Sjungma@eit.uni-kl.de    {
12512027Sjungma@eit.uni-kl.de            sc_process_handle method_handle = context_p->create_method_process(
12612027Sjungma@eit.uni-kl.de            name_p, true,
12712027Sjungma@eit.uni-kl.de            SC_MAKE_FUNC_PTR(sc_spawn_object<T>,semantics),
12812027Sjungma@eit.uni-kl.de            spawn_p, opt_p
12912027Sjungma@eit.uni-kl.de        );
13012027Sjungma@eit.uni-kl.de        return method_handle;
13112027Sjungma@eit.uni-kl.de    }
13212027Sjungma@eit.uni-kl.de}
13312027Sjungma@eit.uni-kl.de
13412027Sjungma@eit.uni-kl.de//=============================================================================
13512027Sjungma@eit.uni-kl.de// CLASS sc_spawn_object_v<T> for all compilers except HP aCC
13612027Sjungma@eit.uni-kl.de//              or
13712027Sjungma@eit.uni-kl.de// CLASS sc_spawn_object_v<T, R> for HP aCC which tries to match this
13812027Sjungma@eit.uni-kl.de// one template argument class when the sc_spawn() declared above is
13912027Sjungma@eit.uni-kl.de// invoked with 3 arguments or 2 arguments, and generates compiler errors.
14012027Sjungma@eit.uni-kl.de//
14112027Sjungma@eit.uni-kl.de// This templated helper class allows an object to provide the execution
14212027Sjungma@eit.uni-kl.de// semantics for a process via its () operator. An instance of the supplied
14312027Sjungma@eit.uni-kl.de// object will be kept to provide the semantics when the process is scheduled
14412027Sjungma@eit.uni-kl.de// for execution. The () operator returns a value, which will be stored at the
14512027Sjungma@eit.uni-kl.de// location specified by the supplied pointer. An example of an object that
14612027Sjungma@eit.uni-kl.de// might be used for this helper function would be valued SC_BOOST bound
14712027Sjungma@eit.uni-kl.de// function or method.
14812027Sjungma@eit.uni-kl.de//
14912027Sjungma@eit.uni-kl.de//   sc_spawn_object_v( typename F::result_type* r_p, T f, const char* name_p,
15012027Sjungma@eit.uni-kl.de//                      const sc_spawn_options* opt_p )
15112027Sjungma@eit.uni-kl.de//       r_p      -> where to place the result of the function invocation.
15212027Sjungma@eit.uni-kl.de//       f        =  information to be executed.
15312027Sjungma@eit.uni-kl.de//       name_p   =  optional name for object instance, or zero.
15412027Sjungma@eit.uni-kl.de//       opt_p    -> optional spawn options for process, or zero for the default
15512027Sjungma@eit.uni-kl.de//     This is the object instance constructor for this class. It makes a
15612027Sjungma@eit.uni-kl.de//     copy of the supplied object. The tp_call constructor is called
15712027Sjungma@eit.uni-kl.de//     with an indication that this object instance should be reclaimed when
15812027Sjungma@eit.uni-kl.de//     execution completes.
15912027Sjungma@eit.uni-kl.de//         result_p -> where to place the value of the () operator.
16012027Sjungma@eit.uni-kl.de//         object   =  object whose () operator will be called to provide
16112027Sjungma@eit.uni-kl.de//                     the process semantics.
16212027Sjungma@eit.uni-kl.de//
16312027Sjungma@eit.uni-kl.de//   virtual void semantics()
16412027Sjungma@eit.uni-kl.de//     This virtual method provides the execution semantics for its process.
16512027Sjungma@eit.uni-kl.de//     It performs a () operation on m_object, placing the result at m_result_p.
16612027Sjungma@eit.uni-kl.de//=============================================================================
16712027Sjungma@eit.uni-kl.de
16812027Sjungma@eit.uni-kl.de//------------------------------------------------------------------------------
16912027Sjungma@eit.uni-kl.de//"sc_spawn_object_v - semantic object with return value"
17012027Sjungma@eit.uni-kl.de//
17112027Sjungma@eit.uni-kl.de// This inline function spawns a process for execution. The execution semantics
17212027Sjungma@eit.uni-kl.de// for the process being spawned will be provided by the supplied object
17312027Sjungma@eit.uni-kl.de// instance via its () operator. (E.g., a SC_BOOST bound function) That
17412027Sjungma@eit.uni-kl.de// operator returns a value, which will be placed in the supplied return
17512027Sjungma@eit.uni-kl.de// location.
17612027Sjungma@eit.uni-kl.de// After creating the process it is registered with the simulator.
17712027Sjungma@eit.uni-kl.de//     object   =  object instance providing the execution semantics via its ()
17812027Sjungma@eit.uni-kl.de//                 operator.
17912027Sjungma@eit.uni-kl.de//     r_p      -> where to place the value of the () operator.
18012027Sjungma@eit.uni-kl.de//     name_p   =  optional name for object instance, or zero.
18112027Sjungma@eit.uni-kl.de//     opt_p    -> optional spawn options for process, or zero for the default.
18212027Sjungma@eit.uni-kl.de//------------------------------------------------------------------------------
18312027Sjungma@eit.uni-kl.de
18412027Sjungma@eit.uni-kl.de#if !defined (__HP_aCC)
18512027Sjungma@eit.uni-kl.de
18612027Sjungma@eit.uni-kl.detemplate<typename T>
18712027Sjungma@eit.uni-kl.declass sc_spawn_object_v : public sc_process_host {
18812027Sjungma@eit.uni-kl.de  public:
18912027Sjungma@eit.uni-kl.de    sc_spawn_object_v( typename T::result_type* r_p, T object ) :
19012027Sjungma@eit.uni-kl.de        m_object(object), m_result_p(r_p)
19112027Sjungma@eit.uni-kl.de    {
19212027Sjungma@eit.uni-kl.de    }
19312027Sjungma@eit.uni-kl.de
19412027Sjungma@eit.uni-kl.de    virtual void semantics()
19512027Sjungma@eit.uni-kl.de    {
19612027Sjungma@eit.uni-kl.de        *m_result_p = m_object();
19712027Sjungma@eit.uni-kl.de    }
19812027Sjungma@eit.uni-kl.de
19912027Sjungma@eit.uni-kl.de  protected:
20012027Sjungma@eit.uni-kl.de    T                        m_object;
20112027Sjungma@eit.uni-kl.de    typename T::result_type* m_result_p;
20212027Sjungma@eit.uni-kl.de};
20312027Sjungma@eit.uni-kl.de
20412027Sjungma@eit.uni-kl.detemplate <typename T>
20512027Sjungma@eit.uni-kl.deinline sc_process_handle sc_spawn(
20612027Sjungma@eit.uni-kl.de    typename T::result_type* r_p,
20712027Sjungma@eit.uni-kl.de    T object,
20812027Sjungma@eit.uni-kl.de    const char* name_p = 0,
20912027Sjungma@eit.uni-kl.de    const sc_spawn_options* opt_p = 0)
21012027Sjungma@eit.uni-kl.de{
21112027Sjungma@eit.uni-kl.de    sc_simcontext*      context_p;
21212027Sjungma@eit.uni-kl.de    sc_spawn_object_v<T>* spawn_p;
21312027Sjungma@eit.uni-kl.de
21412027Sjungma@eit.uni-kl.de    context_p = sc_get_curr_simcontext();
21512027Sjungma@eit.uni-kl.de
21612027Sjungma@eit.uni-kl.de    spawn_p = new sc_spawn_object_v<T>(r_p, object);
21712027Sjungma@eit.uni-kl.de    if ( !opt_p || !opt_p->is_method() )
21812027Sjungma@eit.uni-kl.de    {
21912027Sjungma@eit.uni-kl.de            sc_process_handle thread_handle = context_p->create_thread_process(
22012027Sjungma@eit.uni-kl.de            name_p, true,
22112027Sjungma@eit.uni-kl.de            SC_MAKE_FUNC_PTR(sc_spawn_object_v<T>,semantics),
22212027Sjungma@eit.uni-kl.de            spawn_p, opt_p
22312027Sjungma@eit.uni-kl.de        );
22412027Sjungma@eit.uni-kl.de        return thread_handle;
22512027Sjungma@eit.uni-kl.de    }
22612027Sjungma@eit.uni-kl.de    else
22712027Sjungma@eit.uni-kl.de    {
22812027Sjungma@eit.uni-kl.de            sc_process_handle method_handle = context_p->create_method_process(
22912027Sjungma@eit.uni-kl.de            name_p, true,
23012027Sjungma@eit.uni-kl.de            SC_MAKE_FUNC_PTR(sc_spawn_object_v<T>,semantics),
23112027Sjungma@eit.uni-kl.de            spawn_p, opt_p
23212027Sjungma@eit.uni-kl.de        );
23312027Sjungma@eit.uni-kl.de        return method_handle;
23412027Sjungma@eit.uni-kl.de    }
23512027Sjungma@eit.uni-kl.de}
23612027Sjungma@eit.uni-kl.de
23712027Sjungma@eit.uni-kl.de#else
23812027Sjungma@eit.uni-kl.de// for HP aCC
23912027Sjungma@eit.uni-kl.detemplate<typename T, typename R>
24012027Sjungma@eit.uni-kl.declass sc_spawn_object_v : public sc_process_host {
24112027Sjungma@eit.uni-kl.de  public:
24212027Sjungma@eit.uni-kl.de    sc_spawn_object_v( R* r_p, T object) :
24312027Sjungma@eit.uni-kl.de        m_object(object), m_result_p(r_p)
24412027Sjungma@eit.uni-kl.de    {
24512027Sjungma@eit.uni-kl.de    }
24612027Sjungma@eit.uni-kl.de
24712027Sjungma@eit.uni-kl.de    virtual void semantics()
24812027Sjungma@eit.uni-kl.de    {
24912027Sjungma@eit.uni-kl.de        *m_result_p = m_object();
25012027Sjungma@eit.uni-kl.de    }
25112027Sjungma@eit.uni-kl.de
25212027Sjungma@eit.uni-kl.de  protected:
25312027Sjungma@eit.uni-kl.de    T  m_object;
25412027Sjungma@eit.uni-kl.de    R* m_result_p;
25512027Sjungma@eit.uni-kl.de};
25612027Sjungma@eit.uni-kl.de
25712027Sjungma@eit.uni-kl.detemplate <typename T, typename R>
25812027Sjungma@eit.uni-kl.deinline sc_process_handle sc_spawn(
25912027Sjungma@eit.uni-kl.de    R* r_p,
26012027Sjungma@eit.uni-kl.de    T object,
26112027Sjungma@eit.uni-kl.de    const char* name_p = 0,
26212027Sjungma@eit.uni-kl.de    const sc_spawn_options* opt_p = 0)
26312027Sjungma@eit.uni-kl.de{
26412027Sjungma@eit.uni-kl.de    sc_simcontext*      context_p;
26512027Sjungma@eit.uni-kl.de    sc_spawn_object_v<T,R>* spawn_p;
26612027Sjungma@eit.uni-kl.de
26712027Sjungma@eit.uni-kl.de    context_p = sc_get_curr_simcontext();
26812027Sjungma@eit.uni-kl.de
26912027Sjungma@eit.uni-kl.de    spawn_p = new sc_spawn_object_v<T,R>(r_p, object);
27012027Sjungma@eit.uni-kl.de    if ( !opt_p || !opt_p->is_method() )
27112027Sjungma@eit.uni-kl.de    {
27212027Sjungma@eit.uni-kl.de            sc_process_handle thread_handle = context_p->create_thread_process(
27312027Sjungma@eit.uni-kl.de            name_p, true,
27412027Sjungma@eit.uni-kl.de            static_cast<sc_core::SC_ENTRY_FUNC>(
27512027Sjungma@eit.uni-kl.de                &sc_spawn_object_v<T,R>::semantics),
27612027Sjungma@eit.uni-kl.de            spawn_p, opt_p
27712027Sjungma@eit.uni-kl.de        );
27812027Sjungma@eit.uni-kl.de        return thread_handle;
27912027Sjungma@eit.uni-kl.de    }
28012027Sjungma@eit.uni-kl.de    else
28112027Sjungma@eit.uni-kl.de    {
28212027Sjungma@eit.uni-kl.de            sc_process_handle method_handle = context_p->create_method_process(
28312027Sjungma@eit.uni-kl.de            name_p, true,
28412027Sjungma@eit.uni-kl.de            static_cast<sc_core::SC_ENTRY_FUNC>(
28512027Sjungma@eit.uni-kl.de                &sc_spawn_object_v<T,R>::semantics),
28612027Sjungma@eit.uni-kl.de            spawn_p, opt_p
28712027Sjungma@eit.uni-kl.de        );
28812027Sjungma@eit.uni-kl.de        return method_handle;
28912027Sjungma@eit.uni-kl.de    }
29012027Sjungma@eit.uni-kl.de}
29112027Sjungma@eit.uni-kl.de
29212027Sjungma@eit.uni-kl.de#endif // HP
29312027Sjungma@eit.uni-kl.de
29412027Sjungma@eit.uni-kl.de} // namespace sc_core
29512027Sjungma@eit.uni-kl.de
29612027Sjungma@eit.uni-kl.de// $Log: sc_spawn.h,v $
29712027Sjungma@eit.uni-kl.de// Revision 1.7  2011/08/26 20:46:11  acg
29812027Sjungma@eit.uni-kl.de//  Andy Goodrich: moved the modification log to the end of the file to
29912027Sjungma@eit.uni-kl.de//  eliminate source line number skew when check-ins are done.
30012027Sjungma@eit.uni-kl.de//
30112027Sjungma@eit.uni-kl.de// Revision 1.6  2011/02/18 20:27:14  acg
30212027Sjungma@eit.uni-kl.de//  Andy Goodrich: Updated Copyrights.
30312027Sjungma@eit.uni-kl.de//
30412027Sjungma@eit.uni-kl.de// Revision 1.5  2011/02/13 21:47:38  acg
30512027Sjungma@eit.uni-kl.de//  Andy Goodrich: update copyright notice.
30612027Sjungma@eit.uni-kl.de//
30712027Sjungma@eit.uni-kl.de// Revision 1.4  2011/02/01 21:14:02  acg
30812027Sjungma@eit.uni-kl.de//  Andy Goodrich: formatting.
30912027Sjungma@eit.uni-kl.de//
31012027Sjungma@eit.uni-kl.de// Revision 1.3  2009/07/28 01:10:53  acg
31112027Sjungma@eit.uni-kl.de//  Andy Goodrich: updates for 2.3 release candidate.
31212027Sjungma@eit.uni-kl.de//
31312027Sjungma@eit.uni-kl.de// Revision 1.2  2008/05/22 17:06:26  acg
31412027Sjungma@eit.uni-kl.de//  Andy Goodrich: updated copyright notice to include 2008.
31512027Sjungma@eit.uni-kl.de//
31612027Sjungma@eit.uni-kl.de// Revision 1.1.1.1  2006/12/15 20:20:05  acg
31712027Sjungma@eit.uni-kl.de// SystemC 2.3
31812027Sjungma@eit.uni-kl.de//
31912027Sjungma@eit.uni-kl.de// Revision 1.6  2006/05/26 20:33:16  acg
32012027Sjungma@eit.uni-kl.de//   Andy Goodrich: changes required by additional platform compilers (i.e.,
32112027Sjungma@eit.uni-kl.de//   Microsoft VC++, Sun Forte, HP aCC).
32212027Sjungma@eit.uni-kl.de//
32312027Sjungma@eit.uni-kl.de// Revision 1.5  2006/05/08 18:01:44  acg
32412027Sjungma@eit.uni-kl.de//  Andy Goodrich: changed the HP-specific implementations of sc_spawn() to
32512027Sjungma@eit.uni-kl.de//  use a static_cast to create their entry functions rather than the
32612027Sjungma@eit.uni-kl.de//  SC_MAKE_FUNC_PTR macro. The HP preprocessor does not parse template
32712027Sjungma@eit.uni-kl.de//  arguments that contain a comma properly.
32812027Sjungma@eit.uni-kl.de//
32912027Sjungma@eit.uni-kl.de// Revision 1.4  2006/04/11 23:13:21  acg
33012027Sjungma@eit.uni-kl.de//   Andy Goodrich: Changes for reduced reset support that only includes
33112027Sjungma@eit.uni-kl.de//   sc_cthread, but has preliminary hooks for expanding to method and thread
33212027Sjungma@eit.uni-kl.de//   processes also.
33312027Sjungma@eit.uni-kl.de//
33412027Sjungma@eit.uni-kl.de// Revision 1.3  2006/01/13 18:44:30  acg
33512027Sjungma@eit.uni-kl.de// Added $Log to record CVS changes into the source.
33612027Sjungma@eit.uni-kl.de
33712027Sjungma@eit.uni-kl.de#endif // !defined(sc_spawn_h_INCLUDED)
338