sc_cor_fiber.h

Go to the documentation of this file.
00001 /*****************************************************************************
00002 
00003   The following code is derived, directly or indirectly, from the SystemC
00004   source code Copyright (c) 1996-2006 by all Contributors.
00005   All Rights reserved.
00006 
00007   The contents of this file are subject to the restrictions and limitations
00008   set forth in the SystemC Open Source License Version 2.4 (the "License");
00009   You may not use this file except in compliance with such restrictions and
00010   limitations. You may obtain instructions on how to receive a copy of the
00011   License at http://www.systemc.org/. Software distributed by Contributors
00012   under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF
00013   ANY KIND, either express or implied. See the License for the specific
00014   language governing rights and limitations under the License.
00015 
00016  *****************************************************************************/
00017 
00018 /*****************************************************************************
00019 
00020   sc_cor_fiber.h -- Coroutine implementation with fibers.
00021 
00022   Original Author: Martin Janssen, Synopsys, Inc., 2001-12-18
00023 
00024  *****************************************************************************/
00025 
00026 /*****************************************************************************
00027 
00028   MODIFICATION LOG - modifiers, enter your name, affiliation, date and
00029   changes you are making here.
00030 
00031       Name, Affiliation, Date:
00032   Description of Modification:
00033 
00034  *****************************************************************************/
00035 
00036 // $Log: sc_cor_fiber.h,v $
00037 // Revision 1.1.1.1  2006/12/15 20:31:36  acg
00038 // SystemC 2.2
00039 //
00040 // Revision 1.3  2006/01/13 18:44:29  acg
00041 // Added $Log to record CVS changes into the source.
00042 //
00043 
00044 #ifndef SC_COR_FIBER_H
00045 #define SC_COR_FIBER_H
00046 
00047 
00048 #ifdef WIN32
00049 
00050 #include "sysc/kernel/sc_cor.h"
00051 #include "sysc/kernel/sc_cmnhdr.h"
00052 
00053 namespace sc_core {
00054 
00055 class sc_cor_pkg_fiber;
00056 
00057 #if( defined(_MSC_VER) && _MSC_VER >= 1300 )
00058 typedef std::size_t size_t;
00059 #endif
00060 
00061 // ----------------------------------------------------------------------------
00062 //  CLASS : sc_cor_fiber
00063 //
00064 //  Coroutine class implemented with QuickThreads.
00065 // ----------------------------------------------------------------------------
00066 
00067 class sc_cor_fiber
00068 : public sc_cor
00069 {
00070 
00071 public:
00072 
00073     // constructor
00074     sc_cor_fiber()
00075     : m_stack_size( 0 ), m_fiber( 0 ), m_pkg( 0 )
00076     {}
00077 
00078     // destructor
00079     virtual ~sc_cor_fiber();
00080 
00081 public:
00082 
00083     std::size_t            m_stack_size;  // stack size
00084     PVOID             m_fiber;       // fiber
00085 
00086     sc_cor_pkg_fiber* m_pkg;         // the creating coroutine package
00087 
00088 private:
00089 
00090     // disabled
00091     sc_cor_fiber( const sc_cor_fiber& );
00092     sc_cor_fiber& operator = ( const sc_cor_fiber& );
00093 };
00094 
00095 
00096 // ----------------------------------------------------------------------------
00097 //  CLASS : sc_cor_pkg_fiber
00098 //
00099 //  Coroutine package class implemented with QuickThreads.
00100 // ----------------------------------------------------------------------------
00101 
00102 class sc_cor_pkg_fiber
00103 : public sc_cor_pkg
00104 {
00105   public:
00106 
00107     // constructor
00108     sc_cor_pkg_fiber( sc_simcontext* simc );
00109 
00110     // destructor
00111     virtual ~sc_cor_pkg_fiber();
00112 
00113     // create a new coroutine
00114     virtual sc_cor* create( std::size_t stack_size, sc_cor_fn* fn, void* arg );
00115 
00116     // yield to the next coroutine
00117     virtual void yield( sc_cor* next_cor );
00118 
00119     // abort the current coroutine (and resume the next coroutine)
00120     virtual void abort( sc_cor* next_cor );
00121 
00122     // get the main coroutine
00123     virtual sc_cor* get_main();
00124 
00125 private:
00126 
00127     static int instance_count;
00128 
00129 private:
00130 
00131     // disabled
00132     sc_cor_pkg_fiber();
00133     sc_cor_pkg_fiber( const sc_cor_pkg_fiber& );
00134     sc_cor_pkg_fiber& operator = ( const sc_cor_pkg_fiber& );
00135 };
00136 
00137 } // namespace sc_core
00138 
00139 #endif // WIN32
00140 
00141 
00142 #endif
00143 
00144 // Taf!

Generated on Wed Jan 21 15:32:09 2009 for SystemC by  doxygen 1.5.5