81 lines
1.6 KiB
C++
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();
|
|
}; |