PaCO++  0.05
PaCO_operation Class Reference

#include <PaCO++_operation.h>

Collaboration diagram for PaCO_operation:

List of all members.

Classes

struct  _com_info_t

Public Types

typedef map< long, _com_info_t * > _com_info_map_t

Public Member Functions

void clearAllScheduleMemory ()
virtual void clearCommunicationMemoryId (long id) throw (InvalidArgument)
virtual void clearScheduleMemoryId (long id) throw (InvalidArgument)
virtual void configureTopo ()
_com_info_tgetComMemoryId (long id)
virtual void init (int rank, int total)
virtual void init_complete_context (PaCO_operation *op)
virtual void init_context (PaCO_operation *op)
virtual void init_context_args (PaCO_operation *op)
virtual void init_context_proxy (PaCO_operation *op)
virtual void init_return_context (PaCO_operation *op)
virtual void noCommunicationMemory ()
 PaCO_operation (int _number_arguments)
virtual void setClientId (CORBA::Short request_uid)
virtual void setClientTopo (PaCO::PacoTopology_t _client_topo, const string &way) throw (BadWayString)
virtual void setClientTopo (PaCO::PacoTopology_t _client_topo)
virtual void setComFab (paco_fabrique_com *fc)
virtual void setComSchedulingFab (paco_fabrique_comScheduling *ft)
virtual void setDisLibArg (int arg_number, const string &lib_name, const string &way) throw (BadWayString)
virtual void setFabManager (paco_fabrique_manager *fm)
virtual void setLibCom (const string &LibCom, void *_group)
virtual void setLibComScheduling (const string &LibComScheduling)
virtual void setLibThread (const string &LibThread)
virtual void setServerTopo (PaCO::PacoTopology_t _serveur_topo, const string &way) throw (BadWayString)
virtual void setThreadFab (paco_fabrique_thread *ft)
virtual void setTypeClient (bool type)
virtual void useCommunicationMemoryId (long id) throw (InvalidArgument)
virtual ~PaCO_operation ()

Public Attributes

_com_info_map_t _com_info_map
long _current_id
bool _exception
int _level
PaCO::distLoc_t _mode
CORBA::Short client_id
paco_fabrique_comFabCom
paco_fabrique_comSchedulingFabComScheduling
paco_fabrique_managerFabManager
paco_fabrique_threadFabThread
void * group
DistributionLibrary ** libraries_in
std::vector< char * > libraries_in_name
DistributionLibrary ** libraries_out
std::vector< char * > libraries_out_name
paco_commy_com
paco_comSchedulingmy_comScheduling
paco_conditionmy_condition
paco_conditionmy_condition2
paco_mutexmy_mutex
paco_mutexmy_mutex2
paco_mutexmy_mutex3
int myRank
PaCO::PacoTopology_t mytopo
int number_arguments
int number_stubs
int return_op
PaCO::PacoTopology_t serveur_topo_aller
PaCO::PacoTopology_t serveur_topo_retour
bool termine
bool termine2
bool typeClient

Detailed Description

Definition at line 29 of file PaCO++_operation.h.


Member Typedef Documentation

Definition at line 143 of file PaCO++_operation.h.


Constructor & Destructor Documentation

PaCO_operation::PaCO_operation ( int  _number_arguments)

Definition at line 13 of file PaCO++_operation.cc.

References _current_id, _exception, _level, _mode, client_id, FabCom, FabComScheduling, FabManager, FabThread, libraries_in, libraries_in_name, libraries_out, libraries_out_name, my_comScheduling, myRank, mytopo, number_arguments, paco_getFabriqueManager(), return_op, PaCO::ServerSide, termine, termine2, PaCO::PacoTopology_s::total, and typeClient.

{
  // Default case : sequential client
  _current_id = -1;
  myRank = 0;
  mytopo.total = 1;
  _mode = PaCO::ServerSide;
  typeClient = false;
  termine = false;
  termine2 = false;
  client_id = -1;
  number_arguments = _number_arguments;
  libraries_in = new DistributionLibrary*[number_arguments];
  libraries_out = new DistributionLibrary*[number_arguments];
#ifdef PACO_WARN_DISTLIB
  libraries_in_name.resize(number_arguments);
  libraries_out_name.resize(number_arguments);
#endif
  for(int i=0; i<number_arguments; i++)
    {
      libraries_in[i] = NULL;
      libraries_out[i] = NULL;
#ifdef PACO_WARN_DISTLIB
      libraries_in_name[i]=NULL;
      libraries_out_name[i]=NULL;
#endif
    }
  FabManager=paco_getFabriqueManager();
  FabThread=0;
  FabCom=0;
  FabComScheduling=0;
  my_comScheduling=0;
  return_op = 0;

  // Exception handling
  _exception = false;
  _level = 0;

  // Timing
#ifdef PADICO
  _ticks=(padico_timing_t*)malloc(sizeof(padico_timing_t)*10);
#endif

}

Here is the call graph for this function:

Definition at line 58 of file PaCO++_operation.cc.

References libraries_in, libraries_in_name, libraries_out, libraries_out_name, my_condition, my_condition2, my_mutex, my_mutex2, my_mutex3, and number_arguments.

{
#ifdef PACO_WARN_DISTLIB
  for(int i=0; i<number_arguments; i++)
    {
      if (libraries_in_name[i])
   free(libraries_in_name[i]);
      if (libraries_out_name[i])
   free(libraries_out_name[i]);
    }
#endif
  delete libraries_in;
  delete libraries_out;
  delete my_mutex;
  delete my_condition;
  delete my_mutex2;
  delete my_condition2;
  delete my_mutex3;
  // Memories must be deleted
}

Member Function Documentation

Definition at line 614 of file PaCO++_operation.cc.

References paco_comScheduling::clearAllSchedules(), and my_comScheduling.

Referenced by configureTopo().

Here is the call graph for this function:

void PaCO_operation::clearCommunicationMemoryId ( long  id) throw (InvalidArgument) [virtual]

Definition at line 586 of file PaCO++_operation.cc.

{
  if (id<0)
    throw new InvalidArgument("clearCommunicationMemeoryId expects an id >0");
  
#ifdef DEBUG_INTERNAL
  std::cerr <<"[INFO] clearing communication memory Id "<<id<<endl;
#endif
  
  _com_info_map_t::iterator it2 = _com_info_map.find(id);
  if (it2 != _com_info_map.end())
    {
      delete _com_info_map[id];
      _com_info_map.erase(it2);
    }

  assert(my_comScheduling!=0);
  my_comScheduling->clearScheduleId(id);
}
void PaCO_operation::clearScheduleMemoryId ( long  id) throw (InvalidArgument) [virtual]

Definition at line 607 of file PaCO++_operation.cc.

Definition at line 527 of file PaCO++_operation.cc.

References _com_info_map.

{
  // lookup existing communication info
  _com_info_map_t::iterator it2 = _com_info_map.find(id);
  if (it2 != _com_info_map.end()) 
    {
#ifdef DEBUG_INTERNAL
      std::cerr <<"[INFO] found communication info for Id "<<id<<endl;
#endif
      return  _com_info_map[id];
    }
  else
    {
      return NULL;
    }
}
void PaCO_operation::init ( int  rank,
int  total 
) [virtual]

Definition at line 342 of file PaCO++_operation.cc.

References myRank, mytopo, and PaCO::PacoTopology_s::total.

{
    myRank = rank;
    mytopo.total = total;
}
virtual void PaCO_operation::init_complete_context ( PaCO_operation op) [inline, virtual]

Definition at line 87 of file PaCO++_operation.h.

{ cerr << "WARNING : init_complete_context of PaCO_Operation" << endl;}

Definition at line 545 of file PaCO++_operation.cc.

References _current_id.

{
  _current_id = -1; // _DO_NOT_USE_COMMUNICATION_MEMORY;

#ifdef DEBUG_INTERNAL
  std::cerr <<"[INFO] not using memory"<<endl;
#endif

}
void PaCO_operation::setClientId ( CORBA::Short  request_uid) [virtual]

Definition at line 80 of file PaCO++_operation.cc.

References client_id.

{
  client_id = request_uid;
}
void PaCO_operation::setClientTopo ( PaCO::PacoTopology_t  _client_topo,
const string &  way 
) throw (BadWayString) [virtual]

Definition at line 405 of file PaCO++_operation.cc.

{
   if (way == "in")
     {
       serveur_topo_retour = _client_topo;
     }
   else if (way == "out")
     {
       serveur_topo_aller = _client_topo;
     }
   else
     {
       // Bad way string
       throw BadWayString(way);
     }
}
void PaCO_operation::setClientTopo ( PaCO::PacoTopology_t  _client_topo) [virtual]

Definition at line 423 of file PaCO++_operation.cc.

References serveur_topo_retour.

{
  serveur_topo_retour =  _client_topo;
}
void PaCO_operation::setComFab ( paco_fabrique_com fc) [virtual]

If not set, use the fabrique manager

Definition at line 201 of file PaCO++_operation.cc.

References FabCom.

{
    FabCom = fc;
}

If not set, use the fabrique manager If not set, use the fabrique manager

Definition at line 501 of file PaCO++_operation.cc.

References FabComScheduling.

{
    FabComScheduling = fcs;
}
void PaCO_operation::setDisLibArg ( int  arg_number,
const string &  lib_name,
const string &  way 
) throw (BadWayString) [virtual]

If not set, use the fabrique manager Arg part

Definition at line 261 of file PaCO++_operation.cc.

{
  if (way == "inout")
    {
      libraries_in [arg_number] = FabManager->get_distribution(lib_name)->create();
      libraries_out[arg_number] = FabManager->get_distribution(lib_name)->create();
#ifdef PACO_WARN_DISTLIB
      if (libraries_in_name[arg_number]) free(libraries_in_name[arg_number]);
      if (libraries_out_name[arg_number]) free(libraries_out_name[arg_number]);
      libraries_in_name [arg_number]  = strdup(lib_name.c_str());
      libraries_out_name [arg_number] = strdup(lib_name.c_str());
#endif
    }
  else if (way == "in")
    {
      libraries_in[arg_number] = FabManager->get_distribution(lib_name)->create();
#ifdef PACO_WARN_DISTLIB
      if (libraries_in_name[arg_number]) free(libraries_in_name[arg_number]);
      libraries_in_name [arg_number]  = strdup(lib_name.c_str());
#endif
    }
  else if (way == "out")
    {
      libraries_out[arg_number] = FabManager->get_distribution(lib_name)->create();
#ifdef PACO_WARN_DISTLIB
      if (libraries_out_name[arg_number]) free(libraries_out_name[arg_number]);
      libraries_out_name [arg_number] = strdup(lib_name.c_str());
#endif
    }
  else
    {
      // Bad way string
      throw BadWayString(way);
    }
}

Associate a pfm to this object. By default, paco_operation is associated to a FabriqueManager (cf paco_getFabriqueManager())

Definition at line 195 of file PaCO++_operation.cc.

References FabManager.

{
    FabManager = fm;
}
void PaCO_operation::setLibCom ( const string &  LibCom,
void *  _group 
) [virtual]

If not set, use the fabrique manager

Definition at line 207 of file PaCO++_operation.cc.

References FabCom, FabManager, paco_fabrique_manager::get_com(), group, libraries_in, libraries_out, my_com, number_arguments, paco_fabrique_com::paco_create(), and DistributionLibrary::setCommunicator().

{
  if (FabCom==0)
    {
      if (FabManager)
   FabCom = FabManager->get_com(LibCom);
      else
   {
     cerr << "Error: Unable to instantiate lib com "<<LibCom<<endl;
     abort();
   }      
    }

    group = _group;
    my_com = FabCom->paco_create(group);

    for(int i=0; i<number_arguments; i++)
      {
        if (libraries_in[i])
        {
            libraries_in[i]->setCommunicator(group);
        }
        if (libraries_out[i])
        {
            libraries_out[i]->setCommunicator(group);
        }
      }
}

Here is the call graph for this function:

void PaCO_operation::setLibComScheduling ( const string &  LibComScheduling) [virtual]

If not set, use the fabrique manager

Definition at line 507 of file PaCO++_operation.cc.

References paco_fabrique_comScheduling::create_comScheduling(), FabComScheduling, FabManager, paco_fabrique_manager::get_comScheduling(), and my_comScheduling.

{
  if (FabComScheduling==0)
    {
      if (FabManager)
   FabComScheduling = FabManager->get_comScheduling(LibComScheduling);
      else
   {
     cerr << "Error: Unable to instantiate lib communication schedule "<<LibComScheduling<<endl;
     abort();
   }
   
    }
    
  if (my_comScheduling)
    delete my_comScheduling;
  my_comScheduling = FabComScheduling->create_comScheduling();
}

Here is the call graph for this function:

void PaCO_operation::setLibThread ( const string &  LibThread) [virtual]

If not set, use the fabrique manager

Definition at line 479 of file PaCO++_operation.cc.

References FabManager, FabThread, paco_fabrique_manager::get_thread(), my_condition, my_condition2, my_mutex, my_mutex2, my_mutex3, paco_fabrique_thread::paco_create_condition(), and paco_fabrique_thread::paco_create_mutex().

{
  if (FabThread==0)
    {
      if (FabManager)
   FabThread = FabManager->get_thread(LibThread);
      else
   {
     cerr << "Error: Unable to instantiate lib thread "<<LibThread<<endl;
     abort();
   }
   
    }
    
  my_mutex = FabThread->paco_create_mutex();
  my_condition = FabThread->paco_create_condition(my_mutex);
  my_mutex2 = FabThread->paco_create_mutex();
  my_condition2 = FabThread->paco_create_condition(my_mutex2);
  my_mutex3 = FabThread->paco_create_mutex();
}

Here is the call graph for this function:

void PaCO_operation::setServerTopo ( PaCO::PacoTopology_t  _serveur_topo,
const string &  way 
) throw (BadWayString) [virtual]

Definition at line 429 of file PaCO++_operation.cc.

Referenced by init_context(), and init_return_context().

{
   if (way == "in")
     {
       serveur_topo_aller = _serveur_topo;
     }
   else if (way == "out")
     {
       serveur_topo_retour = _serveur_topo;
     }
   else
     {
       // Bad way string
       throw BadWayString(way);
     }
}

If not set, use the fabrique manager

Definition at line 473 of file PaCO++_operation.cc.

References FabThread.

{
    FabThread = ft;
}
void PaCO_operation::setTypeClient ( bool  type) [virtual]

Object part

Definition at line 398 of file PaCO++_operation.cc.

References typeClient.

{
    typeClient = type;
}
void PaCO_operation::useCommunicationMemoryId ( long  id) throw (InvalidArgument) [virtual]

Definition at line 556 of file PaCO++_operation.cc.

{
  if (id<0)
    throw new InvalidArgument("useCommunicationMemeoryId expect an id >0");

#ifdef DEBUG_INTERNAL
  std::cerr <<"[INFO] using memory Id "<<id<<endl;
#endif

  // set current id
  _current_id = id;

  // Beta patch
  for(int i=0; i<number_arguments; i++)
    {
      if (libraries_in[i])
        {
     bool res=libraries_in[i]->setComId(id);
     if (!res) {
#ifdef PACO_WARN_DISTLIB
       std::cerr << "warning: argument #"<<i<<" with dist lib "<<libraries_in_name[i]<<" does not support comm cache\n";
#else
       std::cerr << "warning: argument #"<<i<<" does not support comm cache\n";
#endif
     }
        }
    }
}

Member Data Documentation

Definition at line 136 of file PaCO++_operation.h.

Referenced by noCommunicationMemory(), and PaCO_operation().

Definition at line 131 of file PaCO++_operation.h.

Referenced by PaCO_operation().

Definition at line 132 of file PaCO++_operation.h.

Referenced by PaCO_operation().

Definition at line 128 of file PaCO++_operation.h.

Referenced by PaCO_operation(), and setClientId().

Definition at line 115 of file PaCO++_operation.h.

Referenced by PaCO_operation(), and ~PaCO_operation().

Definition at line 116 of file PaCO++_operation.h.

Referenced by PaCO_operation(), and ~PaCO_operation().

Definition at line 95 of file PaCO++_operation.h.

Referenced by init_context(), and init_return_context().

Definition at line 126 of file PaCO++_operation.h.

Referenced by PaCO_operation().

Definition at line 127 of file PaCO++_operation.h.

Referenced by PaCO_operation().


The documentation for this class was generated from the following files: