Mercurial > hg > Game > Cerium
view TaskManager/kernel/ppe/SymTable.cc @ 145:a5138d6e8996 draft
fix
author | gongo@gendarme.cr.ie.u-ryukyu.ac.jp |
---|---|
date | Tue, 02 Dec 2008 12:46:54 +0900 |
parents | 3e331f7576a1 |
children |
line wrap: on
line source
#include <string.h> #include "SymTable.h" SymTable::~SymTable(void) { SymTbPtr tb; for (int i = 0; i < symtb_index; i++) { tb = &symtb[i]; delete [] tb->sym; } delete [] symtb; } void SymTable::init(void) { symtb = new SymTb[SYM_MAX_SIZE]; symtb_index = 0; } void SymTable::set_symbol(const char *sym, FuncObject addr) { SymTbPtr tb = &symtb[symtb_index++]; tb->sym = new char[strlen(sym)+1]; memcpy(tb->sym, sym, strlen(sym)+1); tb->address = addr; } void SymTable::set_func(int id, FuncObject addr) { SymTbPtr tb = &symtb[id]; tb->address = addr; } SymTable::FuncObject SymTable::get_address(int fd) { if (fd >= symtb_index) { // Fix me // error process } return symtb[fd].address; } int SymTable::get_fd(const char *sym) { SymTbPtr tb; for (int i = 0; i < SYM_MAX_SIZE; i++) { tb = &symtb[i]; if (strcmp(tb->sym, sym) == 0) { return i; } } return -1; }