discreteset.h

来自「用于词法分析的词法分析器」· C头文件 代码 · 共 56 行

H
56
字号
/*  $Id: DiscreteSet.h,v 1.4 1997/05/19 02:24:05 matt Exp $    Basic discrete set implemented as a byte array.    (c) Apr 95 Matt Phillips   */#ifndef _DISCSET_H#define _DISCSET_H#ifndef __GNUC__#  include <mem.h>#endif#include "checks.h"#include "Range.h"#define DSET_INCHECK(i) CHECK (i >= LOWER && i <= UPPER, "item outside set")template <class T, int LOWER, int UPPER>class DiscreteSet{public:  DiscreteSet () {removeAll ();}  void addAll () {memset (data, 1, sizeof (data));}  void removeAll () {memset (data, 0, sizeof (data));}  void add (T i) {DSET_INCHECK (i); data [i] = 1;}  void add (const Range<T> &r) {set (r, 1);}  void remove (const Range<T> &r) {set (r, 0);}  void remove (T i) {DSET_INCHECK (i); data [i] = 0;}  void set (T i, int b) {DSET_INCHECK (i); data [i] = b;}  void set (const Range<T> &r, int b)  {    DSET_INCHECK (r.lower);    DSET_INCHECK (r.upper);    memset (data + r.lower, b, r.length ());  }  int isIn (T i) const {DSET_INCHECK (i); return data [i];}  static T getLower () {return (T)LOWER;}  static T getUpper () {return (T)UPPER;}  static int inRange (T i) {return i >= LOWER && i <= UPPER;}   protected:  char data [UPPER - LOWER + 1];};#endif

⌨️ 快捷键说明

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