当前位置: 首页>>代码示例>>C++>>正文


C++ Controller::decompressPacket方法代码示例

本文整理汇总了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;
}
开发者ID:joydit,项目名称:solidframe,代码行数:47,代码来源:ipcpacket.cpp


注:本文中的Controller::decompressPacket方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。