📄 gistpredicate.h
字号:
// -*- Mode: C++ -*-//--------------------------------------------------------------------// GiSTpredicate.h// ---------------//// GiST - Generalized Search Tree // June 2001 release, Aalborg University// // This file is a revised version of a part of the original // libGiST release (version 0.9beta1) // Copyright (c) 1996, Regents of the University of California//#ifndef GISTPREDICATE_H#define GISTPREDICATE_H#include <iostream.h>#include "GiSTdefs.h"#include "GiSTentry.h"//--------------------------------------------------------------------// The GiSTpredicate class itself doesn't do much except serve as a// placeholder for the Consistent method. However, some handy Boolean// connectors are here as well (And, Or, Not) and well as True.class GiSTentry;//------------------------------------------------class GiSTpredicate : public GiSTobject{public: GiSTobjid IsA() const { return GISTPREDICATE_CLASS; } virtual int Consistent(const GiSTentry& entry) const = 0; virtual ~GiSTpredicate() {}};//------------------------------------------------class PtrPredicate : public GiSTpredicate{public: PtrPredicate(GiSTpage page) : page(page) {} int Consistent(const GiSTentry& entry) const; GiSTobject *Copy() const;#ifdef PRINTING_OBJECTS void Print(ostream& os) const;#endifprivate: GiSTpage page;};//------------------------------------------------class AndPredicate : public GiSTpredicate{public: AndPredicate(GiSTpredicate *q1, GiSTpredicate *q2) : q1(q1), q2(q2) {} int Consistent(const GiSTentry& entry) const { return q1->Consistent(entry) && q2->Consistent(entry); }#ifdef PRINTING_OBJECTS void Print(ostream& os) const { os << "(" << *q1 << " and " << *q2 << ")"; }#endif GiSTobject *Copy() const { return new AndPredicate((GiSTpredicate*)q1->Copy(), (GiSTpredicate*)q2->Copy()); } ~AndPredicate() { if (q1) delete q1; if (q2) delete q2; }private: GiSTpredicate *q1, *q2;};//------------------------------------------------class OrPredicate : public GiSTpredicate{public: OrPredicate(GiSTpredicate *q1, GiSTpredicate *q2) : q1(q1), q2(q2) {} int Consistent(const GiSTentry& entry) const { return q1->Consistent(entry) || q2->Consistent(entry); }#ifdef PRINTING_OBJECTS void Print(ostream& os) const { os << "(" << *q1 << " or " << *q2 << ")"; }#endif GiSTobject *Copy() const { return new OrPredicate((GiSTpredicate*)q1->Copy(), (GiSTpredicate*)q2->Copy()); } ~OrPredicate() { if (q1) delete q1; if (q2) delete q2; }private: GiSTpredicate *q1, *q2;};//------------------------------------------------class NotPredicate : public GiSTpredicate{public: NotPredicate(GiSTpredicate *q) : q(q) {} int Consistent(const GiSTentry& entry) const { return !q->Consistent(entry); } GiSTobject *Copy() const { return new NotPredicate((GiSTpredicate*)q->Copy()); }#ifdef PRINTING_OBJECTS void Print(ostream& os) const { os << "(not " << *q << ")"; }#endif ~NotPredicate() { if (q) delete q; } private: GiSTpredicate *q;};//------------------------------------------------class TruePredicate : public GiSTpredicate{public: TruePredicate() {} int Consistent(const GiSTentry& entry) const { return 1; } GiSTobject *Copy() const { return new TruePredicate; }#ifdef PRINTING_OBJECTS void Print(ostream& os) const { os << "true"; }#endif};extern TruePredicate truePredicate;#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -