//----------------------------------------------------------------------
//  SPECIFICATION FILE (digset.h)
//  This module exports a digit set ADT.  A more general ADT
//  would include additional set operations.
//----------------------------------------------------------------------
#include "bool.h"

// DOMAIN: A DigitSet instance is a set of single-digit integers
//         (i.e., a set from the universe 0, 1, 2, ..., 9)
//
// CLASSINV: Each integer in the set is in the range 0..9

class DigitSet {
public:
    Boolean IsEmpty() const;
        // POST: FCTVAL == (set == {})

    Boolean IsFull() const;
        // POST: FCTVAL == (set is full)

    void Insert( /* in */ int someDig );
        // PRE:  NOT IsFull()
        // POST: set == set<entry> UNION {someDig}

    void Delete( /* in */ int someDig );
        // POST: set == set<entry> - {someDig}

    Boolean IsElt( /* in */ int someDig ) const;
        // POST: FCTVAL == (someDig is an element of the set)

    void Write() const;
        // POST: Set elements have been displayed on one line

    DigitSet operator*( /* in */ DigitSet set2 ) const;
        // POST: FCTVAL == (this set) INTERSECT set2

    DigitSet operator+( /* in */ DigitSet set2 ) const;
        // POST: FCTVAL == (this set) UNION set2

    DigitSet();
        // Constructor
        // POST: Created(set)  &&  set == {}
private:
    unsigned int bitStr;
};

