I have completed all the codes except for one I would love i

I have completed all the codes except for one, I would love if anyone could help me out:

here is what I came up with (completed codes)

//MemoryManager.h
#ifndef __MM__
#define __MM__

#include <iostream>
#include <sstream>
#include \"blockdata.h\"
#include \"dlUtils.h\"

using namespace std;

class MemoryManager
{
public:
MemoryManager(unsigned int memsize);
~MemoryManager();
unsigned char * malloc(unsigned int request);
void free(unsigned char * ptr2block);
void showBlockList();

private:
unsigned int memsize;
unsigned char *baseptr;
dlNode<blockdata>* header;
dlNode<blockdata>* trailer;

void mergeForward(dlNode<blockdata> *p);
void mergeBackward(dlNode<blockdata> *p);
void splitBlock(dlNode<blockdata> *p,unsigned int chunksize);
};
  
  
#endif

-------------------------

//MemoryManager.h
#ifndef __MM__
#define __MM__

#include <iostream>
#include <sstream>
#include \"blockdata.h\"
#include \"dlUtils.h\"

using namespace std;

class MemoryManager
{
public:
MemoryManager(unsigned int memsize);
~MemoryManager();
unsigned char * malloc(unsigned int request);
void free(unsigned char * ptr2block);
void showBlockList();

private:
unsigned int memsize;
unsigned char *baseptr;
dlNode<blockdata>* header;
dlNode<blockdata>* trailer;

void mergeForward(dlNode<blockdata> *p);
void mergeBackward(dlNode<blockdata> *p);
void splitBlock(dlNode<blockdata> *p,unsigned int chunksize);
};
  
  
#endif

------------------------------------

//testMemMgr.cpp
#include <iostream>
#include \"MemoryManager.h\"
using namespace std;

int main()
{
MemoryManager heaper(50);
cout << \"\ heap initialized\ \";
cout << \"\ -------------BlockList start------------------\ \";
heaper.showBlockList();
cout << \"-------------BlockList end------------------\ \ \";
// Next, carry out a number of calls to malloc and free and
// show the blocklist after each operation:

return 0;
}

------------------------------------------------

//blockdata.h
#ifndef _BLOCKDATA_
#define _BLOCKDATA_

#include <iostream>

using namespace std;

class blockdata {
friend ostream& operator << (ostream&, const blockdata &);

public:
blockdata(unsigned int s, bool f, unsigned char *p);
int blocksize;
bool free;
unsigned char *blockptr;  
};


#endif

------------------------------------------

//dlUtils.h
#ifndef __DLNODE__
#define __DLNODE__

#include <iostream>
#include <cassert>

template <class T>
class dlNode {
public:
T info;
dlNode<T> *prev;
dlNode<T> *next;
dlNode<T>(T val, dlNode<T> *p, dlNode<T> *n):info(val),prev(p),next(n){};
};

template <class T>
void printDlList(dlNode<T>* header,dlNode<T> *trailer,const char *sep)
{
assert(header != NULL && trailer != NULL);
dlNode<T> *cursor = header->next;
while(cursor->next != trailer) {
std::cout << cursor->info << sep;
cursor = cursor->next;
}
if (cursor->next = trailer)
std::cout << cursor->info << std::endl;
}

template <class T>
void insertAfter(dlNode<T> *trailer, dlNode<T> *current, T newval)
{
assert(current != trailer);
current->next = new dlNode<T>(newval,current,current->next);
current = current->next;
current->next->prev = current;
}

template <class T>
void deleteNode(dlNode<T>* header, dlNode<T>* trailer, dlNode<T>* current)
{
assert(current!= header && current != trailer);
dlNode<T> *hold = current;
current->prev->next = current->next;
current->next->prev = current->prev;
delete hold;
}

template <class T>
void deleteNext(dlNode<T>* header, dlNode<T>* trailer, dlNode<T> *current)
{
assert(current != trailer && current->next != trailer);
deleteNode(header,trailer, current->next);
}

template <class T>
void deletePrevious(dlNode<T> * header,dlNode<T> * trailer,dlNode<T> *current)
{
   assert(current != header && current->prev != header);
   deleteNode(header, trailer,current->prev);
}

template <class T>
void clearList(dlNode<T> *p)
{
dlNode<T> *hold = p;
while(p != NULL) {
p = p->next;
delete hold;
hold = p;
}
}

#endif

----------------------------------------

//blockdata.cpp
#include \"dlUtils.h\"
#include \"blockdata.h\"
#include <iostream>
using namespace std;

blockdata::blockdata(unsigned int s, bool f, unsigned char *p)
{
blocksize = s;
free = f;
blockptr = p;
}

ostream &operator << (ostream &out, const blockdata &B)
{
out << \"[\" << B.blocksize << \",\";
if (B.free)
out << \"free\";
else
out << \"allocated\";
out << \"]\";
return out;
}

------------------

makefile.txt

main: MemoryManager.o blockdata.o testMemMgr.o
   g++ -std=c++11 blockdata.o MemoryManager.o testMemMgr.o -o main

testMemMgr.o: testMemMgr.cpp
   g++ -std=c++11 -c testMemMgr.cpp

blockdata.o: blockdata.h blockdata.cpp dlUtils.h
   g++ -std=c++11 -c blockdata.cpp

MemoryManager.o: MemoryManager.cpp MemoryManager.h
   g++ -std=c++11 -c MemoryManager.cpp

clean:
   rm *.o

----------------------------

TO BE COMPLETED

//MemoryManager.cpp
#include <cassert>
#include <iostream>
#include \"dlUtils.h\"
#include \"MemoryManager.h\"

MemoryManager::MemoryManager(unsigned int memtotal): memsize(memtotal)
{
baseptr = new unsigned char[memsize];
blockdata dummyBlock(0,false,0);
blockdata originalBlock(memsize,true,baseptr);
header = new dlNode<blockdata>(dummyBlock,nullptr,nullptr);
trailer = new dlNode<blockdata>(dummyBlock,nullptr,nullptr);
header->next = new dlNode<blockdata>(originalBlock,header,trailer);
trailer->prev = header->next;
}

MemoryManager::~MemoryManager()
{
delete [] baseptr;
clearList(header);
}

void MemoryManager::showBlockList()
{
printDlList(header,trailer,\"->\");
}

void MemoryManager::splitBlock(dlNode<blockdata> *p, unsigned int chunksize)
{
// Complete the code for this method
  
}

unsigned char * MemoryManager::malloc(unsigned int request)
{
// Complete the code for this method

}

void MemoryManager::mergeForward(dlNode<blockdata> *p)
{
// Complete the code for this method

}

void MemoryManager::mergeBackward(dlNode<blockdata> *p)
{
// Complete the code for this method

}

void MemoryManager::free(unsigned char *ptr2block)
{
// Complete the code for this method

}

Solution

void MemoryManager::free(unsigned char *ptr2block)
{
   splitBlock(dlNode<blockdata> *ptr2block, unsigned int chunksize);
   for(int i =0;i<chunksize ; i++)
   {
     
   current = ptr2block;
   deleteNode(dlNode<T>* header, dlNode<T>* trailer, dlNode<T>* current);
     
   }   

unsigned char * MemoryManager::malloc(unsigned int request)
{

char* pointer_to_memory = new char[request];
return pointer_to_memory;

}

I have completed all the codes except for one, I would love if anyone could help me out: here is what I came up with (completed codes) //MemoryManager.h #ifndef
I have completed all the codes except for one, I would love if anyone could help me out: here is what I came up with (completed codes) //MemoryManager.h #ifndef
I have completed all the codes except for one, I would love if anyone could help me out: here is what I came up with (completed codes) //MemoryManager.h #ifndef
I have completed all the codes except for one, I would love if anyone could help me out: here is what I came up with (completed codes) //MemoryManager.h #ifndef
I have completed all the codes except for one, I would love if anyone could help me out: here is what I came up with (completed codes) //MemoryManager.h #ifndef
I have completed all the codes except for one, I would love if anyone could help me out: here is what I came up with (completed codes) //MemoryManager.h #ifndef

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site