/** ****************************************************************************** @file /common/rm/rmrasti.cpp @brief Interface k RMraster @author Vta @version 1.0 ******************************************************************************/ #include "common/rm/rmrasti.h" namespace rm { int TRM_raster_i::startNewGroup() { return this->rmraster->startNewGroup(); } int TRM_raster_i::freeLastGroup() { return this->rmraster->freeLastGroup(); } int TRM_raster_i::getGroupOfRaster(int id) { return this->rmraster->getGroupOfObject(id); } int TRM_raster_i::getCurrentGroup() { return this->rmraster->getCurrentGroup(); } void TRM_raster_i::freeRaster(int id) { this->rmraster->freeRaster(id,0); } void TRM_raster_i::freeRasterHavingGroup(int group) { this->rmraster->freeHavingGroup(group); } int TRM_raster_i::addRaster(SDL_Surface * newraster,int type) { return this->rmraster->addRaster(newraster, -1, NULL, type); } int TRM_raster_i::addRasterPremanent(SDL_Surface * newraster,int newid,char *filename, int type) { return this->rmraster->addRaster(newraster, newid, filename, type); } int TRM_raster_i::getMaxId() { return this->rmraster->getMaxId(); } TRaster * TRM_raster_i::get(int id) { return this->rmraster->getRaster(id); } void TRM_raster_i::request(int id) { this->rmraster->request(id); } int TRM_raster_i::request(const char * name) { int id=this->rmraster->getRasterId(name); this->rmraster->request(id); return id; } void TRM_raster_i::loadBuffer(void) { this->rmraster->loadBuffer(); } void TRM_raster_i::loadNow(int id) { this->rmraster->loadRaster(id); } int TRM_raster_i::loadNow(const char * name) { int id=this->rmraster->getRasterId(name); this->rmraster->loadRaster(id); return id; } /// Funkce bezici ve vlastnim vlakne nacitajici raster int loadrasterThread(void * data) { try { struct loadinthread * lit = (struct loadinthread *) data; int *ids=lit->ids; int size=lit->size; lit->size=-1; // vytvorim si vlastni RMi (protoze jsem v jinem vlakne!) a pomoci toho nactu do RM data TRM_raster_i * RMrasteri=(TRM_raster_i *)KSendMessage(RQUEUE,MSG_GET_RM_RASTER_I,MOD_RM,MOD_RM,NULL); int i; for (i=0;iloadNow(ids[i]); } delete(RMrasteri); } catch (E_8K) { GLOBALLOGID(PRIORITY_EXCETION_IN_THREAD, "Exception in loadrasterThread"); KSendMessage(RQUEUE,MSG_EXCEPTION_IN_THREAD,MOD_RM,BROADCAST,NULL); } return 0; } void TRM_raster_i::loadThr(int * ids,int size) { struct loadinthread *lit=(struct loadinthread*) KMemAlloc(sizeof(struct loadinthread)); lit->ids=ids; lit->size=size; /*this->threads[this->threads.getMaxId()+1]=*/SDL_CreateThread(loadrasterThread, (void*) lit); while (lit->size!=-1) // cekam, dokud nepredam vse do vlakna - necekam, az to nacte, jen predavam { } KMemFree(lit); } void TRM_raster_i::loadThr(int id) { struct loadinthread *lit=(struct loadinthread*) KMemAlloc(sizeof(struct loadinthread)); lit->ids=&id; lit->size=1; /*this->threads[this->threads.getMaxId()+1]=*/SDL_CreateThread(loadrasterThread, (void*) lit); while (lit->size!=-1) // cekam, dokud nepredam vse do vlakna { } KMemFree(lit); } int TRM_raster_i::getRasters(DA ** rsts) { return this->rmraster->getRasters(rsts); } int TRM_raster_i::getRasters(TRaster ** rasters, int size) { DA * daids; int j=1,max; max=this->rmraster->getRasters(&daids); int i; for (i=0;irmraster->getRastersCount(); } int TRM_raster_i::getRastersLoaded() { return this->rmraster->getRastersCount(); } TRM_raster_i::TRM_raster_i(TRM_raster * globalrmraster) { this->rmraster=globalrmraster; GLOBALLOGID(PRIORITY_CONFIRM ,"RMrasteri was created"); } TRM_raster_i::~TRM_raster_i() { GLOBALLOGID(PRIORITY_CONFIRM ,"RMrasteri was destroyed"); } } // namespace rm