SystemC  2.3.2
Accellera SystemC proof-of-concept library
sc_event.h
Go to the documentation of this file.
1 /*****************************************************************************
2 
3  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
4  more contributor license agreements. See the NOTICE file distributed
5  with this work for additional information regarding copyright ownership.
6  Accellera licenses this file to you under the Apache License, Version 2.0
7  (the "License"); you may not use this file except in compliance with the
8  License. You may obtain a copy of the License at
9 
10  http://www.apache.org/licenses/LICENSE-2.0
11 
12  Unless required by applicable law or agreed to in writing, software
13  distributed under the License is distributed on an "AS IS" BASIS,
14  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
15  implied. See the License for the specific language governing
16  permissions and limitations under the License.
17 
18  *****************************************************************************/
19 
20 /*****************************************************************************
21 
22  sc_event.h --
23 */
34 #ifndef SC_EVENT_H
35 #define SC_EVENT_H
36 
37 #include "sysc/kernel/sc_cmnhdr.h"
41 
42 #if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN)
43 #pragma warning(push)
44 #pragma warning(disable: 4251) // DLL import for std::string
45 #endif
46 
47 namespace sc_core {
48 
49 // forward declarations
50 class sc_event;
51 class sc_event_timed;
52 class sc_event_list;
53 class sc_event_or_list;
54 class sc_event_and_list;
55 class sc_object;
56 class sc_signal_channel;
57 
58 // friend function declarations
59 SC_API int sc_notify_time_compare( const void*, const void* );
60 
67 template< typename T >
69 {
70  friend class sc_event;
71  friend class sc_event_and_list;
72  friend class sc_event_or_list;
73 
74  typedef T type;
75 
76  inline sc_event_expr()
77  : m_expr( new T(true) )
78  {}
79 
80 public:
81 
82  inline sc_event_expr( sc_event_expr const & e) // move semantics
83  : m_expr(e.m_expr)
84  {
85  e.m_expr = 0;
86  }
87 
88  T const & release() const
89  {
90  sc_assert( m_expr );
91  T* expr = m_expr;
92  m_expr=0;
93  return *expr;
94  }
95 
96  void push_back( sc_event const & e) const
97  {
98  sc_assert( m_expr );
99  m_expr->push_back(e);
100  }
101 
102  void push_back( type const & el) const
103  {
104  sc_assert( m_expr );
105  m_expr->push_back(el);
106  }
107  operator T const &() const
108  {
109  return release();
110  }
111 
113  {
114  delete m_expr;
115  }
116 
117 private:
118  mutable type * m_expr;
119 
120  // disabled
121  void operator=( sc_event_expr const & );
122 };
123 
131 {
132  friend class sc_process_b;
133  friend class sc_method_process;
134  friend class sc_thread_process;
135  friend void sc_thread_cor_fn( void* arg );
136 
137 public:
138  sc_event_list( const sc_event_list& );
139  sc_event_list& operator = ( const sc_event_list& );
140 
141  int size() const;
142 
143 protected:
144 
145  void push_back( const sc_event& );
146  void push_back( const sc_event_list& );
147 
148  explicit
149  sc_event_list( bool and_list_, bool auto_delete_ = false );
150 
151  sc_event_list( const sc_event&,
152  bool and_list_,
153  bool auto_delete_ = false );
154 
155  ~sc_event_list();
156 
157  void swap( sc_event_list& );
158  void move_from( const sc_event_list& );
159 
160  bool and_list() const;
161 
162  void add_dynamic( sc_method_handle ) const;
163  void add_dynamic( sc_thread_handle ) const;
164  void remove_dynamic( sc_method_handle, const sc_event* ) const;
165  void remove_dynamic( sc_thread_handle, const sc_event* ) const;
166 
167  bool busy() const;
168  bool temporary() const;
169  void auto_delete() const;
170 
171  void report_premature_destruction() const;
172  void report_invalid_modification() const;
173 
174 private:
175 
176  std::vector<const sc_event*> m_events;
177  bool m_and_list;
178  bool m_auto_delete;
179  mutable unsigned m_busy;
180 };
181 
182 
190 : public sc_event_list
191 {
192  friend class sc_event;
194  friend class sc_process_b;
195  friend class sc_method_process;
196  friend class sc_thread_process;
197 
198 protected:
199 
200  explicit
201  sc_event_and_list( bool auto_delete_ );
202 
203 public:
204 
206  sc_event_and_list( const sc_event& );
207 
208  void swap( sc_event_and_list& );
211 
214 };
215 
217 
225 : public sc_event_list
226 {
227  friend class sc_event;
229  friend class sc_process_b;
230  friend class sc_method_process;
231  friend class sc_thread_process;
232 
233 protected:
234 
235  explicit
236  sc_event_or_list( bool auto_delete_ );
237 
238 public:
240  sc_event_or_list( const sc_event& );
241  void swap( sc_event_or_list& );
246 };
247 
249 
257 {
258  friend class sc_event_list;
259  friend class sc_event_timed;
260  friend class sc_simcontext;
261  friend class sc_object;
262  friend class sc_process_b;
263  friend class sc_process_handle;
264  friend class sc_method_process;
265  friend class sc_thread_process;
266  friend void sc_thread_cor_fn( void* arg );
267  friend class sc_clock;
268  friend class sc_event_queue;
269  friend class sc_signal_channel;
270  template<typename IF> friend class sc_fifo;
271  friend class sc_semaphore;
272  friend class sc_mutex;
273  friend class sc_join;
274  friend class sc_trace_file;
275 
276 public:
277 
278  sc_event();
279  explicit sc_event( const char* name );
280  ~sc_event();
281 
282  void cancel();
283 
284  const char* name() const { return m_name.c_str(); }
285  const char* basename() const;
286  sc_object* get_parent_object() const { return m_parent_p; }
287  bool in_hierarchy() const { return m_name.length() != 0; }
288 
289  void notify();
290  void notify( const sc_time& );
291  void notify( double, sc_time_unit );
292 
293  void notify_delayed();
294  void notify_delayed( const sc_time& );
295  void notify_delayed( double, sc_time_unit );
296 
297  sc_event_or_expr operator | ( const sc_event& ) const;
298  sc_event_or_expr operator | ( const sc_event_or_list& ) const;
299  sc_event_and_expr operator & ( const sc_event& ) const;
300  sc_event_and_expr operator & ( const sc_event_and_list& ) const;
301 
302  // has this event been triggered in the current delta cycle?
303  bool triggered() const;
304 
305  // never notified event
306  static const sc_event none;
307 
308 private:
309 
310  void add_static( sc_method_handle ) const;
311  void add_static( sc_thread_handle ) const;
312  void add_dynamic( sc_method_handle ) const;
313  void add_dynamic( sc_thread_handle ) const;
314 
315  void notify_internal( const sc_time& );
316  void notify_next_delta();
317 
318  bool remove_static( sc_method_handle ) const;
319  bool remove_static( sc_thread_handle ) const;
320  bool remove_dynamic( sc_method_handle ) const;
321  bool remove_dynamic( sc_thread_handle ) const;
322 
323  void register_event( const char* name, bool is_kernel_event = false );
324  void reset();
325 
326  void trigger();
327 
328 private:
329 
330  enum notify_t { NONE, DELTA, TIMED };
331 
332  std::string m_name; // name of object.
333  sc_object* m_parent_p; // parent sc_object for this event.
334  sc_simcontext* m_simc;
335  sc_dt::uint64 m_trigger_stamp; // delta of last trigger
336  notify_t m_notify_type;
337  int m_delta_event_index;
338  sc_event_timed* m_timed;
339 
340  mutable std::vector<sc_method_handle> m_methods_static;
341  mutable std::vector<sc_method_handle> m_methods_dynamic;
342  mutable std::vector<sc_thread_handle> m_threads_static;
343  mutable std::vector<sc_thread_handle> m_threads_dynamic;
344 
345 private:
346  static struct kernel_tag {} kernel_event;
347  explicit sc_event( kernel_tag, const char* name = NULL );
348 
349  // disabled
350  sc_event( const sc_event& );
351  sc_event& operator = ( const sc_event& );
352 };
353 
354 // ----------------------------------------------------------------------------
355 // CLASS : sc_event_timed
356 //
357 // Class for storing the time to notify a timed event.
358 // ----------------------------------------------------------------------------
359 
361 {
362  friend class sc_event;
363  friend class sc_simcontext;
364 
365  friend SC_API int sc_notify_time_compare( const void*, const void* );
366 
367 private:
368 
369  sc_event_timed( sc_event* e, const sc_time& t )
370  : m_event( e ), m_notify_time( t )
371  {}
372 
373  ~sc_event_timed()
374  { if( m_event != 0 ) { m_event->m_timed = 0; } }
375 
376  sc_event* event() const
377  { return m_event; }
378 
379  const sc_time& notify_time() const
380  { return m_notify_time; }
381 
382  static void* operator new( std::size_t )
383  { return allocate(); }
384 
385  static void operator delete( void* p, std::size_t )
386  { deallocate( p ); }
387 
388 private:
389 
390  // dedicated memory management
391  static void* allocate();
392  static void deallocate( void* );
393 
394 private:
395 
396  sc_event* m_event;
397  sc_time m_notify_time;
398 
399 private:
400 
401  // disabled
402  sc_event_timed();
403  sc_event_timed( const sc_event_timed& );
404  sc_event_timed& operator = ( const sc_event_timed& );
405 };
406 
407 
408 // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
409 
410 inline
411 void
413 {
414  notify( sc_time( v, tu, m_simc ) );
415 }
416 
417 
418 inline
419 void
420 sc_event::notify_internal( const sc_time& t )
421 {
422  if( t == SC_ZERO_TIME ) {
423  // add this event to the delta events set
424  m_delta_event_index = m_simc->add_delta_event( this );
425  m_notify_type = DELTA;
426  } else {
427  sc_event_timed* et =
428  new sc_event_timed( this, m_simc->time_stamp() + t );
429  m_simc->add_timed_event( et );
430  m_timed = et;
431  m_notify_type = TIMED;
432  }
433 }
434 
435 inline
436 void
437 sc_event::notify_next_delta()
438 {
439  if( m_notify_type != NONE ) {
440  SC_REPORT_ERROR( SC_ID_NOTIFY_DELAYED_, 0 );
441  }
442  // add this event to the delta events set
443  m_delta_event_index = m_simc->add_delta_event( this );
444  m_notify_type = DELTA;
445 }
446 
447 inline
448 void
450 {
451  notify_delayed( sc_time( v, tu, m_simc ) );
452 }
453 
454 
455 inline
456 void
457 sc_event::add_static( sc_method_handle method_h ) const
458 {
459  m_methods_static.push_back( method_h );
460 }
461 
462 inline
463 void
464 sc_event::add_static( sc_thread_handle thread_h ) const
465 {
466  m_threads_static.push_back( thread_h );
467 }
468 
469 inline
470 void
471 sc_event::add_dynamic( sc_method_handle method_h ) const
472 {
473  m_methods_dynamic.push_back( method_h );
474 }
475 
476 inline
477 void
478 sc_event::add_dynamic( sc_thread_handle thread_h ) const
479 {
480  m_threads_dynamic.push_back( thread_h );
481 }
482 
483 
488 extern void notify( sc_event& e );
489 extern void notify( const sc_time& t, sc_event& e );
490 extern void notify( double v, sc_time_unit tu, sc_event& e );
491 
492 
493 // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
494 
495 inline
496 sc_event_list::sc_event_list( bool and_list_, bool auto_delete_ )
497  : m_events()
498  , m_and_list( and_list_ )
499  , m_auto_delete( auto_delete_ )
500  , m_busy( 0 )
501 {
502 }
503 
504 inline
506  bool and_list_,
507  bool auto_delete_ )
508  : m_events()
509  , m_and_list( and_list_ )
510  , m_auto_delete( auto_delete_ )
511  , m_busy(0)
512 {
513  m_events.push_back( &e );
514 }
515 
516 inline
518  : m_events()
519  , m_and_list( that.m_and_list )
520  , m_auto_delete( false )
521  , m_busy( 0 )
522 {
523  move_from( that );
524  that.auto_delete(); // free automatic lists
525 }
526 
527 inline
530 {
531  if( m_busy )
533 
534  if( SC_LIKELY_(this != &that) ) {
535  move_from( that );
536  that.auto_delete(); // free automatic lists
537  }
538 
539  return *this;
540 }
541 
542 inline
544 {
545  if( m_busy )
547 }
548 
549 inline
550 void
552 {
553  if( busy() || that.busy() )
555  m_events.swap( that.m_events );
556 }
557 
558 inline
559 void
561 {
562  if( that.temporary() ) {
563  swap( const_cast<sc_event_list&>(that) ); // move from source
564  } else {
565  m_events = that.m_events; // copy from source
566  }
567 }
568 
569 inline
570 int
572 {
573  return static_cast<int>(m_events.size());
574 }
575 
576 inline
577 bool
579 {
580  return m_and_list;
581 }
582 
583 
584 inline
585 bool
587 {
588  return m_busy != 0;
589 }
590 
591 
592 inline
593 bool
595 {
596  return m_auto_delete && ! m_busy;
597 }
598 
599 inline
600 void
602 {
603  if( m_busy ) {
604  --m_busy;
605  }
606  if( ! m_busy && m_auto_delete ) {
607  delete this;
608  }
609 }
610 
611 
612 
613 // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
614 
615 inline
617  : sc_event_list( false )
618 {}
619 
620 inline
622 : sc_event_list( false )
623 {
624  push_back( e );
625 }
626 
627 inline
629 : sc_event_list( false, auto_delete_ )
630 {}
631 
632 inline
635 {
636  if( busy() )
638 
639  push_back( e );
640  return *this;
641 }
642 
643 inline
646 {
647  if( busy() )
649 
650  push_back( el );
651  return *this;
652 }
653 
654 inline
655 sc_event_or_expr
657 {
658  sc_event_or_expr expr;
659  expr.push_back( *this );
660  expr.push_back( e2 );
661  return expr;
662 }
663 
664 inline
665 sc_event_or_expr
667 {
668  sc_event_or_expr expr;
669  expr.push_back( *this );
670  expr.push_back( e2 );
671  return expr;
672 }
673 
674 
675 // sc_event
676 
677 inline
678 sc_event_or_expr
679 sc_event::operator | ( const sc_event& e2 ) const
680 {
681  sc_event_or_expr expr;
682  expr.push_back( *this );
683  expr.push_back( e2 );
684  return expr;
685 }
686 
687 inline
688 sc_event_or_expr
690 {
691  sc_event_or_expr expr;
692  expr.push_back( *this );
693  expr.push_back( e2 );
694  return expr;
695 }
696 
697 // sc_event_expr
698 
699 inline
700 sc_event_or_expr
701 operator | ( sc_event_or_expr expr, sc_event const & e )
702 {
703  expr.push_back( e );
704  return expr;
705 }
706 
707 inline
708 sc_event_or_expr
709 operator | ( sc_event_or_expr expr, sc_event_or_list const & el )
710 {
711  expr.push_back( el );
712  return expr;
713 }
714 
715 inline
716 void
718 {
719  sc_event_list::swap( that );
720 }
721 
722 
723 
724 // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
725 
726 inline
728  : sc_event_list( true )
729 {}
730 
731 inline
733 : sc_event_list( true )
734 {
735  push_back( e );
736 }
737 
738 inline
740 : sc_event_list( true, auto_delete_ )
741 {}
742 
743 inline
744 void
746 {
747  sc_event_list::swap( that );
748 }
749 
750 
751 inline
754 {
755  if( busy() )
757 
758  push_back( e );
759  return *this;
760 }
761 
762 inline
765 {
766  if( busy() )
768 
769  push_back( el );
770  return *this;
771 }
772 
773 inline
774 sc_event_and_expr
776 {
777  sc_event_and_expr expr;
778  expr.push_back( *this );
779  expr.push_back( e );
780  return expr;
781 }
782 
783 inline
784 sc_event_and_expr
786 {
787  sc_event_and_expr expr;
788  expr.push_back( *this );
789  expr.push_back( el );
790  return expr;
791 }
792 
793 // sc_event
794 
795 inline
796 sc_event_and_expr
797 sc_event::operator & ( const sc_event& e2 ) const
798 {
799  sc_event_and_expr expr;
800  expr.push_back( *this );
801  expr.push_back( e2 );
802  return expr;
803 }
804 
805 inline
806 sc_event_and_expr
807 sc_event::operator & ( const sc_event_and_list& e2 ) const
808 {
809  sc_event_and_expr expr;
810  expr.push_back( *this );
811  expr.push_back( e2 );
812  return expr;
813 }
814 
815 // sc_event_expr
816 
817 inline
818 sc_event_and_expr
819 operator & ( sc_event_and_expr expr, sc_event const & e )
820 {
821  expr.push_back( e );
822  return expr;
823 }
824 
825 inline
826 sc_event_and_expr
827 operator & ( sc_event_and_expr expr, sc_event_and_list const & el )
828 {
829  expr.push_back( el );
830  return expr;
831 }
832 
833 } // namespace sc_core
834 
835 #if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN)
836 #pragma warning(pop)
837 #endif
838 
839 // $Log: sc_event.h,v $
840 // Revision 1.14 2011/08/29 18:04:32 acg
841 // Philipp A. Hartmann: miscellaneous clean ups.
842 //
843 // Revision 1.13 2011/08/26 20:46:09 acg
844 // Andy Goodrich: moved the modification log to the end of the file to
845 // eliminate source line number skew when check-ins are done.
846 //
847 // Revision 1.12 2011/08/24 22:05:50 acg
848 // Torsten Maehne: initialization changes to remove warnings.
849 //
850 // Revision 1.11 2011/03/12 21:07:51 acg
851 // Andy Goodrich: changes to kernel generated event support.
852 //
853 // Revision 1.10 2011/03/06 15:55:11 acg
854 // Andy Goodrich: Changes for named events.
855 //
856 // Revision 1.9 2011/03/05 01:39:21 acg
857 // Andy Goodrich: changes for named events.
858 //
859 // Revision 1.8 2011/02/18 20:27:14 acg
860 // Andy Goodrich: Updated Copyrights.
861 //
862 // Revision 1.7 2011/02/13 21:47:37 acg
863 // Andy Goodrich: update copyright notice.
864 //
865 // Revision 1.6 2011/02/01 21:03:23 acg
866 // Andy Goodrich: new return codes for trigger_dynamic calls.
867 //
868 // Revision 1.5 2011/01/18 20:10:44 acg
869 // Andy Goodrich: changes for IEEE1666_2011 semantics.
870 //
871 // Revision 1.4 2010/12/07 20:09:11 acg
872 // Andy Goodrich: writer policy fix.
873 //
874 // Revision 1.3 2009/05/22 16:06:29 acg
875 // Andy Goodrich: process control updates.
876 //
877 // Revision 1.2 2008/05/22 17:06:25 acg
878 // Andy Goodrich: updated copyright notice to include 2008.
879 //
880 // Revision 1.1.1.1 2006/12/15 20:20:05 acg
881 // SystemC 2.3
882 //
883 // Revision 1.8 2006/05/26 20:33:16 acg
884 // Andy Goodrich: changes required by additional platform compilers (i.e.,
885 // Microsoft VC++, Sun Forte, HP aCC).
886 //
887 // Revision 1.7 2006/05/08 17:57:51 acg
888 // Andy Goodrich: added David Long's forward declarations for friend
889 // functions, methods, and operators to keep the Microsoft compiler happy.
890 //
891 // Revision 1.6 2006/04/11 23:13:20 acg
892 // Andy Goodrich: Changes for reduced reset support that only includes
893 // sc_cthread, but has preliminary hooks for expanding to method and thread
894 // processes also.
895 //
896 // Revision 1.5 2006/01/24 20:56:00 acg
897 // Andy Goodrich: fixed up CVS comment.
898 //
899 // Revision 1.4 2006/01/24 20:48:14 acg
900 // Andy Goodrich: added deprecation warnings for notify_delayed(). Added two
901 // new implementation-dependent methods, notify_next_delta() & notify_internal()
902 // to replace calls to notify_delayed() from within the simulator. These two
903 // new methods are simpler than notify_delayed() and should speed up simulations
904 //
905 // Revision 1.3 2006/01/13 18:44:29 acg
906 // Added $Log to record CVS changes into the source.
907 //
908 
909 #endif
910 
911 // Taf!
sc_event_list & operator=(const sc_event_list &)
Definition: sc_event.h:529
sc_event_and_expr operator&(const sc_event &) const
SC_API const sc_time SC_ZERO_TIME
#define sc_assert(expr)
Definition: sc_report.h:270
Abstract base class of all SystemC `simulation&#39; objects.
Definition: sc_object.h:61
AND list of events.
Definition: sc_event.h:189
void push_back(sc_event const &e) const
Definition: sc_event.h:96
X & operator&=(sc_proxy< X > &px, const sc_proxy< Y > &py)
Definition: sc_lv_base.h:342
sc_event_or_list & operator|=(const sc_event &)
Definition: sc_event.h:634
The sc_semaphore primitive channel class.
Definition: sc_semaphore.h:49
friend class sc_event_and_list
Definition: sc_event.h:71
sc_event_expr< sc_event_or_list > operator|(const sc_event &) const
Definition: sc_event.h:656
The clock channel.
Definition: sc_clock.h:49
The event class.
Definition: sc_event.h:256
The sc_mutex primitive channel class.
Definition: sc_mutex.h:49
Base class for lists of events.
Definition: sc_event.h:130
X & operator|=(sc_proxy< X > &px, const sc_proxy< Y > &py)
Definition: sc_lv_base.h:444
sc_event_and_list & operator&=(const sc_event &)
bool busy() const
Definition: sc_event.h:586
uint64_t uint64
Definition: sc_nbdefs.h:189
static const sc_event none
Definition: sc_event.h:306
sc_object * get_parent_object() const
Definition: sc_event.h:286
void report_invalid_modification() const
void swap(sc_event_and_list &)
Definition: sc_event.h:745
friend class sc_event_or_list
Definition: sc_event.h:72
class SC_API sc_event
Definition: sc_interface.h:40
The event expression class.
Definition: sc_event.h:68
#define SC_LIKELY_(x)
Definition: sc_cmnhdr.h:84
T const & release() const
Definition: sc_event.h:88
void sc_thread_cor_fn(void *arg)
int size() const
Definition: sc_event.h:571
void move_from(const sc_event_list &)
Definition: sc_event.h:560
The simulation context.
void swap(sc_event_or_list &)
Definition: sc_event.h:717
void report_premature_destruction() const
sc_event_list(const sc_event_list &)
Definition: sc_event.h:517
void push_back(const sc_event &)
const char * name() const
Definition: sc_event.h:284
bool temporary() const
Definition: sc_event.h:594
The time class.
Definition: sc_time.h:82
sc_event_or_expr operator|(const sc_event &) const
Definition: sc_event.h:679
Definition of the simulation context class.
friend class sc_event
Definition: sc_event.h:70
sc_event_expr< sc_event_and_list > sc_event_and_expr
Definition: sc_event.h:216
class sc_thread_process * sc_thread_handle
Definition: sc_process.h:67
class sc_method_process * sc_method_handle
Definition: sc_process.h:66
sc_event_expr< sc_event_and_list > operator&(const sc_event &)
Report ids for the kernel code.
sc_event_expr< sc_event_or_list > sc_event_or_expr
Definition: sc_event.h:248
#define SC_REPORT_ERROR(msg_type, msg)
Definition: sc_report.h:223
OR list of events.
Definition: sc_event.h:224
bool and_list() const
Definition: sc_event.h:578
void auto_delete() const
Definition: sc_event.h:601
sc_event_or_expr operator|(sc_event_or_expr expr, sc_event const &e)
Definition: sc_event.h:701
The sc_signal<T> writer policy definition.
bool in_hierarchy() const
Definition: sc_event.h:287
void push_back(type const &el) const
Definition: sc_event.h:102
void notify(sc_event &e)
sc_event_and_expr operator&(sc_event_and_expr expr, sc_event const &e)
Definition: sc_event.h:819
sc_event_expr(sc_event_expr const &e)
Definition: sc_event.h:82
void swap(sc_event_list &)
Definition: sc_event.h:551
#define SC_API
Definition: sc_cmnhdr.h:168
sc_time_unit
Enumeration of time units.
Definition: sc_time.h:64
SC_API int sc_notify_time_compare(const void *, const void *)