本文整理汇总了C++中BlockPtr::numRemaining方法的典型用法代码示例。如果您正苦于以下问题:C++ BlockPtr::numRemaining方法的具体用法?C++ BlockPtr::numRemaining怎么用?C++ BlockPtr::numRemaining使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BlockPtr
的用法示例。
在下文中一共展示了BlockPtr::numRemaining方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: readPointMajor
point_count_t OciReader::readPointMajor(PointView& view,
BlockPtr block, point_count_t numPts)
{
PointId nextId = view.size();
point_count_t numRead = 0;
if (m_compression)
{
#ifdef PDAL_HAVE_LAZPERF
auto cb = [this, &view, &nextId, &numRead](char *buf, size_t bufsize)
{
writePoint(view, nextId, buf);
if (m_cb)
m_cb(view, nextId);
nextId++;
numRead++;
};
const char *src = reinterpret_cast<const char *>(block->chunk.data());
size_t srcsize = block->chunk.size();
LazPerfDecompressor(cb, dbDimTypes(), block->numRemaining()).
decompress(src, srcsize);
#else
throwError("Can't decompress without LAZperf.");
#endif
}
else
{
char *pos = seekPointMajor(block);
size_t cnt = block->numRemaining();
while (numRead < numPts && cnt--)
{
writePoint(view, nextId, pos);
if (m_cb)
m_cb(view, nextId);
pos += packedPointSize();
nextId++;
numRead++;
}
}
block->setNumRemaining(block->numRemaining() - numRead);
return numRead;
}
示例2: readPointMajor
point_count_t OciReader::readPointMajor(PointView& view,
BlockPtr block, point_count_t numPts)
{
size_t numRemaining = block->numRemaining();
PointId nextId = view.size();
point_count_t numRead = 0;
if (m_compression)
{
#ifdef PDAL_HAVE_LAZPERF
LazPerfBuf buf(block->chunk);
LazPerfDecompressor<LazPerfBuf> decompressor(buf, dbDimTypes());
std::vector<char> ptBuf(decompressor.pointSize());
while (numRead < numPts && numRemaining > 0)
{
point_count_t numWritten =
decompressor.decompress(ptBuf.data(), ptBuf.size());
writePoint(view, nextId, ptBuf.data());
if (m_cb)
m_cb(view, nextId);
numRemaining--;
nextId++;
numRead++;
}
#else
throw pdal_error("Can't decompress without LAZperf.");
#endif
}
else
{
char *pos = seekPointMajor(block);
while (numRead < numPts && numRemaining > 0)
{
writePoint(view, nextId, pos);
if (m_cb)
m_cb(view, nextId);
pos += packedPointSize();
numRemaining--;
nextId++;
numRead++;
}
}
block->setNumRemaining(numRemaining);
return numRead;
}
示例3: readDimMajor
point_count_t OciReader::readDimMajor(PointView& view, BlockPtr block,
point_count_t numPts)
{
using namespace Dimension;
point_count_t numRemaining = block->numRemaining();
PointId startId = view.size();
point_count_t blockRemaining = numRemaining;
point_count_t numRead = 0;
DimTypeList dims = dbDimTypes();
for (auto di = dims.begin(); di != dims.end(); ++di)
{
PointId nextId = startId;
char *pos = seekDimMajor(*di, block);
blockRemaining = numRemaining;
numRead = 0;
while (numRead < numPts && blockRemaining > 0)
{
writeField(view, pos, *di, nextId);
pos += Dimension::size(di->m_type);
if (di->m_id == Id::PointSourceId && m_updatePointSourceId)
view.setField(Id::PointSourceId, nextId, block->obj_id);
if (m_cb && di == dims.rbegin().base() - 1)
m_cb(view, nextId);
nextId++;
numRead++;
blockRemaining--;
}
}
block->setNumRemaining(blockRemaining);
return numRead;
}