34#ifndef HPP_CORBASERVER_SERVANT_BASE_HH 
   35#define HPP_CORBASERVER_SERVANT_BASE_HH 
   41namespace corbaServer {
 
   73#define SERVANT_BASE_TYPEDEFS(idlObj, hppObj)                             \ 
   75  using ::hpp::corbaServer::AbstractServantBase<hppObj>::server_;         \ 
   79  typedef _Storage Storage;                                               \ 
   80  typedef idlObj Object;                                                  \ 
   81  typedef idlObj##_ptr Object_ptr;                                        \ 
   82  typedef idlObj##_var Object_var;                                        \ 
   83  typedef ::hpp::corbaServer::ServantBase<hppObj, _Storage> _ServantBase; \ 
   84  using _ServantBase::get;                                                \ 
   85  using _ServantBase::getT;                                               \ 
   86  using _ServantBase::getS 
 
  121template <
typename T, 
typename _Storage>
 
  172    PortableServer::Servant servant =
 
  173        dynamic_cast<PortableServer::Servant
>(
this);
 
  175      throw Error(
"The object was deleted. I could not delete the servant.");
 
  178    PortableServer::ObjectId_var 
objectId =
 
  180    this->
server_->
poa()->deactivate_object(objectId.in());
 
 
  200  void objectExpired()
 const {
 
  202    PortableServer::Servant servant =
 
  203        dynamic_cast<PortableServer::Servant
>(
const_cast<ServantBase*
>(
this));
 
  205      throw Error(
"The object was deleted. I could not delete the servant.");
 
  208    PortableServer::ObjectId_var 
objectId =
 
  210    this->
server_->
poa()->deactivate_object(objectId.in());
 
  211    throw Error(
"The object has been deleted. I delete the servant.");
 
 
  232template <
typename T, 
typename Base>
 
  249typedef PortableServer::Servant_var<PortableServer::ServantBase>
 
  252template <
typename S, 
typename P>
 
  255  PortableServer::Servant 
s = 
server->poa()->reference_to_servant(
p);
 
  256  if (
s == 
NULL) 
throw Error(
"The servant is not located here");
 
  257  return dynamic_cast<S*
>(
s);
 
 
  262template <
typename T, 
typename P>
 
  265  if (
s.in() == 
NULL) 
throw Error(
"The servant is not located here");
 
 
  278template <
typename P, 
typename S>
 
  282  if (servant != 
NULL) {
 
  284    return servant->_this();
 
  287  PortableServer::Servant_var<S> 
d(
s);
 
 
  299template <
typename U, 
typename V, 
template <
typename> 
class StorageTpl>
 
  301  static StorageTpl<U> run(
const StorageTpl<V>& o) {
 
  302    return o.template cast<U>();
 
  307template <
typename U, 
typename V>
 
  309  static shared_ptr<U> run(
const shared_ptr<V>& o) {
 
  310    return dynamic_pointer_cast<U>(o);
 
  315template <
typename U, 
typename V>
 
  317  static weak_ptr<U> run(
const weak_ptr<V>& o) {
 
  318    return dynamic_pointer_cast<U>(o.lock());
 
  325template <
typename U, 
typename V, 
template <
typename> 
class StorageTpl>
 
  327  return details::storage_cast_impl<U, V, StorageTpl>::run(
o);
 
  332template <
typename T, 
typename P>
 
  335  if (
s.in() == 
NULL) 
throw Error(
"The servant is not located here");
 
  339  if (
asb == 
NULL) 
throw Error(
"Not an object of the correct type.");
 
  341  if (!
ret) 
throw Error(
"Object is not of the correct type.");
 
 
  348template <
typename ServantBaseType>
 
  351  typedef typename ServantBaseType::Storage 
Storage;
 
 
  367template <
typename ServantBaseType, 
typename ServantType>
 
  376    typedef typename ServantType::Storage 
Storage;
 
  379    if (
u.use_count() > 0)
 
 
 
  385template <
typename ServantBaseType>
 
  388template <
typename ServantBaseType>
 
  390  typedef std::vector<ServantFactoryBase<ServantBaseType>*> 
vector_t;
 
  391  typedef typename vector_t::iterator 
iterator;
 
  396    if (
d >= (*_obj)->depth()) {
 
  401  vec.push_back(
object);
 
 
  406template <
typename ServantBaseType, 
typename ReturnType>
 
  408    Server* 
server, 
const typename ServantBaseType::Storage& 
t) {
 
  410  typedef typename ReturnType::Object_var Object_var;
 
  412  assert(CORBA::Object_Helper::is_nil(servant.in()));
 
  414  typedef std::vector<ServantFactoryBase<ServantBaseType>*> 
vector_t;
 
  415  typedef typename vector_t::iterator 
iterator;
 
  419    servant = (*_obj)->servant(
server, 
t);
 
  420    if (!CORBA::Object_Helper::is_nil(servant.in())) {
 
  422      return Object_var(ReturnType::Object::_narrow(servant._retn()));
 
 
  428template <
typename ServantBaseType>
 
  430    Server* 
server, 
const typename ServantBaseType::Storage& 
t) {
 
  433  typedef typename ServantBaseType::Object_var Object_var;
 
  435  assert(CORBA::Object_Helper::is_nil(servant.in()));
 
  437  typedef std::vector<ServantFactoryBase<ServantBaseType>*> 
vector_t;
 
  438  typedef typename vector_t::iterator 
iterator;
 
  442    servant = (*_obj)->servant(
server, 
t);
 
  443    if (!CORBA::Object_Helper::is_nil(servant.in())) 
break;
 
 
  456  template <
typename InContainer>
 
  460    seq->length((CORBA::ULong)
len);
 
  463    typename InContainer::const_iterator 
it = 
input.begin();
 
  465      (*seq)[(CORBA::ULong)
i] =
 
 
 
  487#define HPP_CORBASERVER_ADD_DOWNCAST_OBJECT(ServantType, BaseServantType, \ 
  489  struct HPP_CORE_DLLAPI __InitializerClass_##ServantType {               \ 
  490    __InitializerClass_##ServantType() {                                  \ 
  491      ::hpp::corbaServer::addDowncastObjects<BaseServantType>(            \ 
  492          new ::hpp::corbaServer::ServantFactory<BaseServantType,         \ 
  493                                                 ServantType>(depth));    \ 
  496  HPP_CORBASERVER_DLLLOCAL __InitializerClass_##ServantType               \ 
  497      __instance_##ServantType; 
 
Definition servant-base.hh:104
 
weak_ptr< T > TWkPtr_t
Definition servant-base.hh:109
 
virtual ~AbstractServantBase()
Definition servant-base.hh:106
 
shared_ptr< T > TShPtr_t
Definition servant-base.hh:108
 
AbstractServantBase(Server *server)
Definition servant-base.hh:116
 
Server * server_
Definition servant-base.hh:118
 
virtual TShPtr_t get() const =0
 
virtual Server::ServantKey getServantKey() const
Definition servant-base.hh:113
 
Abstract class used to avoid duplication of the servants.
Definition servant-base.hh:92
 
virtual bool expired() const =0
 
virtual Server::ServantKey getServantKey() const =0
 
Definition servant-base.hh:233
 
long use_count() const
Definition servant-base.hh:242
 
weak_ptr< T > ptr_t
Definition servant-base.hh:235
 
T element_type
Definition servant-base.hh:245
 
ptr_t element
Definition servant-base.hh:237
 
AbstractStorage(const ptr_t &_element)
Definition servant-base.hh:239
 
Definition servant-base.hh:122
 
void deleteThis()
Definition servant-base.hh:168
 
bool persistantStorage() const
See persistantStorage(bool)
Definition servant-base.hh:166
 
virtual ~ServantBase()
Definition servant-base.hh:130
 
const Storage & getS() const
Definition servant-base.hh:155
 
_Storage Storage
Definition servant-base.hh:124
 
Storage wrappedObject_
Definition servant-base.hh:197
 
bool deleteIfExpired()
Definition servant-base.hh:183
 
ServantBase(Server *server, const Storage &_s)
Definition servant-base.hh:192
 
weak_ptr< typename Storage::element_type > StorageElementWkPtr_t
Definition servant-base.hh:127
 
shared_ptr< typename Storage::element_type > StorageElementShPtr_t
Definition servant-base.hh:128
 
bool expired() const final
Definition servant-base.hh:141
 
void persistantStorage(bool persistant)
Set to true if the servant should take ownership of this object.
Definition servant-base.hh:158
 
StorageElementShPtr_t getT() const
Definition servant-base.hh:146
 
virtual TShPtr_t get() const
Definition servant-base.hh:132
 
Definition servant-base.hh:349
 
ServantBaseType::Object_var Object_var
Definition servant-base.hh:352
 
size_type depth() const
Definition servant-base.hh:361
 
ServantFactoryBase(const size_type &depth)
Definition servant-base.hh:354
 
virtual Object_var servant(Server *server, const Storage &obj)=0
 
ServantBaseType::Storage Storage
Definition servant-base.hh:351
 
Implementation of Hpp module Corba server.
Definition server.hh:78
 
void removeServant(PortableServer::Servant servant)
 
PortableServer::POA_var poa()
Definition server.hh:114
 
void * ServantKey
Definition server.hh:161
 
Corba exception travelling through the Corba channel.
Definition common.idl:27
 
ReturnType::Object_var makeServantDownCast(Server *server, const typename ServantBaseType::Storage &t)
Definition servant-base.hh:407
 
PortableServer::Servant_var< S > reference_to_servant(Server *server, const P &p)
Definition servant-base.hh:253
 
P makeServant(Server *server, S *s)
Definition servant-base.hh:279
 
void addDowncastObjects(ServantFactoryBase< ServantBaseType > *const object)
Definition servant-base.hh:389
 
PortableServer::Servant_var< PortableServer::ServantBase > ServantBase_var
Definition servant-base.hh:250
 
std::vector< ServantFactoryBase< ServantBaseType > * > & objectDowncasts()
 
auto reference_to_object(Server *server, const P &p)
Definition servant-base.hh:333
 
AbstractServantBase< T > * reference_to_servant_base(Server *server, const P &p)
Definition servant-base.hh:263
 
pinocchio::vector_t vector_t
Definition fwd.hh:107
 
pinocchio::size_type size_type
Definition fwd.hh:110
 
Implement CORBA interface `‘Obstacle’'.
Definition client.hh:46
 
Definition servant-base.hh:368
 
ServantBaseType::Storage StorageBase
Definition servant-base.hh:370
 
ServantBaseType::Object_var Object_var
Definition servant-base.hh:369
 
ServantFactory(const size_type &depth)
Definition servant-base.hh:372
 
virtual Object_var servant(Server *s, const StorageBase &o)
Definition servant-base.hh:375
 
Definition servant-base.hh:89
 
Definition servant-base.hh:451
 
OutType * operator()(const InContainer &input)
Definition servant-base.hh:457
 
Server * wrappedObject_
Definition servant-base.hh:452
 
vectorToSeqServant(Server *_s)
Definition servant-base.hh:454