27 #include <Ice/Initialize.h>
28 #include <Ice/ObjectAdapter.h>
35 #include <ArmarXCore/interface/core/SharedMemory.h>
50 template <
class MemoryObject,
class MemoryObjectMetaInfo = MetaInfoSizeBase>
53 virtual public SharedMemoryProviderInterface
68 std::string nameSuffix =
"")
71 memoryName =
object->getName() +
"Memory" + nameSuffix;
73 this->
object = object;
75 typename MemoryObjectMetaInfo::PointerType info =
new MemoryObjectMetaInfo();
80 info->capacity = capacity;
84 info->capacity = size;
88 initSharedMemory(
object, info);
92 typename MemoryObjectMetaInfo::PointerType info,
93 std::string nameSuffix =
"")
95 memoryName =
object->getName() +
"Memory" + nameSuffix;
97 this->
object = object;
101 initSharedMemory(
object, info);
120 if (object->
getState() < eManagedIceObjectStarting)
124 "Started IceSharedMemoryProvider before component is in connected state.");
140 memoryAdapter->remove(
id);
141 object->getIceManager()->getIceGridSession()->getAdmin()->removeObject(
id);
142 memoryAdapter->destroy();
143 memoryAdapter = NULL;
157 return sharedMemoryProvider->getMemory();
168 auto prov = sharedMemoryProvider;
171 return sharedMemoryProvider->getScopedWriteLock();
182 auto prov = sharedMemoryProvider;
185 return sharedMemoryProvider->getScopedReadLock();
199 sharedMemoryProvider->lock();
208 sharedMemoryProvider->unlock();
215 getData(MetaInfoSizeBasePtr& info,
const Ice::Current&
c = Ice::emptyCurrent)
override
219 info =
new MemoryObjectMetaInfo(*sharedMemoryProvider->getMetaInfo());
223 memcpy(buffer.data(),
getBuffer(), info->size);
234 if (sharedMemoryProvider->getMetaInfo()->size)
236 memcpy(buffer.data(),
getBuffer(), sharedMemoryProvider->getMetaInfo()->size);
243 setMetaInfo(
const typename MemoryObjectMetaInfo::PointerType& info,
bool threadSafe =
true)
250 sharedMemoryProvider->setMetaInfo(info);
252 buffer.resize(info->size);
258 typename MemoryObjectMetaInfo::PointerType
266 return new MemoryObjectMetaInfo(*sharedMemoryProvider->getMetaInfo());
282 getSize(
const Ice::Current&
c = Ice::emptyCurrent)
override
284 return sharedMemoryProvider->getSize();
301 Ice::ObjectPrx thisProxy =
302 object->getIceManager()->getIceGridSession()->registerObjectWithNewAdapter(
303 this, memoryName, memoryAdapter);
305 buffer.resize(sharedMemoryProvider->getSize());
310 initSharedMemory(
ManagedIceObject*
object,
typename MemoryObjectMetaInfo::PointerType info)
313 sharedMemoryProvider.reset(
317 std::string memoryName;
323 ManagedIceObject* object;
329 sharedMemoryProvider;