本文整理汇总了C++中Vec::RemoveAt方法的典型用法代码示例。如果您正苦于以下问题:C++ Vec::RemoveAt方法的具体用法?C++ Vec::RemoveAt怎么用?C++ Vec::RemoveAt使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Vec
的用法示例。
在下文中一共展示了Vec::RemoveAt方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ChmTocItem
// Callers delete the ToC tree, so we re-create it from prerecorded
// values (which is faster than re-creating it from html every time)
DocTocItem *ChmModel::GetTocTree()
{
DocTocItem *root = NULL, **nextChild = &root;
Vec<DocTocItem *> levels;
int idCounter = 0;
for (ChmTocTraceItem *ti = tocTrace->IterStart(); ti; ti = tocTrace->IterNext()) {
ChmTocItem *item = new ChmTocItem(ti->title, ti->pageNo, ti->url);
item->id = ++idCounter;
// append the item at the correct level
CrashIf(ti->level < 1);
if ((size_t)ti->level <= levels.Count()) {
levels.RemoveAt(ti->level, levels.Count() - ti->level);
levels.Last()->AddSibling(item);
}
else {
(*nextChild) = item;
levels.Append(item);
}
nextChild = &item->child;
}
if (root)
root->OpenSingleNode();
return root;
}
示例2: Paint
UINT RenderCache::Paint(HDC hdc, RectI bounds, DisplayModel *dm, int pageNo,
PageInfo *pageInfo, bool *renderOutOfDateCue)
{
assert(pageInfo->shown && 0.0 != pageInfo->visibleRatio);
int rotation = dm->Rotation();
float zoom = dm->ZoomReal();
USHORT targetRes = GetTileRes(dm, pageNo);
USHORT maxRes = GetMaxTileRes(dm, pageNo, rotation);
if (maxRes < targetRes)
maxRes = targetRes;
Vec<TilePosition> queue;
queue.Append(TilePosition(0, 0, 0));
UINT renderDelayMin = RENDER_DELAY_UNDEFINED;
bool neededScaling = false;
while (queue.Count() > 0) {
TilePosition tile = queue.At(0);
queue.RemoveAt(0);
RectI tileOnScreen = GetTileOnScreen(dm->engine, pageNo, rotation, zoom, tile, pageInfo->pageOnScreen);
tileOnScreen = pageInfo->pageOnScreen.Intersect(tileOnScreen);
RectI isect = bounds.Intersect(tileOnScreen);
if (isect.IsEmpty())
continue;
bool isTargetRes = tile.res == targetRes;
UINT renderDelay = PaintTile(hdc, isect, dm, pageNo, tile, tileOnScreen, isTargetRes,
renderOutOfDateCue, isTargetRes ? &neededScaling : NULL);
if (!(isTargetRes && 0 == renderDelay) && tile.res < maxRes) {
queue.Append(TilePosition(tile.res + 1, tile.row * 2, tile.col * 2));
queue.Append(TilePosition(tile.res + 1, tile.row * 2, tile.col * 2 + 1));
queue.Append(TilePosition(tile.res + 1, tile.row * 2 + 1, tile.col * 2));
queue.Append(TilePosition(tile.res + 1, tile.row * 2 + 1, tile.col * 2 + 1));
}
if (isTargetRes && renderDelay > 0)
neededScaling = true;
renderDelayMin = min(renderDelay, renderDelayMin);
// paint tiles from left to right from top to bottom
if (tile.res > 0 && queue.Count() > 0 && tile.res < queue.At(0).res)
queue.Sort(cmpTilePosition);
}
#ifdef CONSERVE_MEMORY
if (!neededScaling) {
if (renderOutOfDateCue)
*renderOutOfDateCue = false;
// free tiles with different resolution
TilePosition tile(targetRes, (USHORT)-1, 0);
FreePage(dm, pageNo, &tile);
}
FreeNotVisible();
#endif
return renderDelayMin;
}
示例3: ParseSimple
static bool ParseSimple(ParserState *state)
{
Vec<NestingInfo> stack;
int parentNodeIdx = -1;
char *s = state->curr;
for (;;) {
if (!*s)
break;
ParsedLine p;
s = ParseSimpleLine(s, p);
if (!s)
return false;
if (p.isComment)
continue;
while (stack.Count() > 0) {
size_t pos = stack.Count() - 1;
NestingInfo it = stack.At(pos);
if (it.indent >= p.indent) {
stack.RemoveAt(pos);
} else {
parentNodeIdx = it.nodeIdx;
break;
}
}
if (parentNodeIdx != -1 && 0 == stack.Count())
return false;
int nodeIdx;
MarkupNode *node = state->AllocNode(nodeIdx, parentNodeIdx);
node->name = p.name;
node->attributes = p.attributes;
node->user = NULL;
state->cb->NewNode(node);
NestingInfo it;
it.indent = p.indent;
it.nodeIdx = nodeIdx;
stack.Append(it);
}
return 0 == stack.Count();
}
示例4: Visit
virtual void Visit(const WCHAR *name, const WCHAR *url, int level) {
int pageNo = CreatePageNoForURL(url);
ChmTocItem *item = new ChmTocItem(str::Dup(name), pageNo, str::Dup(url));
item->id = ++idCounter;
item->open = level == 1;
// append the item at the correct level
CrashIf(level < 1);
if (!*root) {
*root = item;
lastItems.Append(*root);
} else if ((size_t)level <= lastItems.Count()) {
lastItems.RemoveAt(level, lastItems.Count() - level);
lastItems.Last() = lastItems.Last()->next = item;
} else {
lastItems.Last()->child = item;
lastItems.Append(item);
}
}
示例5: ParseXml
static bool ParseXml(ParserState *state)
{
Vec<XmlNestingInfo> stack;
int parentIdx = -1;
char *s = state->curr;
for (;;)
{
XmlTagInfo tagInfo;
SkipWhitespace(s);
if (!*s) {
if (parentIdx != -1)
return false;
if (stack.Count() > 0)
return false;
return true;
}
if (*s != '<')
return false;
s++;
bool skipped;
if (!SkipCommentOrProcesingInstr(s, skipped))
return false;
if (skipped)
continue;
if (!ParseTag(s, tagInfo))
return false;
if (TAG_CLOSE == tagInfo.type) {
if (0 == stack.Count())
return false;
size_t pos = stack.Count() - 1;
XmlNestingInfo ni = stack.At(pos);
stack.RemoveAt(pos);
if (!str::Eq(ni.name, tagInfo.name))
return false;
parentIdx = -1;
if (stack.Count() > 0) {
ni = stack.At(stack.Count() - 1);
parentIdx = ni.nodeIdx;
}
continue;
}
int nodeIdx;
MarkupNode *node = state->AllocNode(nodeIdx, parentIdx);
node->name = tagInfo.name;
node->attributes = tagInfo.attributes;
node->user = NULL;
state->cb->NewNode(node);
if (TAG_OPEN == tagInfo.type) {
XmlNestingInfo ni;
ni.name = tagInfo.name;
ni.nodeIdx = nodeIdx;
stack.Push(ni);
parentIdx = nodeIdx;
}
}
}