std::cerr<<"Error : "<<__FILE__<<":"<<__LINE__<<" the reference counter of mem should never be zero when packing \n";
std::cerr<<"Warning: "<<__FILE__<<":"<<__LINE__<<" impossible to check the type "<<demangle(typeid(T).name())<<" please consider to add a static method \"void noPointers()\"\n";
#endif
ext.allocate(sizeof(T));
memcpy((T*)ext.getPointer(),&obj,sizeof(T));
// update statistic
sts.incReq();
}
/*! \brief it add a request to pack an object
*
* \param req requests vector
*
*/
staticvoidpackRequest(std::vector<size_t>&req)
{
req.push_back(sizeof(T));
}
};
/*! \brief Packer class for objects
*
* \tparam T Type of Memory
* \tparam T object type to pack
* \tparam Mem Memory origin HeapMemory CudaMemory ...
std::cerr<<"Error : "<<__FILE__<<":"<<__LINE__<<" the reference counter of mem should never be zero when packing \n";
if(obj.noPointers()==false)
std::cerr<<"Error: "<<__FILE__<<":"<<__LINE__<<" the type "<<demangle(typeid(T).name())<<" has pointers inside, sending pointers values has no sense\n";
#endif
ext.allocate(sizeof(T));
memcpy((T*)ext.getPointer(),&obj,sizeof(T));
// Update statistic
sts.incReq();
}
/*! \brief
/*! \brief it add a request to pack an object
*
* \param req requests vector
*
*/
size_tpackRequest(std::vector<size_t>&req)
staticvoidpackRequest(std::vector<size_t>&req)
{
returnreq.push_back(sizeof(T));
req.push_back(sizeof(T));
}
};
/*! \brief Packer class for vectors
*
* \tparam T Type of Memory
* \tparam T vector type to pack
* \tparam Mem Memory origin HeapMemory CudaMemory ...
*
*/
template<typenameT,typenameMem>
...
...
@@ -118,61 +202,110 @@ class Packer<T,Mem,PACKER_VECTOR>
{
public:
/*! \brief pack a vector of objects selecting the properties to pack
/*! \brief pack a vector selecting the properties to pack
*
* \param mem preallocated memory where to pack the vector