00001 #include "TypelibMarshallerBase.hpp" 00002 #include "MQTypelibMarshaller.hpp" 00003 00004 using namespace orogen_transports; 00005 00006 typedef TypelibMarshallerBase::Handle TypelibHandle; 00007 00008 MQTypelibMarshallerBase::MQTypelibMarshallerBase(orogen_transports::TypelibMarshallerBase* marshaller) 00009 : marshaller(marshaller) {} 00010 00011 MQTypelibMarshallerBase::~MQTypelibMarshallerBase() 00012 { 00013 delete marshaller; 00014 } 00015 00016 void* MQTypelibMarshallerBase::createCookie() const 00017 { 00018 return marshaller->createHandle(); 00019 } 00020 00021 void MQTypelibMarshallerBase::deleteCookie(void* cookie) const 00022 { 00023 marshaller->deleteHandle(static_cast<TypelibHandle*>(cookie)); 00024 } 00025 00026 std::pair<void const*,int> MQTypelibMarshallerBase::fillBlob( RTT::base::DataSourceBase::shared_ptr source, void* blob, int size, void* cookie) const 00027 { 00028 TypelibHandle* handle = static_cast<TypelibHandle*>(cookie); 00029 marshaller->setOrocosSample(handle, const_cast<void*>(source->getRawConstPointer())); 00030 int marshalled_size = marshaller->marshal(blob, size, handle); 00031 if (marshalled_size == 0) 00032 return std::make_pair(static_cast<void const*>(0), 0); 00033 else 00034 return std::make_pair(static_cast<void const*>(blob), marshalled_size); 00035 } 00036 00037 bool MQTypelibMarshallerBase::updateFromBlob(const void* blob, int size, RTT::base::DataSourceBase::shared_ptr target, void* cookie) const 00038 { 00039 TypelibHandle* handle = static_cast<TypelibHandle*>(cookie); 00040 marshaller->setOrocosSample(handle, target->getRawPointer(), false); 00041 marshaller->unmarshal(blob, size, handle); 00042 return true; 00043 } 00044 00045 unsigned int MQTypelibMarshallerBase::getSampleSize( RTT::base::DataSourceBase::shared_ptr sample, void* cookie) const 00046 { 00047 TypelibHandle* handle = static_cast<TypelibHandle*>(cookie); 00048 marshaller->setOrocosSample(handle, const_cast<void*>(sample->getRawConstPointer())); 00049 return marshaller->getMarshallingSize(handle); 00050 } 00051