📄 reference.h
字号:
//-< REFERENCE.H >---------------------------------------------------*--------*
// FastDB Version 1.0 (c) 1999 GARRET * ? *
// (Main Memory Database Management System) * /\| *
// * / \ *
// Created: 20-Nov-98 K.A. Knizhnik * / [] \ *
// Last update: 15-Feb-99 K.A. Knizhnik * GARRET *
//-------------------------------------------------------------------*--------*
// Database table field reference type
//-------------------------------------------------------------------*--------*
#ifndef __REFERENCE_H__
#define __REFERENCE_H__
class FASTDB_DLL_ENTRY dbAnyReference {
friend class dbAnyCursor;
friend class dbDatabase;
friend class dbFieldDescriptor;
protected:
oid_t oid;
dbAnyReference(oid_t oid) {
this->oid = oid;
}
public:
oid_t getOid() const {
return oid;
}
friend bool isNull(dbAnyReference const& ref) {
return ref.oid == 0;
}
bool isNull() { return oid == 0; }
};
class FASTDB_DLL_ENTRY dbNullReference {};
extern FASTDB_DLL_ENTRY dbNullReference null;
#if (defined(_MSC_VER) && _MSC_VER+0 <= 1100)
//
// Visual C++ prior to 5.0 version (with applied Service Pack 3)
// didn't support lazy template instantiation. As far as VC has bug
// with treating local function prototypes, we have to use friend function.
//
template<class T>
extern dbTableDescriptor* dbGetTableDescriptor(T*);
#endif
template<class T>
class dbReference : public dbAnyReference {
public:
dbFieldDescriptor* dbDescribeComponents(dbFieldDescriptor* fd) {
fd->type = fd->appType = dbField::tpReference;
#if defined(_MSC_VER) && _MSC_VER+0 <= 1100
fd->refTable = dbGetTableDescriptor((T*)0);
#else
#if defined(__GNUC__) && __GNUC_MINOR__ <= 95
extern dbTableDescriptor* dbGetTableDescriptor(T*);
fd->refTable = dbGetTableDescriptor((T*)0);
#else
fd->refTable = &T::dbDescriptor;
#endif
#endif
fd->dbsSize = fd->alignment = sizeof(oid_t);
return NULL;
}
dbReference& operator = (dbReference const& ref) {
oid = ref.oid;
return *this;
}
dbReference& operator = (dbNullReference const&) {
oid = 0;
return *this;
}
bool operator == (dbReference const& ref) const {
return oid == ref.oid;
}
bool operator != (dbReference const& ref) const {
return oid != ref.oid;
}
bool operator == (dbNullReference const&) const {
return oid == 0;
}
bool operator != (dbNullReference const&) const {
return oid != 0;
}
dbReference(dbNullReference const&) : dbAnyReference(0) {}
dbReference(dbReference const& ref) : dbAnyReference(ref.oid) {}
dbReference(oid_t oid=0) : dbAnyReference(oid) {}
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -