2 #include "misc/BlockEvent.h"
7 Misc::SmartPointer
<MemoryBlock
> Memory::get_block(Word address
) const {
8 for(block_set_t::const_iterator i
= block_set
.begin(); i
!= block_set
.end(); i
++) {
9 if((*i
)->get_address() == address
) return *i
;
14 void Memory::remove_block(Misc::SmartPointer
<MemoryBlock
> block
) {
15 for(block_set_t::iterator i
= block_set
.begin(); i
!= block_set
.end(); i
++) {
16 if((*i
) != block
) continue;
22 void Memory::handle_event(Misc::SmartPointer
<Misc::Event
> event
) {
23 if(event
->get_type() == Misc::Event::BLOCK_EVENT
) {
24 Misc::SmartPointer
<Misc::BlockEvent
> be
= event
.to
<Misc::BlockEvent
>();
25 switch(be
->get_block_type()) {
26 case Misc::BlockEvent::ALLOC_EVENT
:
27 add_block(new MemoryBlock(be
->get_address(), be
->get_size()));
29 case Misc::BlockEvent::FREE_EVENT
:
30 remove_block(get_block(be
->get_address()));
32 case Misc::BlockEvent::REALLOC_EVENT
:
33 Misc::SmartPointer
<MemoryBlock
> block
= get_block(be
->get_address());
34 block
->set_address(be
->get_new_address());
35 block
->set_size(be
->get_size());
41 } // namespace Platform
42 } // namespace Aesalon