⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gistcursor.cpp

📁 FastDb是高效的内存数据库系统
💻 CPP
字号:
// Mode: -*- C++ -*-

//          GiSTcursor.cpp
//
// Copyright (c) 1996, Regents of the University of California
// $Header: /cvsroot/fastdb/fastdb/GiST/libGiST/GiSTcursor.cpp,v 1.1 2007/07/18 20:45:49 knizhnik Exp $

#include "GiST.h"

GiSTcursor::GiSTcursor(const GiST& gist,
		       const GiSTpredicate& query) : gist(gist)
{
    this->query = (GiSTpredicate*) query.Copy();
    first = 1;
    lastlevel = -1;
}

GiSTentry* 
GiSTcursor::Next()
{
    GiSTpage page;

    while (first || !stack.IsEmpty()) {
	if (first) {
	    page = GiSTRootPage;
	    first = 0;
	} else {
	    assert(lastlevel >= 0);
	    GiSTentry *entry = stack.RemoveFront();
	    if (entry->IsLeaf())
		return entry;

	    // Pop off the stack
	    for (int i=0; i < entry->Level() - lastlevel; i++)
		path.MakeParent();

	    page = entry->Ptr();
	    
	    delete entry;
	}

	// Entry was a pointer to another node
	path.MakeChild(page);

	GiSTnode *node = gist.ReadNode(path);
	lastlevel = node->Level();

	GiSTlist<GiSTentry*> list = node->Search(*query);

	while (!list.IsEmpty()) {
	    GiSTentry *entry = list.RemoveRear();
	    stack.Prepend(entry);
	}

	delete node;
    }

    // The search is over...
    return NULL;
}

GiSTcursor::~GiSTcursor()
{
    if (query != NULL)
	delete query;
    while (!stack.IsEmpty())
	delete stack.RemoveFront();
}

const GiSTpath& 
GiSTcursor::Path() const
{
    return path;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -