1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
/**
* ctor
*/
Transaction::Transaction(size_t trans_id, const int* read_memory, t_ftn_t ftn):
m_trans_id(trans_id),
m_tfunction(ftn),
m_tstatus(trtn_ready),
m_read_memory(read_memory)
{
memset(m_write_rec, 0, (sizeof(bool) * TRTN_SET_SIZE));
memset(m_write_set, 0, (sizeof(int) * TRTN_SET_SIZE));
}
/**
* copy ctor
*/
Transaction::Transaction(const Transaction& src):
m_trans_id(src.m_trans_id),
m_tfunction(src.m_tfunction),
m_tstatus(src.m_tstatus),
m_event(src.m_event),
m_read_memory(src.m_read_memory)
{
memcpy(m_write_rec, src.m_write_rec, (sizeof(bool) * TRTN_SET_SIZE));
memcpy(m_write_set, src.m_write_set, (sizeof(int) * TRTN_SET_SIZE));
}
/**
* dtor
*/
Transaction::~Transaction()
{
//dtor
cout << "transaction " << m_trans_id << " dtor called\n";
}
/**
* Execute the transaction
*/
void Transaction::operator()(const int* context)
{
assert(context != NULL);
m_read_memory = context;
m_tfunction(*this);
}
/**
* Reassign the transction
*/
Transaction& Transaction::operator=(const Transaction& rhs)
{
if(&rhs != this)
{
m_trans_id = rhs.m_trans_id;
m_tfunction = rhs.m_tfunction;
m_tstatus = rhs.m_tstatus;
m_event = rhs.m_event;
m_read_memory = rhs.m_read_memory;
memcpy(m_write_rec, rhs.m_write_rec, (sizeof(bool) * TRTN_SET_SIZE));
memcpy(m_write_set, rhs.m_write_set, (sizeof(int) * TRTN_SET_SIZE));
}
return *this;
}
/**
* Read
*/
int Transaction::read(size_t location)
{
if(m_write_rec[location])
return m_write_set[location];
return m_read_memory[location];
}
/**
* Write
*/
void Transaction::write(size_t location, int value)
{
m_write_set[location] = value;
m_write_rec[location] = true;
}
|