Olivia_v2017/OliviaTasks/OlvTaskProcess.h

81 lines
1.6 KiB
C++

#pragma once
#include "TaskProcess.h"
#include "mapmatrix.h"
#include "DijkstraUtiles.h"
#include "b_file.h"
#include "olv_tasks_def.h"
#include "Matrix2d.h"
class InfoIndiceEx: public InfoIndice
{
public:
Cgarray<int> dat;
int getFlags(int na)
{
return dat[na*3+2];
}
virtual int get(int iamb, int iextremo)
{
return dat[iamb*3+iextremo];
}
inline void clear()
{
dat.borra();
}
BOOL leeFile(char* path);
};
struct InfoIniTask;
/*!
* Clase para cálculos de Olivia en modo Multitask
*
*/
class OlvTaskProcess : public TaskProcess
{
public:
//info de procesos
bool va_mal;
int ithr;//id del thread, lo recibe al arrancar como arg
int amb_ini;//ambito inicio, lo calcula
int amb_fin;//ambito fin, lo calcula
/////////////////////////
//variables para run
Cdijkstra_arch arch_dj;
InfoIndiceEx ia;//puntero a info asoc
CmapMatFloat costes;//matriz de costes entre nodos
Djkt_ang_ady *angs;//angulos entre nodos
Matrix2d<float> cost_amb;//matriz de costes entre ambitos
/////////////////////////
//recibe por socket
InfoIniTask info;
//////////////////////////
OlvTaskProcess(void);
~OlvTaskProcess(void);
virtual void preTask();
virtual void inTask();
virtual void postTask();
virtual void run();
virtual void desconecta();
/////////////////////////
//funciones run
BOOL calcula_cost_amb_sub(int amb_ini,int amb_fin, int ith);
BOOL lee_mats();
BOOL guarda_cost_amb();
void enviaLog();
BOOL calcula_cost_ambThr();
BOOL lanza_thr_calc();
};
class ThCalcCostes: public Cth
{
public:
OlvTaskProcess *pclas;
int ithr;
int ini;//fila inicio
int fin;//fila fin
BOOL mal;//indica si ha ido bien
virtual void run();
};