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

📄 set.h

📁 最新版本!fastdb是高效的内存数据库系统
💻 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 + -