Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / verif / model / vendor / TLM-2006-11-29 / tlm / analysis / analysis_port.h
CommitLineData
86530b38
AT
1
2#ifndef ANALYSIS_PORT_HEADER
3#define ANALYSIS_PORT_HEADER
4
5#include "analysis/analysis_if.h"
6#include <deque>
7
8
9template < typename T>
10class analysis_port :
11 public sc_object ,
12 public virtual analysis_if< T >
13{
14 public:
15 analysis_port() : sc_object() {}
16 analysis_port( const char *nm ) : sc_object( nm ) {}
17
18 // bind and () work for both interfaces and analysis ports, since
19 // analysis ports implement the analysis interface
20
21 void bind( analysis_if<T> &_if ) {
22 m_interfaces.push_back( &_if );
23 }
24
25 void operator() ( analysis_if<T> &_if ) { bind( _if ); }
26
27 bool unbind( analysis_if<T> &_if ) {
28
29 typename std::deque< analysis_if<T> *>::iterator i;
30
31 for( i = m_interfaces.begin();
32 i != m_interfaces.end();
33 i++ ) {
34
35 if( *i == &_if ) {
36
37 m_interfaces.erase( i );
38 return 1;
39
40 }
41
42 }
43
44 return 0;
45
46 }
47
48 void write( const T &t ) {
49 typename std::deque< analysis_if<T> * >::iterator i;
50
51 for( i = m_interfaces.begin();
52 i != m_interfaces.end();
53 i++ ) {
54
55 (*i)->write( t );
56
57 }
58
59 }
60
61 private:
62 std::deque< analysis_if<T> * > m_interfaces;
63
64};
65
66#endif