Re-implemented the Monitor's ArgumentParser, using getopt_long().
[aesalon.git] / monitor / src / tracker / Memory.cpp
blobfcf94b89afc8f16ab98418db37458a2e68eabb24
1 #include "Memory.h"
2 #include "event/Block.h"
4 namespace Tracker {
6 MemoryBlock *Memory::get_block(Word address) const {
7 for(block_set_t::const_iterator i = block_set.begin(); i != block_set.end(); i ++) {
8 if((*i)->get_address() == address) return *i;
10 return NULL;
13 void Memory::remove_block(MemoryBlock *block) {
14 for(block_set_t::iterator i = block_set.begin(); i != block_set.end(); i ++) {
15 if((*i) != block) continue;
16 block_set.erase(i);
17 break;
21 void Memory::handle_event(Event::BasicEvent *event) {
22 if(event->get_type() == Event::BasicEvent::BLOCK_EVENT) {
23 Event::Block *be = dynamic_cast<Event::Block *>(event);
24 switch(be->get_block_type()) {
25 case Event::Block::ALLOC_EVENT:
26 add_block(new MemoryBlock(be->get_address(), be->get_size()));
27 break;
28 case Event::Block::FREE_EVENT:
29 remove_block(get_block(be->get_address()));
30 break;
31 case Event::Block::REALLOC_EVENT:
32 MemoryBlock *block = get_block(be->get_address());
33 block->set_address(be->get_new_address());
34 block->set_size(be->get_size());
35 break;
40 } // namespace Tracker