ruby: slicc: move some code to AbstractController

Some of the code in StateMachine.py file is added to all the controllers and
is independent of the controller definition. This code is being moved to the
AbstractController class which is the parent class of all controllers.
This commit is contained in:
Nilay Vaish
2013-08-07 14:51:18 -05:00
parent e038741598
commit f1b17bf157
3 changed files with 24 additions and 38 deletions

View File

@@ -182,3 +182,19 @@ AbstractController::wakeUpAllBuffers()
m_waiting_buffers.clear();
}
}
void
AbstractController::blockOnQueue(Address addr, MessageBuffer* port)
{
m_is_blocking = true;
m_block_map[addr] = port;
}
void
AbstractController::unblock(Address addr)
{
m_block_map.erase(addr);
if (m_block_map.size() == 0) {
m_is_blocking = false;
}
}

View File

@@ -56,14 +56,17 @@ class AbstractController : public ClockedObject, public Consumer
void init();
const Params *params() const { return (const Params *)_params; }
const int & getVersion() const { return m_version; }
void initNetworkPtr(Network* net_ptr) { m_net_ptr = net_ptr; }
// return instance name
const std::string getName() const { return m_name; }
void blockOnQueue(Address, MessageBuffer*);
void unblock(Address);
virtual MessageBuffer* getMandatoryQueue() const = 0;
virtual const int & getVersion() const = 0;
virtual const std::string toString() const = 0; // returns text version of
// controller type
virtual const std::string getName() const = 0; // return instance name
virtual void blockOnQueue(Address, MessageBuffer*) = 0;
virtual void unblock(Address) = 0;
virtual void initNetworkPtr(Network* net_ptr) = 0;
virtual AccessPermission getAccessPermission(const Address& addr) = 0;
virtual DataBlock& getDataBlock(const Address& addr) = 0;

View File

@@ -253,10 +253,7 @@ class $c_ident : public AbstractController
static int getNumControllers();
void init();
MessageBuffer* getMandatoryQueue() const;
const int & getVersion() const;
const std::string toString() const;
const std::string getName() const;
void initNetworkPtr(Network* net_ptr) { m_net_ptr = net_ptr; }
void print(std::ostream& out) const;
void wakeup();
@@ -265,8 +262,6 @@ class $c_ident : public AbstractController
void regStats();
void collateStats();
void blockOnQueue(Address addr, MessageBuffer* port);
void unblock(Address addr);
void recordCacheTrace(int cntrl, CacheRecorder* tr);
Sequencer* getSequencer() const;
@@ -840,40 +835,12 @@ $c_ident::getSequencer() const
return $seq_ident;
}
const int &
$c_ident::getVersion() const
{
return m_version;
}
const string
$c_ident::toString() const
{
return "$c_ident";
}
const string
$c_ident::getName() const
{
return m_name;
}
void
$c_ident::blockOnQueue(Address addr, MessageBuffer* port)
{
m_is_blocking = true;
m_block_map[addr] = port;
}
void
$c_ident::unblock(Address addr)
{
m_block_map.erase(addr);
if (m_block_map.size() == 0) {
m_is_blocking = false;
}
}
void
$c_ident::print(ostream& out) const
{