本文整理汇总了C++中Vec::LendData方法的典型用法代码示例。如果您正苦于以下问题:C++ Vec::LendData方法的具体用法?C++ Vec::LendData怎么用?C++ Vec::LendData使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Vec
的用法示例。
在下文中一共展示了Vec::LendData方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: DocToSource
int Pdfsync::DocToSource(UINT pageNo, PointI pt, ScopedMem<WCHAR>& filename, UINT *line, UINT *col)
{
if (IsIndexDiscarded())
if (RebuildIndex() != PDFSYNCERR_SUCCESS)
return PDFSYNCERR_SYNCFILE_CANNOT_BE_OPENED;
// find the entry in the index corresponding to this page
if (pageNo <= 0 || pageNo >= sheetIndex.Count() || pageNo > (UINT)engine->PageCount())
return PDFSYNCERR_INVALID_PAGE_NUMBER;
// PdfSync coordinates are y-inversed
RectI mbox = engine->PageMediabox(pageNo).Round();
pt.y = mbox.dy - pt.y;
// distance to the closest pdf location (in the range <PDFSYNC_EPSILON_SQUARE)
UINT closest_xydist = UINT_MAX;
UINT selected_record = UINT_MAX;
// If no record is found within a distance^2 of PDFSYNC_EPSILON_SQUARE
// (selected_record == -1) then we pick up the record that is closest
// vertically to the hit-point.
UINT closest_ydist = UINT_MAX; // vertical distance between the hit point and the vertically-closest record
UINT closest_xdist = UINT_MAX; // horizontal distance between the hit point and the vertically-closest record
UINT closest_ydist_record = UINT_MAX; // vertically-closest record
// read all the sections of 'p' declarations for this pdf sheet
for (size_t i = sheetIndex.At(pageNo); i < points.Count() && points.At(i).page == pageNo; i++) {
// check whether it is closer than the closest point found so far
UINT dx = abs(pt.x - (int)SYNC_TO_PDF_COORDINATE(points.At(i).x));
UINT dy = abs(pt.y - (int)SYNC_TO_PDF_COORDINATE(points.At(i).y));
UINT dist = dx * dx + dy * dy;
if (dist < PDFSYNC_EPSILON_SQUARE && dist < closest_xydist) {
selected_record = points.At(i).record;
closest_xydist = dist;
}
else if ((closest_xydist == UINT_MAX) && dy < PDFSYNC_EPSILON_Y &&
(dy < closest_ydist || (dy == closest_ydist && dx < closest_xdist))) {
closest_ydist_record = points.At(i).record;
closest_ydist = dy;
closest_xdist = dx;
}
}
if (selected_record == UINT_MAX)
selected_record = closest_ydist_record;
if (selected_record == UINT_MAX)
return PDFSYNCERR_NO_SYNC_AT_LOCATION; // no record was found close enough to the hit point
// We have a record number, we need to find its declaration ('l ...') in the syncfile
PdfsyncLine cmp; cmp.record = selected_record;
PdfsyncLine *found = (PdfsyncLine *)bsearch(&cmp, lines.LendData(), lines.Count(), sizeof(PdfsyncLine), cmpLineRecords);
assert(found);
if (!found)
return PDFSYNCERR_NO_SYNC_AT_LOCATION;
filename.Set(str::Dup(srcfiles.At(found->file)));
*line = found->line;
*col = found->column;
return PDFSYNCERR_SUCCESS;
}
示例2: QueueMessageForSending
// transfers the data to a thread that does the actual sending
static void QueueMessageForSending(Vec<byte>& msg)
{
size_t len = msg.Size();
if (0 == len)
return;
MemBlock *block = GetBlock(len);
if (block) {
block->Append(msg.LendData(), len);
SetEvent(gSendThreadEvent);
} else {
lf("memtrace.dll: QueueMessageForSending() couldn't queu %d bytes", (int)len);
}
}
示例3: Arrange
void VerticalLayout::Arrange(const Rect finalRect)
{
DirectionalLayoutData * e;
SizeInfo * si;
Vec<SizeInfo> sizes;
for (e = els.IterStart(); e; e = els.IterNext()) {
SizeInfo sizeInfo = { e->desiredSize.Height, e->sizeLayoutAxis, 0, 0 };
sizes.Append(sizeInfo);
}
RedistributeSizes(sizes.LendData(), sizes.Count(), finalRect.Height);
for (e = els.IterStart(), si = sizes.IterStart(); e; e = els.IterNext(), si = sizes.IterNext()) {
int dx = CalcScaledClippedSize(finalRect.Width, e->sizeNonLayoutAxis, e->desiredSize.Width);
int x = e->alignNonLayoutAxis.CalcOffset(dx, finalRect.Width);
e->element->Arrange(Rect(x, si->finalPos, dx, si->finalSize));
}
}
示例4: scope
WCHAR *EbookEngine::ExtractPageText(int pageNo, WCHAR *lineSep, RectI **coords_out, RenderTarget target)
{
ScopedCritSec scope(&pagesAccess);
str::Str<WCHAR> content;
Vec<RectI> coords;
bool insertSpace = false;
Vec<DrawInstr> *pageInstrs = GetHtmlPage(pageNo);
for (DrawInstr *i = pageInstrs->IterStart(); i; i = pageInstrs->IterNext()) {
RectI bbox = GetInstrBbox(i, pageBorder);
switch (i->type) {
case InstrString:
if (coords.Count() > 0 && bbox.x < coords.Last().BR().x) {
content.Append(lineSep);
coords.AppendBlanks(str::Len(lineSep));
CrashIf(*lineSep && !coords.Last().IsEmpty());
}
else if (insertSpace && coords.Count() > 0) {
int swidth = bbox.x - coords.Last().BR().x;
if (swidth > 0) {
content.Append(' ');
coords.Append(RectI(bbox.x - swidth, bbox.y, swidth, bbox.dy));
}
}
insertSpace = false;
{
ScopedMem<WCHAR> s(str::conv::FromHtmlUtf8(i->str.s, i->str.len));
content.Append(s);
size_t len = str::Len(s);
double cwidth = 1.0 * bbox.dx / len;
for (size_t k = 0; k < len; k++)
coords.Append(RectI((int)(bbox.x + k * cwidth), bbox.y, (int)cwidth, bbox.dy));
}
break;
case InstrRtlString:
if (coords.Count() > 0 && bbox.BR().x > coords.Last().x) {
content.Append(lineSep);
coords.AppendBlanks(str::Len(lineSep));
CrashIf(*lineSep && !coords.Last().IsEmpty());
}
else if (insertSpace && coords.Count() > 0) {
int swidth = coords.Last().x - bbox.BR().x;
if (swidth > 0) {
content.Append(' ');
coords.Append(RectI(bbox.BR().x, bbox.y, swidth, bbox.dy));
}
}
insertSpace = false;
{
ScopedMem<WCHAR> s(str::conv::FromHtmlUtf8(i->str.s, i->str.len));
content.Append(s);
size_t len = str::Len(s);
double cwidth = 1.0 * bbox.dx / len;
for (size_t k = 0; k < len; k++)
coords.Append(RectI((int)(bbox.x + (len - k - 1) * cwidth), bbox.y, (int)cwidth, bbox.dy));
}
break;
case InstrElasticSpace:
case InstrFixedSpace:
insertSpace = true;
break;
}
}
if (coords_out) {
CrashIf(coords.Count() != content.Count());
*coords_out = new RectI[coords.Count()];
memcpy(*coords_out, coords.LendData(), coords.Count() * sizeof(RectI));
}
return content.StealData();
}