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.h --
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 AT THE END OF THE FILE
2712027Sjungma@eit.uni-kl.de *****************************************************************************/
2812027Sjungma@eit.uni-kl.de
2912027Sjungma@eit.uni-kl.de
3012027Sjungma@eit.uni-kl.de#ifndef SC_EVENT_H
3112027Sjungma@eit.uni-kl.de#define SC_EVENT_H
3212027Sjungma@eit.uni-kl.de
3312027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_cmnhdr.h"
3412027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_kernel_ids.h"
3512027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_simcontext.h"
3612027Sjungma@eit.uni-kl.de#include "sysc/communication/sc_writer_policy.h"
3712027Sjungma@eit.uni-kl.de
3812027Sjungma@eit.uni-kl.denamespace sc_core {
3912027Sjungma@eit.uni-kl.de
4012027Sjungma@eit.uni-kl.de// forward declarations
4112027Sjungma@eit.uni-kl.declass sc_event;
4212027Sjungma@eit.uni-kl.declass sc_event_timed;
4312027Sjungma@eit.uni-kl.declass sc_event_list;
4412027Sjungma@eit.uni-kl.declass sc_event_or_list;
4512027Sjungma@eit.uni-kl.declass sc_event_and_list;
4612027Sjungma@eit.uni-kl.declass sc_object;
4712027Sjungma@eit.uni-kl.de
4812027Sjungma@eit.uni-kl.de// friend function declarations
4912027Sjungma@eit.uni-kl.de    int sc_notify_time_compare( const void*, const void* );
5012027Sjungma@eit.uni-kl.de
5112027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
5212027Sjungma@eit.uni-kl.de//  CLASS : sc_event_expr
5312027Sjungma@eit.uni-kl.de//
5412027Sjungma@eit.uni-kl.de//  The event expression class.
5512027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
5612027Sjungma@eit.uni-kl.de
5712027Sjungma@eit.uni-kl.detemplate< typename T >
5812027Sjungma@eit.uni-kl.declass sc_event_expr
5912027Sjungma@eit.uni-kl.de{
6012027Sjungma@eit.uni-kl.de    friend class sc_event;
6112027Sjungma@eit.uni-kl.de    friend class sc_event_and_list;
6212027Sjungma@eit.uni-kl.de    friend class sc_event_or_list;
6312027Sjungma@eit.uni-kl.de
6412027Sjungma@eit.uni-kl.de    typedef T type;
6512027Sjungma@eit.uni-kl.de
6612027Sjungma@eit.uni-kl.de    inline sc_event_expr()
6712027Sjungma@eit.uni-kl.de       : m_expr( new T(true) )
6812027Sjungma@eit.uni-kl.de    {}
6912027Sjungma@eit.uni-kl.de
7012027Sjungma@eit.uni-kl.depublic:
7112027Sjungma@eit.uni-kl.de
7212027Sjungma@eit.uni-kl.de    inline sc_event_expr( sc_event_expr const & e) // move semantics
7312027Sjungma@eit.uni-kl.de      : m_expr(e.m_expr)
7412027Sjungma@eit.uni-kl.de    {
7512027Sjungma@eit.uni-kl.de        e.m_expr = 0;
7612027Sjungma@eit.uni-kl.de    }
7712027Sjungma@eit.uni-kl.de
7812027Sjungma@eit.uni-kl.de    T const & release() const
7912027Sjungma@eit.uni-kl.de    {
8012027Sjungma@eit.uni-kl.de        sc_assert( m_expr );
8112027Sjungma@eit.uni-kl.de        T* expr = m_expr;
8212027Sjungma@eit.uni-kl.de        m_expr=0;
8312027Sjungma@eit.uni-kl.de        return *expr;
8412027Sjungma@eit.uni-kl.de    }
8512027Sjungma@eit.uni-kl.de
8612027Sjungma@eit.uni-kl.de    void push_back( sc_event const & e) const
8712027Sjungma@eit.uni-kl.de    {
8812027Sjungma@eit.uni-kl.de        sc_assert( m_expr );
8912027Sjungma@eit.uni-kl.de        m_expr->push_back(e);
9012027Sjungma@eit.uni-kl.de    }
9112027Sjungma@eit.uni-kl.de
9212027Sjungma@eit.uni-kl.de    void push_back( type const & el) const
9312027Sjungma@eit.uni-kl.de    {
9412027Sjungma@eit.uni-kl.de        sc_assert( m_expr );
9512027Sjungma@eit.uni-kl.de        m_expr->push_back(el);
9612027Sjungma@eit.uni-kl.de    }
9712027Sjungma@eit.uni-kl.de    operator T const &() const
9812027Sjungma@eit.uni-kl.de    {
9912027Sjungma@eit.uni-kl.de        return release();
10012027Sjungma@eit.uni-kl.de    }
10112027Sjungma@eit.uni-kl.de
10212027Sjungma@eit.uni-kl.de    ~sc_event_expr()
10312027Sjungma@eit.uni-kl.de    {
10412027Sjungma@eit.uni-kl.de        delete m_expr;
10512027Sjungma@eit.uni-kl.de    }
10612027Sjungma@eit.uni-kl.de
10712027Sjungma@eit.uni-kl.deprivate:
10812027Sjungma@eit.uni-kl.de    mutable type * m_expr;
10912027Sjungma@eit.uni-kl.de
11012027Sjungma@eit.uni-kl.de    // disabled
11112027Sjungma@eit.uni-kl.de    void operator=( sc_event_expr const & );
11212027Sjungma@eit.uni-kl.de};
11312027Sjungma@eit.uni-kl.de
11412027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
11512027Sjungma@eit.uni-kl.de//  CLASS : sc_event_list
11612027Sjungma@eit.uni-kl.de//
11712027Sjungma@eit.uni-kl.de//  Base class for lists of events.
11812027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
11912027Sjungma@eit.uni-kl.de
12012027Sjungma@eit.uni-kl.declass sc_event_list
12112027Sjungma@eit.uni-kl.de{
12212027Sjungma@eit.uni-kl.de    friend class sc_process_b;
12312027Sjungma@eit.uni-kl.de    friend class sc_method_process;
12412027Sjungma@eit.uni-kl.de    friend class sc_thread_process;
12512027Sjungma@eit.uni-kl.de    friend void sc_thread_cor_fn( void* arg );
12612027Sjungma@eit.uni-kl.de
12712027Sjungma@eit.uni-kl.depublic:
12812027Sjungma@eit.uni-kl.de    sc_event_list( const sc_event_list& );
12912027Sjungma@eit.uni-kl.de    sc_event_list& operator = ( const sc_event_list& );
13012027Sjungma@eit.uni-kl.de
13112027Sjungma@eit.uni-kl.de    int size() const;
13212027Sjungma@eit.uni-kl.de
13312027Sjungma@eit.uni-kl.deprotected:
13412027Sjungma@eit.uni-kl.de
13512027Sjungma@eit.uni-kl.de    void push_back( const sc_event& );
13612027Sjungma@eit.uni-kl.de    void push_back( const sc_event_list& );
13712027Sjungma@eit.uni-kl.de
13812027Sjungma@eit.uni-kl.de    explicit
13912027Sjungma@eit.uni-kl.de    sc_event_list( bool and_list_, bool auto_delete_ = false );
14012027Sjungma@eit.uni-kl.de
14112027Sjungma@eit.uni-kl.de    sc_event_list( const sc_event&,
14212027Sjungma@eit.uni-kl.de                   bool and_list_,
14312027Sjungma@eit.uni-kl.de                   bool auto_delete_ = false );
14412027Sjungma@eit.uni-kl.de
14512027Sjungma@eit.uni-kl.de    ~sc_event_list();
14612027Sjungma@eit.uni-kl.de
14712027Sjungma@eit.uni-kl.de    void swap( sc_event_list& );
14812027Sjungma@eit.uni-kl.de    void move_from( const sc_event_list& );
14912027Sjungma@eit.uni-kl.de
15012027Sjungma@eit.uni-kl.de    bool and_list() const;
15112027Sjungma@eit.uni-kl.de
15212027Sjungma@eit.uni-kl.de    void add_dynamic( sc_method_handle ) const;
15312027Sjungma@eit.uni-kl.de    void add_dynamic( sc_thread_handle ) const;
15412027Sjungma@eit.uni-kl.de    void remove_dynamic( sc_method_handle, const sc_event* ) const;
15512027Sjungma@eit.uni-kl.de    void remove_dynamic( sc_thread_handle, const sc_event* ) const;
15612027Sjungma@eit.uni-kl.de
15712027Sjungma@eit.uni-kl.de    bool busy()        const;
15812027Sjungma@eit.uni-kl.de    bool temporary()   const;
15912027Sjungma@eit.uni-kl.de    void auto_delete() const;
16012027Sjungma@eit.uni-kl.de
16112027Sjungma@eit.uni-kl.de    void report_premature_destruction() const;
16212027Sjungma@eit.uni-kl.de    void report_invalid_modification()  const;
16312027Sjungma@eit.uni-kl.de
16412027Sjungma@eit.uni-kl.deprivate:
16512027Sjungma@eit.uni-kl.de
16612027Sjungma@eit.uni-kl.de    std::vector<const sc_event*> m_events;
16712027Sjungma@eit.uni-kl.de    bool                         m_and_list;
16812027Sjungma@eit.uni-kl.de    bool                         m_auto_delete;
16912027Sjungma@eit.uni-kl.de    mutable unsigned             m_busy;
17012027Sjungma@eit.uni-kl.de};
17112027Sjungma@eit.uni-kl.de
17212027Sjungma@eit.uni-kl.de
17312027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
17412027Sjungma@eit.uni-kl.de//  CLASS : sc_event_and_list
17512027Sjungma@eit.uni-kl.de//
17612027Sjungma@eit.uni-kl.de//  AND list of events.
17712027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
17812027Sjungma@eit.uni-kl.de
17912027Sjungma@eit.uni-kl.declass sc_event_and_list
18012027Sjungma@eit.uni-kl.de: public sc_event_list
18112027Sjungma@eit.uni-kl.de{
18212027Sjungma@eit.uni-kl.de    friend class sc_event;
18312027Sjungma@eit.uni-kl.de    friend class sc_event_expr<sc_event_and_list>;
18412027Sjungma@eit.uni-kl.de    friend class sc_process_b;
18512027Sjungma@eit.uni-kl.de    friend class sc_method_process;
18612027Sjungma@eit.uni-kl.de    friend class sc_thread_process;
18712027Sjungma@eit.uni-kl.de
18812027Sjungma@eit.uni-kl.deprotected:
18912027Sjungma@eit.uni-kl.de
19012027Sjungma@eit.uni-kl.de    explicit
19112027Sjungma@eit.uni-kl.de    sc_event_and_list( bool auto_delete_ );
19212027Sjungma@eit.uni-kl.de
19312027Sjungma@eit.uni-kl.depublic:
19412027Sjungma@eit.uni-kl.de
19512027Sjungma@eit.uni-kl.de    sc_event_and_list();
19612027Sjungma@eit.uni-kl.de    sc_event_and_list( const sc_event& );
19712027Sjungma@eit.uni-kl.de
19812027Sjungma@eit.uni-kl.de    void swap( sc_event_and_list& );
19912027Sjungma@eit.uni-kl.de    sc_event_and_list& operator &= ( const sc_event& );
20012027Sjungma@eit.uni-kl.de    sc_event_and_list& operator &= ( const sc_event_and_list & );
20112027Sjungma@eit.uni-kl.de
20212027Sjungma@eit.uni-kl.de    sc_event_expr<sc_event_and_list>  operator & ( const sc_event& );
20312027Sjungma@eit.uni-kl.de    sc_event_expr<sc_event_and_list>  operator & ( const sc_event_and_list& );
20412027Sjungma@eit.uni-kl.de};
20512027Sjungma@eit.uni-kl.de
20612027Sjungma@eit.uni-kl.detypedef sc_event_expr<sc_event_and_list> sc_event_and_expr;
20712027Sjungma@eit.uni-kl.de
20812027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
20912027Sjungma@eit.uni-kl.de//  CLASS : sc_event_or_list
21012027Sjungma@eit.uni-kl.de//
21112027Sjungma@eit.uni-kl.de//  OR list of events.
21212027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
21312027Sjungma@eit.uni-kl.de
21412027Sjungma@eit.uni-kl.declass sc_event_or_list
21512027Sjungma@eit.uni-kl.de: public sc_event_list
21612027Sjungma@eit.uni-kl.de{
21712027Sjungma@eit.uni-kl.de    friend class sc_event;
21812027Sjungma@eit.uni-kl.de    friend class sc_event_expr<sc_event_or_list>;
21912027Sjungma@eit.uni-kl.de    friend class sc_process_b;
22012027Sjungma@eit.uni-kl.de    friend class sc_method_process;
22112027Sjungma@eit.uni-kl.de    friend class sc_thread_process;
22212027Sjungma@eit.uni-kl.de
22312027Sjungma@eit.uni-kl.deprotected:
22412027Sjungma@eit.uni-kl.de
22512027Sjungma@eit.uni-kl.de    explicit
22612027Sjungma@eit.uni-kl.de    sc_event_or_list( bool auto_delete_ );
22712027Sjungma@eit.uni-kl.de
22812027Sjungma@eit.uni-kl.depublic:
22912027Sjungma@eit.uni-kl.de    sc_event_or_list();
23012027Sjungma@eit.uni-kl.de    sc_event_or_list( const sc_event& );
23112027Sjungma@eit.uni-kl.de    void swap( sc_event_or_list& );
23212027Sjungma@eit.uni-kl.de    sc_event_or_list& operator |= ( const sc_event& );
23312027Sjungma@eit.uni-kl.de    sc_event_or_list& operator |= ( const sc_event_or_list & );
23412027Sjungma@eit.uni-kl.de    sc_event_expr<sc_event_or_list>  operator | ( const sc_event& ) const;
23512027Sjungma@eit.uni-kl.de    sc_event_expr<sc_event_or_list>  operator | ( const sc_event_or_list& ) const;
23612027Sjungma@eit.uni-kl.de};
23712027Sjungma@eit.uni-kl.de
23812027Sjungma@eit.uni-kl.detypedef sc_event_expr<sc_event_or_list> sc_event_or_expr;
23912027Sjungma@eit.uni-kl.de
24012027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
24112027Sjungma@eit.uni-kl.de//  CLASS : sc_event
24212027Sjungma@eit.uni-kl.de//
24312027Sjungma@eit.uni-kl.de//  The event class.
24412027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
24512027Sjungma@eit.uni-kl.de
24612027Sjungma@eit.uni-kl.declass sc_event
24712027Sjungma@eit.uni-kl.de{
24812027Sjungma@eit.uni-kl.de    friend class sc_clock;
24912027Sjungma@eit.uni-kl.de    friend class sc_event_list;
25012027Sjungma@eit.uni-kl.de    friend class sc_event_timed;
25112027Sjungma@eit.uni-kl.de    friend class sc_simcontext;
25212027Sjungma@eit.uni-kl.de    friend class sc_object;
25312027Sjungma@eit.uni-kl.de    friend class sc_process_b;
25412027Sjungma@eit.uni-kl.de    friend class sc_method_process;
25512027Sjungma@eit.uni-kl.de    friend class sc_thread_process;
25612027Sjungma@eit.uni-kl.de    template<typename IF, sc_writer_policy POL> friend class sc_signal;
25712027Sjungma@eit.uni-kl.de    friend void sc_thread_cor_fn( void* arg );
25812027Sjungma@eit.uni-kl.de
25912027Sjungma@eit.uni-kl.depublic:
26012027Sjungma@eit.uni-kl.de
26112027Sjungma@eit.uni-kl.de    sc_event();
26212027Sjungma@eit.uni-kl.de    sc_event( const char* name );
26312027Sjungma@eit.uni-kl.de    ~sc_event();
26412027Sjungma@eit.uni-kl.de
26512027Sjungma@eit.uni-kl.de    void cancel();
26612027Sjungma@eit.uni-kl.de
26712027Sjungma@eit.uni-kl.de    const char* name() const             { return m_name.c_str(); }
26812027Sjungma@eit.uni-kl.de    const char* basename() const;
26912027Sjungma@eit.uni-kl.de    sc_object* get_parent_object() const { return m_parent_p; }
27012027Sjungma@eit.uni-kl.de    bool in_hierarchy() const            { return m_name.length() != 0; }
27112027Sjungma@eit.uni-kl.de
27212027Sjungma@eit.uni-kl.de    void notify();
27312027Sjungma@eit.uni-kl.de    void notify( const sc_time& );
27412027Sjungma@eit.uni-kl.de    void notify( double, sc_time_unit );
27512027Sjungma@eit.uni-kl.de
27612027Sjungma@eit.uni-kl.de    void notify_delayed();
27712027Sjungma@eit.uni-kl.de    void notify_delayed( const sc_time& );
27812027Sjungma@eit.uni-kl.de    void notify_delayed( double, sc_time_unit );
27912027Sjungma@eit.uni-kl.de
28012027Sjungma@eit.uni-kl.de    sc_event_or_expr  operator | ( const sc_event& ) const;
28112027Sjungma@eit.uni-kl.de    sc_event_or_expr  operator | ( const sc_event_or_list& ) const;
28212027Sjungma@eit.uni-kl.de    sc_event_and_expr operator & ( const sc_event& ) const;
28312027Sjungma@eit.uni-kl.de    sc_event_and_expr operator & ( const sc_event_and_list& ) const;
28412027Sjungma@eit.uni-kl.de
28512027Sjungma@eit.uni-kl.de
28612027Sjungma@eit.uni-kl.deprivate:
28712027Sjungma@eit.uni-kl.de
28812027Sjungma@eit.uni-kl.de    void add_static( sc_method_handle ) const;
28912027Sjungma@eit.uni-kl.de    void add_static( sc_thread_handle ) const;
29012027Sjungma@eit.uni-kl.de    void add_dynamic( sc_method_handle ) const;
29112027Sjungma@eit.uni-kl.de    void add_dynamic( sc_thread_handle ) const;
29212027Sjungma@eit.uni-kl.de
29312027Sjungma@eit.uni-kl.de    void notify_internal( const sc_time& );
29412027Sjungma@eit.uni-kl.de    void notify_next_delta();
29512027Sjungma@eit.uni-kl.de
29612027Sjungma@eit.uni-kl.de    bool remove_static( sc_method_handle ) const;
29712027Sjungma@eit.uni-kl.de    bool remove_static( sc_thread_handle ) const;
29812027Sjungma@eit.uni-kl.de    bool remove_dynamic( sc_method_handle ) const;
29912027Sjungma@eit.uni-kl.de    bool remove_dynamic( sc_thread_handle ) const;
30012027Sjungma@eit.uni-kl.de
30112027Sjungma@eit.uni-kl.de    void register_event( const char* name );
30212027Sjungma@eit.uni-kl.de    void reset();
30312027Sjungma@eit.uni-kl.de
30412027Sjungma@eit.uni-kl.de    void trigger();
30512027Sjungma@eit.uni-kl.de
30612027Sjungma@eit.uni-kl.deprivate:
30712027Sjungma@eit.uni-kl.de
30812027Sjungma@eit.uni-kl.de    enum notify_t { NONE, DELTA, TIMED };
30912027Sjungma@eit.uni-kl.de
31012027Sjungma@eit.uni-kl.de    std::string     m_name;     // name of object.
31112027Sjungma@eit.uni-kl.de    sc_object*      m_parent_p; // parent sc_object for this event.
31212027Sjungma@eit.uni-kl.de    sc_simcontext*  m_simc;
31312027Sjungma@eit.uni-kl.de    notify_t        m_notify_type;
31412027Sjungma@eit.uni-kl.de    int             m_delta_event_index;
31512027Sjungma@eit.uni-kl.de    sc_event_timed* m_timed;
31612027Sjungma@eit.uni-kl.de
31712027Sjungma@eit.uni-kl.de    mutable std::vector<sc_method_handle> m_methods_static;
31812027Sjungma@eit.uni-kl.de    mutable std::vector<sc_method_handle> m_methods_dynamic;
31912027Sjungma@eit.uni-kl.de    mutable std::vector<sc_thread_handle> m_threads_static;
32012027Sjungma@eit.uni-kl.de    mutable std::vector<sc_thread_handle> m_threads_dynamic;
32112027Sjungma@eit.uni-kl.de
32212027Sjungma@eit.uni-kl.deprivate:
32312027Sjungma@eit.uni-kl.de
32412027Sjungma@eit.uni-kl.de    // disabled
32512027Sjungma@eit.uni-kl.de    sc_event( const sc_event& );
32612027Sjungma@eit.uni-kl.de    sc_event& operator = ( const sc_event& );
32712027Sjungma@eit.uni-kl.de};
32812027Sjungma@eit.uni-kl.de
32912027Sjungma@eit.uni-kl.de#define SC_KERNEL_EVENT_PREFIX "$$$$kernel_event$$$$_"
33012027Sjungma@eit.uni-kl.de
33112027Sjungma@eit.uni-kl.deextern sc_event sc_non_event; // Event that never happens.
33212027Sjungma@eit.uni-kl.de
33312027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
33412027Sjungma@eit.uni-kl.de//  CLASS : sc_event_timed
33512027Sjungma@eit.uni-kl.de//
33612027Sjungma@eit.uni-kl.de//  Class for storing the time to notify a timed event.
33712027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
33812027Sjungma@eit.uni-kl.de
33912027Sjungma@eit.uni-kl.declass sc_event_timed
34012027Sjungma@eit.uni-kl.de{
34112027Sjungma@eit.uni-kl.de    friend class sc_event;
34212027Sjungma@eit.uni-kl.de    friend class sc_simcontext;
34312027Sjungma@eit.uni-kl.de
34412027Sjungma@eit.uni-kl.de    friend int sc_notify_time_compare( const void*, const void* );
34512027Sjungma@eit.uni-kl.de
34612027Sjungma@eit.uni-kl.deprivate:
34712027Sjungma@eit.uni-kl.de
34812027Sjungma@eit.uni-kl.de    sc_event_timed( sc_event* e, const sc_time& t )
34912027Sjungma@eit.uni-kl.de        : m_event( e ), m_notify_time( t )
35012027Sjungma@eit.uni-kl.de        {}
35112027Sjungma@eit.uni-kl.de
35212027Sjungma@eit.uni-kl.de    ~sc_event_timed()
35312027Sjungma@eit.uni-kl.de        { if( m_event != 0 ) { m_event->m_timed = 0; } }
35412027Sjungma@eit.uni-kl.de
35512027Sjungma@eit.uni-kl.de    sc_event* event() const
35612027Sjungma@eit.uni-kl.de        { return m_event; }
35712027Sjungma@eit.uni-kl.de
35812027Sjungma@eit.uni-kl.de    const sc_time& notify_time() const
35912027Sjungma@eit.uni-kl.de        { return m_notify_time; }
36012027Sjungma@eit.uni-kl.de
36112027Sjungma@eit.uni-kl.de    static void* operator new( std::size_t )
36212027Sjungma@eit.uni-kl.de        { return allocate(); }
36312027Sjungma@eit.uni-kl.de
36412027Sjungma@eit.uni-kl.de    static void operator delete( void* p, std::size_t )
36512027Sjungma@eit.uni-kl.de        { deallocate( p ); }
36612027Sjungma@eit.uni-kl.de
36712027Sjungma@eit.uni-kl.deprivate:
36812027Sjungma@eit.uni-kl.de
36912027Sjungma@eit.uni-kl.de    // dedicated memory management
37012027Sjungma@eit.uni-kl.de    static void* allocate();
37112027Sjungma@eit.uni-kl.de    static void  deallocate( void* );
37212027Sjungma@eit.uni-kl.de
37312027Sjungma@eit.uni-kl.deprivate:
37412027Sjungma@eit.uni-kl.de
37512027Sjungma@eit.uni-kl.de    sc_event* m_event;
37612027Sjungma@eit.uni-kl.de    sc_time   m_notify_time;
37712027Sjungma@eit.uni-kl.de
37812027Sjungma@eit.uni-kl.deprivate:
37912027Sjungma@eit.uni-kl.de
38012027Sjungma@eit.uni-kl.de    // disabled
38112027Sjungma@eit.uni-kl.de    sc_event_timed();
38212027Sjungma@eit.uni-kl.de    sc_event_timed( const sc_event_timed& );
38312027Sjungma@eit.uni-kl.de    sc_event_timed& operator = ( const sc_event_timed& );
38412027Sjungma@eit.uni-kl.de};
38512027Sjungma@eit.uni-kl.de
38612027Sjungma@eit.uni-kl.de
38712027Sjungma@eit.uni-kl.de// IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
38812027Sjungma@eit.uni-kl.de
38912027Sjungma@eit.uni-kl.deinline
39012027Sjungma@eit.uni-kl.devoid
39112027Sjungma@eit.uni-kl.desc_event::notify( double v, sc_time_unit tu )
39212027Sjungma@eit.uni-kl.de{
39312027Sjungma@eit.uni-kl.de    notify( sc_time( v, tu, m_simc ) );
39412027Sjungma@eit.uni-kl.de}
39512027Sjungma@eit.uni-kl.de
39612027Sjungma@eit.uni-kl.de
39712027Sjungma@eit.uni-kl.deinline
39812027Sjungma@eit.uni-kl.devoid
39912027Sjungma@eit.uni-kl.desc_event::notify_internal( const sc_time& t )
40012027Sjungma@eit.uni-kl.de{
40112027Sjungma@eit.uni-kl.de    if( t == SC_ZERO_TIME ) {
40212027Sjungma@eit.uni-kl.de        // add this event to the delta events set
40312027Sjungma@eit.uni-kl.de        m_delta_event_index = m_simc->add_delta_event( this );
40412027Sjungma@eit.uni-kl.de        m_notify_type = DELTA;
40512027Sjungma@eit.uni-kl.de    } else {
40612027Sjungma@eit.uni-kl.de        sc_event_timed* et =
40712027Sjungma@eit.uni-kl.de		new sc_event_timed( this, m_simc->time_stamp() + t );
40812027Sjungma@eit.uni-kl.de        m_simc->add_timed_event( et );
40912027Sjungma@eit.uni-kl.de        m_timed = et;
41012027Sjungma@eit.uni-kl.de        m_notify_type = TIMED;
41112027Sjungma@eit.uni-kl.de    }
41212027Sjungma@eit.uni-kl.de}
41312027Sjungma@eit.uni-kl.de
41412027Sjungma@eit.uni-kl.deinline
41512027Sjungma@eit.uni-kl.devoid
41612027Sjungma@eit.uni-kl.desc_event::notify_next_delta()
41712027Sjungma@eit.uni-kl.de{
41812027Sjungma@eit.uni-kl.de    if( m_notify_type != NONE ) {
41912027Sjungma@eit.uni-kl.de        SC_REPORT_ERROR( SC_ID_NOTIFY_DELAYED_, 0 );
42012027Sjungma@eit.uni-kl.de    }
42112027Sjungma@eit.uni-kl.de    // add this event to the delta events set
42212027Sjungma@eit.uni-kl.de    m_delta_event_index = m_simc->add_delta_event( this );
42312027Sjungma@eit.uni-kl.de    m_notify_type = DELTA;
42412027Sjungma@eit.uni-kl.de}
42512027Sjungma@eit.uni-kl.de
42612027Sjungma@eit.uni-kl.deinline
42712027Sjungma@eit.uni-kl.devoid
42812027Sjungma@eit.uni-kl.desc_event::notify_delayed( double v, sc_time_unit tu )
42912027Sjungma@eit.uni-kl.de{
43012027Sjungma@eit.uni-kl.de    notify_delayed( sc_time( v, tu, m_simc ) );
43112027Sjungma@eit.uni-kl.de}
43212027Sjungma@eit.uni-kl.de
43312027Sjungma@eit.uni-kl.de
43412027Sjungma@eit.uni-kl.deinline
43512027Sjungma@eit.uni-kl.devoid
43612027Sjungma@eit.uni-kl.desc_event::add_static( sc_method_handle method_h ) const
43712027Sjungma@eit.uni-kl.de{
43812027Sjungma@eit.uni-kl.de    m_methods_static.push_back( method_h );
43912027Sjungma@eit.uni-kl.de}
44012027Sjungma@eit.uni-kl.de
44112027Sjungma@eit.uni-kl.deinline
44212027Sjungma@eit.uni-kl.devoid
44312027Sjungma@eit.uni-kl.desc_event::add_static( sc_thread_handle thread_h ) const
44412027Sjungma@eit.uni-kl.de{
44512027Sjungma@eit.uni-kl.de    m_threads_static.push_back( thread_h );
44612027Sjungma@eit.uni-kl.de}
44712027Sjungma@eit.uni-kl.de
44812027Sjungma@eit.uni-kl.deinline
44912027Sjungma@eit.uni-kl.devoid
45012027Sjungma@eit.uni-kl.desc_event::add_dynamic( sc_method_handle method_h ) const
45112027Sjungma@eit.uni-kl.de{
45212027Sjungma@eit.uni-kl.de    m_methods_dynamic.push_back( method_h );
45312027Sjungma@eit.uni-kl.de}
45412027Sjungma@eit.uni-kl.de
45512027Sjungma@eit.uni-kl.deinline
45612027Sjungma@eit.uni-kl.devoid
45712027Sjungma@eit.uni-kl.desc_event::add_dynamic( sc_thread_handle thread_h ) const
45812027Sjungma@eit.uni-kl.de{
45912027Sjungma@eit.uni-kl.de    m_threads_dynamic.push_back( thread_h );
46012027Sjungma@eit.uni-kl.de}
46112027Sjungma@eit.uni-kl.de
46212027Sjungma@eit.uni-kl.de
46312027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
46412027Sjungma@eit.uni-kl.de//  Deprecated functional notation for notifying events.
46512027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
46612027Sjungma@eit.uni-kl.de
46712027Sjungma@eit.uni-kl.deextern void notify( sc_event& e );
46812027Sjungma@eit.uni-kl.deextern void notify( const sc_time& t, sc_event& e );
46912027Sjungma@eit.uni-kl.deextern void notify( double v, sc_time_unit tu, sc_event& e );
47012027Sjungma@eit.uni-kl.de
47112027Sjungma@eit.uni-kl.de
47212027Sjungma@eit.uni-kl.de// IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
47312027Sjungma@eit.uni-kl.de
47412027Sjungma@eit.uni-kl.deinline
47512027Sjungma@eit.uni-kl.desc_event_list::sc_event_list( bool and_list_, bool auto_delete_ )
47612027Sjungma@eit.uni-kl.de  : m_events()
47712027Sjungma@eit.uni-kl.de  , m_and_list( and_list_ )
47812027Sjungma@eit.uni-kl.de  , m_auto_delete( auto_delete_ )
47912027Sjungma@eit.uni-kl.de  , m_busy( 0 )
48012027Sjungma@eit.uni-kl.de{
48112027Sjungma@eit.uni-kl.de}
48212027Sjungma@eit.uni-kl.de
48312027Sjungma@eit.uni-kl.deinline
48412027Sjungma@eit.uni-kl.desc_event_list::sc_event_list( const sc_event& e,
48512027Sjungma@eit.uni-kl.de                              bool and_list_,
48612027Sjungma@eit.uni-kl.de                              bool auto_delete_ )
48712027Sjungma@eit.uni-kl.de  : m_events()
48812027Sjungma@eit.uni-kl.de  , m_and_list( and_list_ )
48912027Sjungma@eit.uni-kl.de  , m_auto_delete( auto_delete_ )
49012027Sjungma@eit.uni-kl.de  , m_busy(0)
49112027Sjungma@eit.uni-kl.de{
49212027Sjungma@eit.uni-kl.de    m_events.push_back( &e );
49312027Sjungma@eit.uni-kl.de}
49412027Sjungma@eit.uni-kl.de
49512027Sjungma@eit.uni-kl.deinline
49612027Sjungma@eit.uni-kl.desc_event_list::sc_event_list( sc_event_list const & that )
49712027Sjungma@eit.uni-kl.de  : m_events()
49812027Sjungma@eit.uni-kl.de  , m_and_list( that.m_and_list )
49912027Sjungma@eit.uni-kl.de  , m_auto_delete( false )
50012027Sjungma@eit.uni-kl.de  , m_busy( 0 )
50112027Sjungma@eit.uni-kl.de{
50212027Sjungma@eit.uni-kl.de    move_from( that );
50312027Sjungma@eit.uni-kl.de    that.auto_delete(); // free automatic lists
50412027Sjungma@eit.uni-kl.de}
50512027Sjungma@eit.uni-kl.de
50612027Sjungma@eit.uni-kl.deinline
50712027Sjungma@eit.uni-kl.desc_event_list&
50812027Sjungma@eit.uni-kl.desc_event_list::operator=( sc_event_list const & that )
50912027Sjungma@eit.uni-kl.de{
51012027Sjungma@eit.uni-kl.de    if( m_busy )
51112027Sjungma@eit.uni-kl.de        report_invalid_modification();
51212027Sjungma@eit.uni-kl.de
51312027Sjungma@eit.uni-kl.de    move_from( that );
51412027Sjungma@eit.uni-kl.de    that.auto_delete(); // free automatic lists
51512027Sjungma@eit.uni-kl.de
51612027Sjungma@eit.uni-kl.de    return *this;
51712027Sjungma@eit.uni-kl.de}
51812027Sjungma@eit.uni-kl.de
51912027Sjungma@eit.uni-kl.deinline
52012027Sjungma@eit.uni-kl.desc_event_list::~sc_event_list()
52112027Sjungma@eit.uni-kl.de{
52212027Sjungma@eit.uni-kl.de    if( m_busy )
52312027Sjungma@eit.uni-kl.de        report_premature_destruction();
52412027Sjungma@eit.uni-kl.de}
52512027Sjungma@eit.uni-kl.de
52612027Sjungma@eit.uni-kl.deinline
52712027Sjungma@eit.uni-kl.devoid
52812027Sjungma@eit.uni-kl.desc_event_list::swap( sc_event_list& that )
52912027Sjungma@eit.uni-kl.de{
53012027Sjungma@eit.uni-kl.de    if( busy() || that.busy() )
53112027Sjungma@eit.uni-kl.de        report_invalid_modification();
53212027Sjungma@eit.uni-kl.de    m_events.swap( that.m_events );
53312027Sjungma@eit.uni-kl.de}
53412027Sjungma@eit.uni-kl.de
53512027Sjungma@eit.uni-kl.deinline
53612027Sjungma@eit.uni-kl.devoid
53712027Sjungma@eit.uni-kl.desc_event_list::move_from( sc_event_list const&  that )
53812027Sjungma@eit.uni-kl.de{
53912027Sjungma@eit.uni-kl.de    if( that.temporary() ) {
54012027Sjungma@eit.uni-kl.de        swap( const_cast<sc_event_list&>(that) ); // move from source
54112027Sjungma@eit.uni-kl.de    } else {
54212027Sjungma@eit.uni-kl.de        m_events = that.m_events;                 // copy from source
54312027Sjungma@eit.uni-kl.de    }
54412027Sjungma@eit.uni-kl.de}
54512027Sjungma@eit.uni-kl.de
54612027Sjungma@eit.uni-kl.deinline
54712027Sjungma@eit.uni-kl.deint
54812027Sjungma@eit.uni-kl.desc_event_list::size() const
54912027Sjungma@eit.uni-kl.de{
55012027Sjungma@eit.uni-kl.de    return m_events.size();
55112027Sjungma@eit.uni-kl.de}
55212027Sjungma@eit.uni-kl.de
55312027Sjungma@eit.uni-kl.deinline
55412027Sjungma@eit.uni-kl.debool
55512027Sjungma@eit.uni-kl.desc_event_list::and_list() const
55612027Sjungma@eit.uni-kl.de{
55712027Sjungma@eit.uni-kl.de    return m_and_list;
55812027Sjungma@eit.uni-kl.de}
55912027Sjungma@eit.uni-kl.de
56012027Sjungma@eit.uni-kl.de
56112027Sjungma@eit.uni-kl.deinline
56212027Sjungma@eit.uni-kl.debool
56312027Sjungma@eit.uni-kl.desc_event_list::busy() const
56412027Sjungma@eit.uni-kl.de{
56512027Sjungma@eit.uni-kl.de    return m_busy != 0;
56612027Sjungma@eit.uni-kl.de}
56712027Sjungma@eit.uni-kl.de
56812027Sjungma@eit.uni-kl.de
56912027Sjungma@eit.uni-kl.deinline
57012027Sjungma@eit.uni-kl.debool
57112027Sjungma@eit.uni-kl.desc_event_list::temporary() const
57212027Sjungma@eit.uni-kl.de{
57312027Sjungma@eit.uni-kl.de    return m_auto_delete && ! m_busy;
57412027Sjungma@eit.uni-kl.de}
57512027Sjungma@eit.uni-kl.de
57612027Sjungma@eit.uni-kl.deinline
57712027Sjungma@eit.uni-kl.devoid
57812027Sjungma@eit.uni-kl.desc_event_list::auto_delete() const
57912027Sjungma@eit.uni-kl.de{
58012027Sjungma@eit.uni-kl.de    if( m_busy ) {
58112027Sjungma@eit.uni-kl.de        --m_busy;
58212027Sjungma@eit.uni-kl.de    }
58312027Sjungma@eit.uni-kl.de    if( ! m_busy && m_auto_delete ) {
58412027Sjungma@eit.uni-kl.de        delete this;
58512027Sjungma@eit.uni-kl.de    }
58612027Sjungma@eit.uni-kl.de}
58712027Sjungma@eit.uni-kl.de
58812027Sjungma@eit.uni-kl.de
58912027Sjungma@eit.uni-kl.de
59012027Sjungma@eit.uni-kl.de// IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
59112027Sjungma@eit.uni-kl.de
59212027Sjungma@eit.uni-kl.deinline
59312027Sjungma@eit.uni-kl.desc_event_or_list::sc_event_or_list()
59412027Sjungma@eit.uni-kl.de  : sc_event_list( false )
59512027Sjungma@eit.uni-kl.de{}
59612027Sjungma@eit.uni-kl.de
59712027Sjungma@eit.uni-kl.deinline
59812027Sjungma@eit.uni-kl.desc_event_or_list::sc_event_or_list( const sc_event& e )
59912027Sjungma@eit.uni-kl.de: sc_event_list( false )
60012027Sjungma@eit.uni-kl.de{
60112027Sjungma@eit.uni-kl.de  push_back( e );
60212027Sjungma@eit.uni-kl.de}
60312027Sjungma@eit.uni-kl.de
60412027Sjungma@eit.uni-kl.deinline
60512027Sjungma@eit.uni-kl.desc_event_or_list::sc_event_or_list( bool auto_delete_ )
60612027Sjungma@eit.uni-kl.de: sc_event_list( false, auto_delete_ )
60712027Sjungma@eit.uni-kl.de{}
60812027Sjungma@eit.uni-kl.de
60912027Sjungma@eit.uni-kl.deinline
61012027Sjungma@eit.uni-kl.desc_event_or_list&
61112027Sjungma@eit.uni-kl.desc_event_or_list::operator |= ( const sc_event& e )
61212027Sjungma@eit.uni-kl.de{
61312027Sjungma@eit.uni-kl.de    if( busy() )
61412027Sjungma@eit.uni-kl.de        report_invalid_modification();
61512027Sjungma@eit.uni-kl.de
61612027Sjungma@eit.uni-kl.de    push_back( e );
61712027Sjungma@eit.uni-kl.de    return *this;
61812027Sjungma@eit.uni-kl.de}
61912027Sjungma@eit.uni-kl.de
62012027Sjungma@eit.uni-kl.deinline
62112027Sjungma@eit.uni-kl.desc_event_or_list&
62212027Sjungma@eit.uni-kl.desc_event_or_list::operator |= ( const sc_event_or_list& el )
62312027Sjungma@eit.uni-kl.de{
62412027Sjungma@eit.uni-kl.de    if( busy() )
62512027Sjungma@eit.uni-kl.de        report_invalid_modification();
62612027Sjungma@eit.uni-kl.de
62712027Sjungma@eit.uni-kl.de    push_back( el );
62812027Sjungma@eit.uni-kl.de    return *this;
62912027Sjungma@eit.uni-kl.de}
63012027Sjungma@eit.uni-kl.de
63112027Sjungma@eit.uni-kl.deinline
63212027Sjungma@eit.uni-kl.desc_event_or_expr
63312027Sjungma@eit.uni-kl.desc_event_or_list::operator | ( const sc_event& e2 ) const
63412027Sjungma@eit.uni-kl.de{
63512027Sjungma@eit.uni-kl.de    sc_event_or_expr expr;
63612027Sjungma@eit.uni-kl.de    expr.push_back( *this );
63712027Sjungma@eit.uni-kl.de    expr.push_back( e2 );
63812027Sjungma@eit.uni-kl.de    return expr;
63912027Sjungma@eit.uni-kl.de}
64012027Sjungma@eit.uni-kl.de
64112027Sjungma@eit.uni-kl.deinline
64212027Sjungma@eit.uni-kl.desc_event_or_expr
64312027Sjungma@eit.uni-kl.desc_event_or_list::operator | ( const sc_event_or_list& e2 ) const
64412027Sjungma@eit.uni-kl.de{
64512027Sjungma@eit.uni-kl.de    sc_event_or_expr expr;
64612027Sjungma@eit.uni-kl.de    expr.push_back( *this );
64712027Sjungma@eit.uni-kl.de    expr.push_back( e2 );
64812027Sjungma@eit.uni-kl.de    return expr;
64912027Sjungma@eit.uni-kl.de}
65012027Sjungma@eit.uni-kl.de
65112027Sjungma@eit.uni-kl.de
65212027Sjungma@eit.uni-kl.de// sc_event
65312027Sjungma@eit.uni-kl.de
65412027Sjungma@eit.uni-kl.deinline
65512027Sjungma@eit.uni-kl.desc_event_or_expr
65612027Sjungma@eit.uni-kl.desc_event::operator | ( const sc_event& e2 ) const
65712027Sjungma@eit.uni-kl.de{
65812027Sjungma@eit.uni-kl.de    sc_event_or_expr expr;
65912027Sjungma@eit.uni-kl.de    expr.push_back( *this );
66012027Sjungma@eit.uni-kl.de    expr.push_back( e2 );
66112027Sjungma@eit.uni-kl.de    return expr;
66212027Sjungma@eit.uni-kl.de}
66312027Sjungma@eit.uni-kl.de
66412027Sjungma@eit.uni-kl.deinline
66512027Sjungma@eit.uni-kl.desc_event_or_expr
66612027Sjungma@eit.uni-kl.desc_event::operator | ( const sc_event_or_list& e2 ) const
66712027Sjungma@eit.uni-kl.de{
66812027Sjungma@eit.uni-kl.de    sc_event_or_expr expr;
66912027Sjungma@eit.uni-kl.de    expr.push_back( *this );
67012027Sjungma@eit.uni-kl.de    expr.push_back( e2 );
67112027Sjungma@eit.uni-kl.de    return expr;
67212027Sjungma@eit.uni-kl.de}
67312027Sjungma@eit.uni-kl.de
67412027Sjungma@eit.uni-kl.de// sc_event_expr
67512027Sjungma@eit.uni-kl.de
67612027Sjungma@eit.uni-kl.deinline
67712027Sjungma@eit.uni-kl.desc_event_or_expr
67812027Sjungma@eit.uni-kl.deoperator | ( sc_event_or_expr expr, sc_event const & e )
67912027Sjungma@eit.uni-kl.de{
68012027Sjungma@eit.uni-kl.de    expr.push_back( e );
68112027Sjungma@eit.uni-kl.de    return expr;
68212027Sjungma@eit.uni-kl.de}
68312027Sjungma@eit.uni-kl.de
68412027Sjungma@eit.uni-kl.deinline
68512027Sjungma@eit.uni-kl.desc_event_or_expr
68612027Sjungma@eit.uni-kl.deoperator | ( sc_event_or_expr expr, sc_event_or_list const & el )
68712027Sjungma@eit.uni-kl.de{
68812027Sjungma@eit.uni-kl.de    expr.push_back( el );
68912027Sjungma@eit.uni-kl.de    return expr;
69012027Sjungma@eit.uni-kl.de}
69112027Sjungma@eit.uni-kl.de
69212027Sjungma@eit.uni-kl.deinline
69312027Sjungma@eit.uni-kl.devoid
69412027Sjungma@eit.uni-kl.desc_event_or_list::swap( sc_event_or_list & that )
69512027Sjungma@eit.uni-kl.de{
69612027Sjungma@eit.uni-kl.de  sc_event_list::swap( that );
69712027Sjungma@eit.uni-kl.de}
69812027Sjungma@eit.uni-kl.de
69912027Sjungma@eit.uni-kl.de
70012027Sjungma@eit.uni-kl.de
70112027Sjungma@eit.uni-kl.de// IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
70212027Sjungma@eit.uni-kl.de
70312027Sjungma@eit.uni-kl.deinline
70412027Sjungma@eit.uni-kl.desc_event_and_list::sc_event_and_list()
70512027Sjungma@eit.uni-kl.de  : sc_event_list( true )
70612027Sjungma@eit.uni-kl.de{}
70712027Sjungma@eit.uni-kl.de
70812027Sjungma@eit.uni-kl.deinline
70912027Sjungma@eit.uni-kl.desc_event_and_list::sc_event_and_list( const sc_event& e )
71012027Sjungma@eit.uni-kl.de: sc_event_list( true )
71112027Sjungma@eit.uni-kl.de{
71212027Sjungma@eit.uni-kl.de  push_back( e );
71312027Sjungma@eit.uni-kl.de}
71412027Sjungma@eit.uni-kl.de
71512027Sjungma@eit.uni-kl.deinline
71612027Sjungma@eit.uni-kl.desc_event_and_list::sc_event_and_list( bool auto_delete_ )
71712027Sjungma@eit.uni-kl.de: sc_event_list( true, auto_delete_ )
71812027Sjungma@eit.uni-kl.de{}
71912027Sjungma@eit.uni-kl.de
72012027Sjungma@eit.uni-kl.deinline
72112027Sjungma@eit.uni-kl.devoid
72212027Sjungma@eit.uni-kl.desc_event_and_list::swap( sc_event_and_list & that )
72312027Sjungma@eit.uni-kl.de{
72412027Sjungma@eit.uni-kl.de  sc_event_list::swap( that );
72512027Sjungma@eit.uni-kl.de}
72612027Sjungma@eit.uni-kl.de
72712027Sjungma@eit.uni-kl.de
72812027Sjungma@eit.uni-kl.deinline
72912027Sjungma@eit.uni-kl.desc_event_and_list&
73012027Sjungma@eit.uni-kl.desc_event_and_list::operator &= ( const sc_event& e )
73112027Sjungma@eit.uni-kl.de{
73212027Sjungma@eit.uni-kl.de    if( busy() )
73312027Sjungma@eit.uni-kl.de        report_invalid_modification();
73412027Sjungma@eit.uni-kl.de
73512027Sjungma@eit.uni-kl.de    push_back( e );
73612027Sjungma@eit.uni-kl.de    return *this;
73712027Sjungma@eit.uni-kl.de}
73812027Sjungma@eit.uni-kl.de
73912027Sjungma@eit.uni-kl.deinline
74012027Sjungma@eit.uni-kl.desc_event_and_list&
74112027Sjungma@eit.uni-kl.desc_event_and_list::operator &= ( const sc_event_and_list& el )
74212027Sjungma@eit.uni-kl.de{
74312027Sjungma@eit.uni-kl.de    if( busy() )
74412027Sjungma@eit.uni-kl.de        report_invalid_modification();
74512027Sjungma@eit.uni-kl.de
74612027Sjungma@eit.uni-kl.de    push_back( el );
74712027Sjungma@eit.uni-kl.de    return *this;
74812027Sjungma@eit.uni-kl.de}
74912027Sjungma@eit.uni-kl.de
75012027Sjungma@eit.uni-kl.deinline
75112027Sjungma@eit.uni-kl.desc_event_and_expr
75212027Sjungma@eit.uni-kl.desc_event_and_list::operator & ( const sc_event& e )
75312027Sjungma@eit.uni-kl.de{
75412027Sjungma@eit.uni-kl.de    sc_event_and_expr expr;
75512027Sjungma@eit.uni-kl.de    expr.push_back( *this );
75612027Sjungma@eit.uni-kl.de    expr.push_back( e );
75712027Sjungma@eit.uni-kl.de    return expr;
75812027Sjungma@eit.uni-kl.de}
75912027Sjungma@eit.uni-kl.de
76012027Sjungma@eit.uni-kl.deinline
76112027Sjungma@eit.uni-kl.desc_event_and_expr
76212027Sjungma@eit.uni-kl.desc_event_and_list::operator & ( const sc_event_and_list& el )
76312027Sjungma@eit.uni-kl.de{
76412027Sjungma@eit.uni-kl.de    sc_event_and_expr expr;
76512027Sjungma@eit.uni-kl.de    expr.push_back( *this );
76612027Sjungma@eit.uni-kl.de    expr.push_back( el );
76712027Sjungma@eit.uni-kl.de    return expr;
76812027Sjungma@eit.uni-kl.de}
76912027Sjungma@eit.uni-kl.de
77012027Sjungma@eit.uni-kl.de// sc_event
77112027Sjungma@eit.uni-kl.de
77212027Sjungma@eit.uni-kl.deinline
77312027Sjungma@eit.uni-kl.desc_event_and_expr
77412027Sjungma@eit.uni-kl.desc_event::operator & ( const sc_event& e2 ) const
77512027Sjungma@eit.uni-kl.de{
77612027Sjungma@eit.uni-kl.de    sc_event_and_expr expr;
77712027Sjungma@eit.uni-kl.de    expr.push_back( *this );
77812027Sjungma@eit.uni-kl.de    expr.push_back( e2 );
77912027Sjungma@eit.uni-kl.de    return expr;
78012027Sjungma@eit.uni-kl.de}
78112027Sjungma@eit.uni-kl.de
78212027Sjungma@eit.uni-kl.deinline
78312027Sjungma@eit.uni-kl.desc_event_and_expr
78412027Sjungma@eit.uni-kl.desc_event::operator & ( const sc_event_and_list& e2 ) const
78512027Sjungma@eit.uni-kl.de{
78612027Sjungma@eit.uni-kl.de    sc_event_and_expr expr;
78712027Sjungma@eit.uni-kl.de    expr.push_back( *this );
78812027Sjungma@eit.uni-kl.de    expr.push_back( e2 );
78912027Sjungma@eit.uni-kl.de    return expr;
79012027Sjungma@eit.uni-kl.de}
79112027Sjungma@eit.uni-kl.de
79212027Sjungma@eit.uni-kl.de// sc_event_expr
79312027Sjungma@eit.uni-kl.de
79412027Sjungma@eit.uni-kl.deinline
79512027Sjungma@eit.uni-kl.desc_event_and_expr
79612027Sjungma@eit.uni-kl.deoperator & ( sc_event_and_expr expr, sc_event const & e )
79712027Sjungma@eit.uni-kl.de{
79812027Sjungma@eit.uni-kl.de    expr.push_back( e );
79912027Sjungma@eit.uni-kl.de    return expr;
80012027Sjungma@eit.uni-kl.de}
80112027Sjungma@eit.uni-kl.de
80212027Sjungma@eit.uni-kl.deinline
80312027Sjungma@eit.uni-kl.desc_event_and_expr
80412027Sjungma@eit.uni-kl.deoperator & ( sc_event_and_expr expr, sc_event_and_list const & el )
80512027Sjungma@eit.uni-kl.de{
80612027Sjungma@eit.uni-kl.de    expr.push_back( el );
80712027Sjungma@eit.uni-kl.de    return expr;
80812027Sjungma@eit.uni-kl.de}
80912027Sjungma@eit.uni-kl.de
81012027Sjungma@eit.uni-kl.de} // namespace sc_core
81112027Sjungma@eit.uni-kl.de
81212027Sjungma@eit.uni-kl.de// $Log: sc_event.h,v $
81312027Sjungma@eit.uni-kl.de// Revision 1.14  2011/08/29 18:04:32  acg
81412027Sjungma@eit.uni-kl.de//  Philipp A. Hartmann: miscellaneous clean ups.
81512027Sjungma@eit.uni-kl.de//
81612027Sjungma@eit.uni-kl.de// Revision 1.13  2011/08/26 20:46:09  acg
81712027Sjungma@eit.uni-kl.de//  Andy Goodrich: moved the modification log to the end of the file to
81812027Sjungma@eit.uni-kl.de//  eliminate source line number skew when check-ins are done.
81912027Sjungma@eit.uni-kl.de//
82012027Sjungma@eit.uni-kl.de// Revision 1.12  2011/08/24 22:05:50  acg
82112027Sjungma@eit.uni-kl.de//  Torsten Maehne: initialization changes to remove warnings.
82212027Sjungma@eit.uni-kl.de//
82312027Sjungma@eit.uni-kl.de// Revision 1.11  2011/03/12 21:07:51  acg
82412027Sjungma@eit.uni-kl.de//  Andy Goodrich: changes to kernel generated event support.
82512027Sjungma@eit.uni-kl.de//
82612027Sjungma@eit.uni-kl.de// Revision 1.10  2011/03/06 15:55:11  acg
82712027Sjungma@eit.uni-kl.de//  Andy Goodrich: Changes for named events.
82812027Sjungma@eit.uni-kl.de//
82912027Sjungma@eit.uni-kl.de// Revision 1.9  2011/03/05 01:39:21  acg
83012027Sjungma@eit.uni-kl.de//  Andy Goodrich: changes for named events.
83112027Sjungma@eit.uni-kl.de//
83212027Sjungma@eit.uni-kl.de// Revision 1.8  2011/02/18 20:27:14  acg
83312027Sjungma@eit.uni-kl.de//  Andy Goodrich: Updated Copyrights.
83412027Sjungma@eit.uni-kl.de//
83512027Sjungma@eit.uni-kl.de// Revision 1.7  2011/02/13 21:47:37  acg
83612027Sjungma@eit.uni-kl.de//  Andy Goodrich: update copyright notice.
83712027Sjungma@eit.uni-kl.de//
83812027Sjungma@eit.uni-kl.de// Revision 1.6  2011/02/01 21:03:23  acg
83912027Sjungma@eit.uni-kl.de//  Andy Goodrich: new return codes for trigger_dynamic calls.
84012027Sjungma@eit.uni-kl.de//
84112027Sjungma@eit.uni-kl.de// Revision 1.5  2011/01/18 20:10:44  acg
84212027Sjungma@eit.uni-kl.de//  Andy Goodrich: changes for IEEE1666_2011 semantics.
84312027Sjungma@eit.uni-kl.de//
84412027Sjungma@eit.uni-kl.de// Revision 1.4  2010/12/07 20:09:11  acg
84512027Sjungma@eit.uni-kl.de// Andy Goodrich: writer policy fix.
84612027Sjungma@eit.uni-kl.de//
84712027Sjungma@eit.uni-kl.de// Revision 1.3  2009/05/22 16:06:29  acg
84812027Sjungma@eit.uni-kl.de//  Andy Goodrich: process control updates.
84912027Sjungma@eit.uni-kl.de//
85012027Sjungma@eit.uni-kl.de// Revision 1.2  2008/05/22 17:06:25  acg
85112027Sjungma@eit.uni-kl.de//  Andy Goodrich: updated copyright notice to include 2008.
85212027Sjungma@eit.uni-kl.de//
85312027Sjungma@eit.uni-kl.de// Revision 1.1.1.1  2006/12/15 20:20:05  acg
85412027Sjungma@eit.uni-kl.de// SystemC 2.3
85512027Sjungma@eit.uni-kl.de//
85612027Sjungma@eit.uni-kl.de// Revision 1.8  2006/05/26 20:33:16  acg
85712027Sjungma@eit.uni-kl.de//   Andy Goodrich: changes required by additional platform compilers (i.e.,
85812027Sjungma@eit.uni-kl.de//   Microsoft VC++, Sun Forte, HP aCC).
85912027Sjungma@eit.uni-kl.de//
86012027Sjungma@eit.uni-kl.de// Revision 1.7  2006/05/08 17:57:51  acg
86112027Sjungma@eit.uni-kl.de// Andy Goodrich: added David Long's forward declarations for friend
86212027Sjungma@eit.uni-kl.de//   functions, methods, and operators to keep the Microsoft compiler happy.
86312027Sjungma@eit.uni-kl.de//
86412027Sjungma@eit.uni-kl.de// Revision 1.6  2006/04/11 23:13:20  acg
86512027Sjungma@eit.uni-kl.de//   Andy Goodrich: Changes for reduced reset support that only includes
86612027Sjungma@eit.uni-kl.de//   sc_cthread, but has preliminary hooks for expanding to method and thread
86712027Sjungma@eit.uni-kl.de//   processes also.
86812027Sjungma@eit.uni-kl.de//
86912027Sjungma@eit.uni-kl.de// Revision 1.5  2006/01/24 20:56:00  acg
87012027Sjungma@eit.uni-kl.de//  Andy Goodrich: fixed up CVS comment.
87112027Sjungma@eit.uni-kl.de//
87212027Sjungma@eit.uni-kl.de// Revision 1.4  2006/01/24 20:48:14  acg
87312027Sjungma@eit.uni-kl.de// Andy Goodrich: added deprecation warnings for notify_delayed(). Added two
87412027Sjungma@eit.uni-kl.de// new implementation-dependent methods, notify_next_delta() & notify_internal()
87512027Sjungma@eit.uni-kl.de// to replace calls to notify_delayed() from within the simulator. These two
87612027Sjungma@eit.uni-kl.de// new methods are simpler than notify_delayed() and should speed up simulations
87712027Sjungma@eit.uni-kl.de//
87812027Sjungma@eit.uni-kl.de// Revision 1.3  2006/01/13 18:44:29  acg
87912027Sjungma@eit.uni-kl.de// Added $Log to record CVS changes into the source.
88012027Sjungma@eit.uni-kl.de//
88112027Sjungma@eit.uni-kl.de
88212027Sjungma@eit.uni-kl.de#endif
88312027Sjungma@eit.uni-kl.de
88412027Sjungma@eit.uni-kl.de// Taf!
885