{
public:
// Return the name of the host of this task
char* HostName();
// Return the identificator of the task
int Tid();
// Return the identificator of the parent task
int TidParent();
// Return the number of computer in the parallel virtual machine
int NbHosts();
// the following methods put an array of simple type in the active
// sent buffer
int Pack(int* IntArray,int Number=1, int Stride=1);
int Pack(unsigned int* IntArray,int Number=1, int Stride=1);
int Pack(double* DoubleArray,int Number=1, int Stride=1);
int Pack(float* FloatArray,int Number=1, int Stride=1);
int Pack(unsigned short* ShortArray,int Number=1, int Stride=1);
int Pack(short* ShortArray,int Number=1, int Stride=1);
int Pack(unsigned long* LongArray,int Number=1, int Stride=1);
int Pack(long* LongArray,int Number=1, int Stride=1);
int Pack(char* CharArray,int Number=1, int Stride=1);
template
int Pack(T* ObjArray,int Number=1);
// the following methods take an array of simple type from the active
// recived buffer
int UnPack(int* IntArray,int Number=1, int Stride=1);
int UnPack(unsigned int* IntArray,int Number=1, int Stride=1);
int UnPack(double* DoubleArray,int Number=1, int Stride=1);
int UnPack(float* FloatArray,int Number=1, int Stride=1);
int UnPack(unsigned short* ShortArray,int Number=1, int Stride=1);
int UnPack(short* ShortArray,int Number=1, int Stride=1);
int UnPack(unsigned long* LongArray,int Number=1, int Stride=1);
int UnPack(long* LongArray,int Number=1, int Stride=1);
int UnPack(char* CharArray,int Number=1, int Stride=1);
template
int UnPack(T* & ObjArray,int* Number);
// Add Host to the virtual machine
int AddHosts(char *HostName);
// Add Hosts to the virtual machine
int AddHosts(char **HostName,int NbHosts);
// Add all the Hosts wich are in the .rhosts file, to the virtual machine
int AddMaxHosts();
// Delete Host to the virtual machine
int DelHosts(char *HostName);
// Delete Hosts to the virtual machine
int DelHosts(char **HostName,int NbHosts);
// Initialisation of the active send buffer
void BuffInit();
// Send the active buffer to the task designed by Target
int Send(Parallel &Target,int Tag=1);
// Receve from the task designed by Sender
int Recieve(Parallel &Sender,int Tag=1);
int Recieve(int Tag=1);
// Catch the output of the slaves tasks
int CatchOut(FILE *OutFile=stdout,int Option=14, int val=0);
// Send the signal Sig to the task target
int SendSig(Parallel &Target,int Sig);
// kill the target task
int Kill(Parallel &Target);
// reset the task simbolized by the calling object, with the same
// programme on the same host
int Rebuild();
// reset the task simbolized by the calling object, with the
// programme "Prog" on the same host
int Rebuild(char* Prog);
// reset the task simbolized by the calling object, with the same
// programme on the host "Host"
int Rebuild(char* Host);
// reset the task simbolized by the calling object, with the
// programme "Prog" on the host "Host"
int Rebuild(char* Prog, char* Host);
// Default constructor, correspond to the current task
Parallel();
// Constructor of a task, wich will execute "Prog" on anyone of the
// available machine
Parallel(char* Prog);
// Constructor of a task, wich will execute "Prog" on the machine "Host"
Parallel( char* Prog, char * Host);
// Constructor of an object wich will symbolize the parent task
Parallel(int Master);
// Destructeur
~Parallel();
private:
// Name of the host
char* hostName;
char* prog;
// Courrant task identification
int tid;
// Parent task identification
int tidParent;
// Number of host of the virtual machine
int nbHosts;
// Number of different architectures in the virtual machine
int nbArch;
};