/** * @module cprogram * @author Guenther Neuwirth (0626638), Manuel Mausz (0728348) * @brief class for parsing and saving a program * @date 11.05.2009 */ #include #include #include #include #include #include "cdat.h" #include "cmem.h" using namespace std; using namespace boost; CMem::CMem(const std::string& memfile) : m_memfile(memfile) { dump(std::cout); } /*----------------------------------------------------------------------------*/ CMem::~CMem() { } /*----------------------------------------------------------------------------*/ CDat& CMem::getRegister(const string reg) { unsigned int regnr = getRegNr(reg); // if (regnr >= MAX_REGISTER ) if (regnr >= m_registers.size()) { for ( int i = m_registers.size(); i <= (int)regnr; i++) m_registers.push_back(CDat((int)0)); return m_registers[m_registers.size() - 1]; } return m_registers[regnr]; } /*----------------------------------------------------------------------------*/ string CMem::getMemAt(const std::string addr) { int pos = getRegister(addr).getTypeValue(); /* open and read mem */ ifstream file(m_memfile.c_str(), ios::in); string cur_line; for (int i = 0; i <= pos; i++) getline(file, cur_line); file.close(); if (cur_line.empty()) return ""; trim(cur_line); return cur_line; } void CMem::setMemAt(const std::string addr, const CDat& value) { unsigned int pos = getRegister(addr).getTypeValue(); /* open and read mem */ ifstream ifile(m_memfile.c_str() ); vector tmp; unsigned int i = 0; while (ifile.good()) { string cur_line; getline(ifile, cur_line); if(!cur_line.empty()) tmp.push_back(cur_line); i++; } ifile.close(); cout << tmp.size()<<"sasa"<> regnr; return regnr; } /*----------------------------------------------------------------------------*/ #ifdef DEBUG void CMem::dump(std::ostream& out) { out << endl << "Memory file:" << endl << m_memfile << endl; out << endl << "Memory file content:" << endl; } #endif