📄 set.h
字号:
//-< SET.H >---------------------------------------------------------*--------*// FastDB Version 1.0 (c) 1999 GARRET * ? *// (Main Memory Database Management System) * /\| *// * / \ *// Created: 17-Jan-99 K.A. Knizhnik * / [] \ *// Last update: 25-Jan-99 K.A. Knizhnik * GARRET *//-------------------------------------------------------------------*--------*// Small set implementation. Number of elements in the set should// not be greater than 64. Template class is used to allow static// type checking for different sets.//-------------------------------------------------------------------*--------*#ifndef __SET_H__#define __SET_H__BEGIN_FASTDB_NAMESPACE/** * Small set implementation. Number of elements in the set should * not be greater than 64. Template class is used to allow static * type checking for different sets. */template<class T>class dbSet { protected: typedef db_int8 set_t; set_t bits; public: dbSet(set_t elements = 0) : bits(elements) {} dbSet(T elem) : bits((set_t)1 << elem) {} dbSet(dbSet const& s) : bits(s.bits) {} dbSet(T from, T till) { assert(from <= till); bits = ((set_t)1 << till << 1) - ((set_t)1 << till); } bool operator == (dbSet const& s) const { return bits == s.bits; } bool operator != (dbSet const& s) const { return bits != s.bits; } bool operator == (T elem) const { return bits == ((set_t)1 << elem); } bool operator != (T elem) const { return bits != ((set_t)1 << elem); } bool operator <= (dbSet const& s) const { return (bits & ~s.bits) == 0; } bool operator >= (dbSet const& s) const { return (s.bits & ~bits) == 0; } bool operator < (dbSet const& s) const { return (bits & ~s.bits) == 0 && bits != s.bits; } bool operator > (dbSet const& s) const { return (s.bits & ~bits) == 0 && bits != s.bits; } dbSet operator + (dbSet const& s) const { dbSet result(bits | s.bits); return result; } dbSet operator + (T elem) const { dbSet result(bits | ((set_t)1 << elem)); return result; } dbSet operator - (dbSet const& s) const { dbSet result(bits & ~s.bits); return result; } dbSet operator - (T elem) const { dbSet result(bits & ~((set_t)1 << elem)); return result; } dbSet operator * (dbSet const& s) const { dbSet result(bits & s.bits); return result; } dbSet operator * (T elem) const { dbSet result(bits & ((set_t)1 << elem)); return result; } bool has(T elem) const { return (bits & ((set_t)1 << elem)) != 0; } bool empty() { return bits == 0; } dbSet operator += (T elem) { bits |= (set_t)1 << elem; return *this; } dbSet operator -= (T elem) { bits &= ~((set_t)1 << elem); return *this; } dbSet operator = (dbSet const& s) { bits = s.bits; return *this; } dbSet operator = (T elem) { bits = (set_t)1 << elem; return *this; } dbSet operator, (dbSet const& s) { dbSet result(bits | s.bits); return result; } dbSet operator, (T elem) { dbSet result(bits | ((set_t)1 << elem)); return result; } dbQueryExpression operator == (char const* field) { dbQueryExpression expr; expr = dbComponent(field,"bits"),"=",bits; return expr; } dbQueryExpression operator != (char const* field) { dbQueryExpression expr; expr = dbComponent(field,"bits"),"!=",bits; return expr; } dbQueryExpression operator <= (char const* field) { dbQueryExpression expr; expr = "(not",dbComponent(field,"bits"),"and",bits,")=0"; return expr; } dbQueryExpression operator >= (char const* field) { dbQueryExpression expr; expr = "(not",bits,"and",dbComponent(field,"bits"),")=0"; return expr; } dbQueryExpression operator < (char const* field) { dbQueryExpression expr; expr = "(not",dbComponent(field,"bits"),"and",bits,")=0 and", dbComponent(field,"bits"),"!=",bits; return expr; } dbQueryExpression operator > (char const* field) { dbQueryExpression expr; expr = "(not",bits,"and",dbComponent(field,"bits"),")=0 and", dbComponent(field,"bits"),"!=",bits; return expr; } dbQueryExpression has(char const* field) { dbQueryExpression expr; expr = "(",bits,"and 2^",dbComponent(field),") <> 0"; return expr; } CLASS_DESCRIPTOR(dbSet, (FIELD(bits), METHOD(empty)));};END_FASTDB_NAMESPACE#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -