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

📄 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__

/**
 * 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)));
};

#endif

⌨️ 快捷键说明

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