本文整理汇总了C++中Controller::decompressPacket方法的典型用法代码示例。如果您正苦于以下问题:C++ Controller::decompressPacket方法的具体用法?C++ Controller::decompressPacket怎么用?C++ Controller::decompressPacket使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Controller
的用法示例。
在下文中一共展示了Controller::decompressPacket方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: decompress
bool Packet::decompress(Controller &_rctrl){
if(!(flags() & CompressedFlag)){
return true;
}
const uint32 updatesz = updateCount() * sizeof(uint32);
const uint32 headersize = headerSize() - updatesz;
PacketContext bctx(headersize);
uint32 datasz = dl + updatesz;
char *pd = pb + headersize;
uint32 tmpdatasz = datasz;
char *tmppd(pd);
vdbgx(Debug::ipc, "packet before decompress id = "<<this->id()<<" dl = "<<this->dl<<" size = "<<bufferSize());
if(_rctrl.decompressPacket(bctx, tmppd, tmpdatasz)){
if(bctx.reqbufid != (uint)-1){
if(tmppd == pd){
THROW_EXCEPTION("Requested buffer not returned");
}
tmppd -= bctx.offset;
memcpy(tmppd, pb, headersize);
Specific::pushBuffer(this->pb, Specific::capacityToIndex(this->bc));
this->bc = Specific::indexToCapacity(bctx.reqbufid);
this->pb = tmppd;
}else{
//on-place decompression
if(tmppd != pd){
THROW_EXCEPTION("Invalid buffer pointer returned");
}
}
this->flags(this->flags() & (~CompressedFlag));
this->dl += (tmpdatasz - datasz);
vdbgx(Debug::ipc, "packet success decompress id = "<<this->id()<<" dl = "<<this->dl<<" size = "<<bufferSize());
}else{
//decompression failed
if(bctx.reqbufid != (uint)-1){
if(pd == tmppd){
THROW_EXCEPTION("Allocated buffer must be returned even on failed compression");
}
tmppd -= bctx.offset;
Specific::pushBuffer(tmppd, bctx.reqbufid);
}
vdbgx(Debug::ipc, "packet failed decompress id = "<<this->id()<<" dl = "<<this->dl<<" size = "<<bufferSize());
return false;
}
return true;
}