📄 btree.cs
字号:
if (BtreePage.compareStr(till, pg, i) >= 1-till.inclusion)
{
l = i + 1;
}
else
{
r = i;
}
}
Debug.Assert(r == l);
if (r == 0)
{
sp += 1;
gotoNextItem(pg, r);
}
else
{
posStack[sp++] = r-1;
db.pool.unfix(pg);
}
}
if (sp != 0 && from != null)
{
pg = db.getPage(pageStack[sp-1]);
if (BtreePage.compareStr(from, pg, posStack[sp-1]) >= from.inclusion)
{
sp = 0;
}
db.pool.unfix(pg);
}
}
}
else if (type == ClassDescriptor.FieldType.tpArrayOfByte)
{
if (order == IterationOrder.AscentOrder)
{
if (from == null)
{
while (--height >= 0)
{
posStack[sp] = 0;
pageStack[sp] = pageId;
pg = db.getPage(pageId);
pageId = BtreePage.getKeyStrOid(pg, 0);
end = BtreePage.getnItems(pg);
db.pool.unfix(pg);
sp += 1;
}
}
else
{
while (--height > 0)
{
pageStack[sp] = pageId;
pg = db.getPage(pageId);
l = 0;
r = BtreePage.getnItems(pg);
while (l < r)
{
i = (l+r) >> 1;
if (tree.compareByteArrays(from, pg, i) >= from.inclusion)
{
l = i + 1;
}
else
{
r = i;
}
}
Debug.Assert(r == l);
posStack[sp] = r;
pageId = BtreePage.getKeyStrOid(pg, r);
db.pool.unfix(pg);
sp += 1;
}
pageStack[sp] = pageId;
pg = db.getPage(pageId);
l = 0;
end = r = BtreePage.getnItems(pg);
while (l < r)
{
i = (l+r) >> 1;
if (tree.compareByteArrays(from, pg, i) >= from.inclusion)
{
l = i + 1;
}
else
{
r = i;
}
}
Debug.Assert(r == l);
if (r == end)
{
sp += 1;
gotoNextItem(pg, r-1);
}
else
{
posStack[sp++] = r;
db.pool.unfix(pg);
}
}
if (sp != 0 && till != null)
{
pg = db.getPage(pageStack[sp-1]);
if (-tree.compareByteArrays(till, pg, posStack[sp-1]) >= till.inclusion)
{
sp = 0;
}
db.pool.unfix(pg);
}
}
else
{ // descent order
if (till == null)
{
while (--height > 0)
{
pageStack[sp] = pageId;
pg = db.getPage(pageId);
posStack[sp] = BtreePage.getnItems(pg);
pageId = BtreePage.getKeyStrOid(pg, posStack[sp]);
db.pool.unfix(pg);
sp += 1;
}
pageStack[sp] = pageId;
pg = db.getPage(pageId);
posStack[sp++] = BtreePage.getnItems(pg)-1;
db.pool.unfix(pg);
}
else
{
while (--height > 0)
{
pageStack[sp] = pageId;
pg = db.getPage(pageId);
l = 0;
r = BtreePage.getnItems(pg);
while (l < r)
{
i = (l+r) >> 1;
if (tree.compareByteArrays(till, pg, i) >= 1-till.inclusion)
{
l = i + 1;
}
else
{
r = i;
}
}
Debug.Assert(r == l);
posStack[sp] = r;
pageId = BtreePage.getKeyStrOid(pg, r);
db.pool.unfix(pg);
sp += 1;
}
pageStack[sp] = pageId;
pg = db.getPage(pageId);
l = 0;
r = BtreePage.getnItems(pg);
while (l < r)
{
i = (l+r) >> 1;
if (tree.compareByteArrays(till, pg, i) >= 1-till.inclusion)
{
l = i + 1;
}
else
{
r = i;
}
}
Debug.Assert(r == l);
if (r == 0)
{
sp += 1;
gotoNextItem(pg, r);
}
else
{
posStack[sp++] = r-1;
db.pool.unfix(pg);
}
}
if (sp != 0 && from != null)
{
pg = db.getPage(pageStack[sp-1]);
if (tree.compareByteArrays(from, pg, posStack[sp-1]) >= from.inclusion)
{
sp = 0;
}
db.pool.unfix(pg);
}
}
}
else
{ // scalar type
if (order == IterationOrder.AscentOrder)
{
if (from == null)
{
while (--height >= 0)
{
posStack[sp] = 0;
pageStack[sp] = pageId;
pg = db.getPage(pageId);
pageId = BtreePage.getReference(pg, BtreePage.maxItems-1);
end = BtreePage.getnItems(pg);
db.pool.unfix(pg);
sp += 1;
}
}
else
{
while (--height > 0)
{
pageStack[sp] = pageId;
pg = db.getPage(pageId);
l = 0;
r = BtreePage.getnItems(pg);
while (l < r)
{
i = (l+r) >> 1;
if (BtreePage.compare(from, pg, i) >= from.inclusion)
{
l = i + 1;
}
else
{
r = i;
}
}
Debug.Assert(r == l);
posStack[sp] = r;
pageId = BtreePage.getReference(pg, BtreePage.maxItems-1-r);
db.pool.unfix(pg);
sp += 1;
}
pageStack[sp] = pageId;
pg = db.getPage(pageId);
l = 0;
r = end = BtreePage.getnItems(pg);
while (l < r)
{
i = (l+r) >> 1;
if (BtreePage.compare(from, pg, i) >= from.inclusion)
{
l = i + 1;
}
else
{
r = i;
}
}
Debug.Assert(r == l);
if (r == end)
{
sp += 1;
gotoNextItem(pg, r-1);
}
else
{
posStack[sp++] = r;
db.pool.unfix(pg);
}
}
if (sp != 0 && till != null)
{
pg = db.getPage(pageStack[sp-1]);
if (-BtreePage.compare(till, pg, posStack[sp-1]) >= till.inclusion)
{
sp = 0;
}
db.pool.unfix(pg);
}
}
else
{ // descent order
if (till == null)
{
while (--height > 0)
{
pageStack[sp] = pageId;
pg = db.getPage(pageId);
posStack[sp] = BtreePage.getnItems(pg);
pageId = BtreePage.getReference(pg, BtreePage.maxItems-1-posStack[sp]);
db.pool.unfix(pg);
sp += 1;
}
pageStack[sp] = pageId;
pg = db.getPage(pageId);
posStack[sp++] = BtreePage.getnItems(pg)-1;
db.pool.unfix(pg);
}
else
{
while (--height > 0)
{
pageStack[sp] = pageId;
pg = db.getPage(pageId);
l = 0;
r = BtreePage.getnItems(pg);
while (l < r)
{
i = (l+r) >> 1;
if (BtreePage.compare(till, pg, i) >= 1-till.inclusion)
{
l = i + 1;
}
else
{
r = i;
}
}
Debug.Assert(r == l);
posStack[sp] = r;
pageId = BtreePage.getReference(pg, BtreePage.maxItems-1-r);
db.pool.unfix(pg);
sp += 1;
}
pageStack[sp] = pageId;
pg = db.getPage(pageId);
l = 0;
r = BtreePage.getnItems(pg);
while (l < r)
{
i = (l+r) >> 1;
if (BtreePage.compare(till, pg, i) >= 1-till.inclusion)
{
l = i + 1;
}
else
{
r = i;
}
}
Debug.Assert(r == l);
if (r == 0)
{
sp += 1;
gotoNextItem(pg, r);
}
else
{
posStack[sp++] = r-1;
db.pool.unfix(pg);
}
}
if (sp != 0 && from != null)
{
pg = db.getPage(pageStack[sp-1]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -