本文整理汇总了C++中ArrayT::PushBackEmptyExact方法的典型用法代码示例。如果您正苦于以下问题:C++ ArrayT::PushBackEmptyExact方法的具体用法?C++ ArrayT::PushBackEmptyExact怎么用?C++ ArrayT::PushBackEmptyExact使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ArrayT
的用法示例。
在下文中一共展示了ArrayT::PushBackEmptyExact方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: PackBits
ArrayT<uint8_t> StateT::GetDeltaMessage(const StateT& Other, bool Compress) const
{
// Delta-compress the data.
static ArrayT<uint8_t> DeltaData;
DeltaData.Overwrite();
for (unsigned int i = 0; i < m_Data.Size(); i++)
DeltaData.PushBack(m_Data[i] ^ (i < Other.m_Data.Size() ? Other.m_Data[i] : 0));
// Optionally RLE-compress the data, then write the delta message.
ArrayT<uint8_t> DeltaMessage;
if (Compress)
{
DeltaMessage.PushBack(1);
PackBits(DeltaMessage, &DeltaData[0], DeltaData.Size());
#ifdef DEBUG
// Make sure that unpacking yields the original data.
ArrayT<uint8_t> Check;
UnpackBits(Check, &DeltaMessage[1], DeltaMessage.Size()-1);
assert(Check == DeltaData);
#endif
}
else
{
DeltaMessage.PushBack(0);
DeltaMessage.PushBack(DeltaData);
}
#if 0
static std::ofstream Log("compress_log.txt");
Log << "\n" << DeltaData.Size() << " bytes in original delta message\n";
{
uLongf DestLen=compressBound(DeltaData.Size());
ArrayT<uint8_t> Dest;
Dest.PushBackEmptyExact(DestLen);
const int Result=compress2(&Dest[0], &DestLen, &DeltaData[0], DeltaData.Size(), 9);
Log << DestLen << " bytes in deflate-compressed message, ";
Log << "compression result is " << Result << " (" << (Result == Z_OK ? "Z_OK" : "error") << ")\n";
}
{
ArrayT<uint8_t> DestRLE;
PackBits(DestRLE, &DeltaData[0], DeltaData.Size());
Log << DestRLE.Size() << " bytes in RLE-compressed message.\n";
ArrayT<uint8_t> DestRLE_CHECK;
UnpackBits(DestRLE_CHECK, &DestRLE[0], DestRLE.Size());
assert(DestRLE_CHECK == DeltaData);
}
#endif
return DeltaMessage;
}