/* * File: charset.h * --------------- * This interface exports an abstract type that represents sets of characters. */ /*************************************************************************/ /* Stanford Portable Library */ /* Copyright (C) 2013 by Eric Roberts */ /* */ /* This program is free software: you can redistribute it and/or modify */ /* it under the terms of the GNU General Public License as published by */ /* the Free Software Foundation, either version 3 of the License, or */ /* (at your option) any later version. */ /* */ /* This program is distributed in the hope that it will be useful, */ /* but WITHOUT ANY WARRANTY; without even the implied warranty of */ /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ /* GNU General Public License for more details. */ /* */ /* You should have received a copy of the GNU General Public License */ /* along with this program. If not, see . */ /*************************************************************************/ #ifndef _charset_h #define _charset_h #include #include "cslib.h" #include "generic.h" /* * Type: CharSet * ------------- * Defines the abstract type used to represent sets of characters */ typedef struct CharSetCDT *CharSet; /* Exported entries */ /* * Function: newCharSet * Usage: set = newCharSet(); * -------------------------- * Creates an empty set capable of holding characters. */ CharSet newCharSet(); /* * Function: freeCharSet * Usage: freeCharSet(set); * ------------------------ * Frees the storage associated with a character set. */ void freeCharSet(CharSet set); /* * Function: size * Usage: n = size(set); * --------------------- * Returns the number of elements in the set. */ int sizeCharSet(CharSet set); /* * Function: isEmpty * Usage: if (isEmpty(set)) . . . * ------------------------------ * Returns true if the set has no elements. */ bool isEmptyCharSet(CharSet set); /* * Function: clear * Usage: clear(set); * ------------------ * Removes all characters from the set. */ void clearCharSet(CharSet set); /* * Function: clone * Usage: newset = clone(set); * --------------------------- * Creates a copy of the set. The clone function copies * only the first level of the structure and does not copy the individual * elements. */ CharSet cloneCharSet(CharSet set); /* * Function: contains * Usage: if (contains(set, ch)) . . . * ----------------------------------- * Returns true if the character ch is a member * of the set. */ bool containsCharSet(CharSet set, char ch); /* * Function: add * Usage: add(set, ch); * -------------------- * Adds the character ch to the set. */ void addCharSet(CharSet set, char ch); /* * Function: addString * Usage: addString(set, str); * --------------------------- * Adds the characters in str to the set. */ void addString(CharSet set, string str); /* * Function: remove * Usage: remove(set, ch); * ----------------------- * Removes an element from the set. */ void removeCharSet(CharSet set, char ch); /* * Function: equals * Usage: if (equals(s1, s2)) . . . * -------------------------------- * Returns true if s1 and s2 * are equal, which means that they contain the same elements. */ bool equalsCharSet(CharSet s1, CharSet s2); /* * Function: isSubset * Usage: if (isSubset(s1, s2)) . . . * ---------------------------------- * Returns true if s1 is a subset of s2. */ bool isSubsetCharSet(CharSet s1, CharSet s2); /* * Function: union * Usage: set = union(s1, s2); * --------------------------- * Returns a new set consisting of all elements in either s1 * or s2. */ CharSet unionCharSet(CharSet s1, CharSet s2); /* * Function: intersection * Usage: set = intersection(s1, s2); * ---------------------------------- * Returns a new set consisting of all elements in both s1 * and s2. */ CharSet intersectionCharSet(CharSet s1, CharSet s2); /* * Function: setDifference * Usage: set = setDifference(s1, s2); * ----------------------------------- * Returns a new set consisting of all elements in s1 that * are not elements of s2. */ CharSet setDifferenceCharSet(CharSet s1, CharSet s2); #endif