#ifndef EQUIV_H #define EQUIV_H /////////////////////////////////////////////////////////////// // equiv.h - defines an alternate set of equivalence // // properties for standard C++ string objects // // // // Language: Visual C++, ver 5.0 // // Platform: Micron Dual Pentium 200, NT 4.0 // // Application: Design Patterns - property pattern, Su98 // // Author: Jim Fawcett, CST 2-187, (314) 443-3948 // // fawcett@neptune.syr.edu // /////////////////////////////////////////////////////////////// #include template class Property { public: friend bool operator==(const T &lhs, const T &rhs) { return lhs.equiv(rhs); } friend bool operator!=(const T &lhs, const T &rhs) { return (!lhs.equiv(rhs)); } friend bool operator< (const T &lhs, const T &rhs) { return lhs.less(rhs); } friend bool operator> (const T &lhs, const T &rhs) { return ((!lhs.less(rhs)) && (!lhs.equiv(rhs))); } friend bool operator<=(const T &lhs, const T &rhs) { return (lhs.less(rhs) || lhs.equiv(rhs)); } friend bool operator>=(const T &lhs, const T &rhs) { return (!lhs.less(rhs)); } //protected: virtual bool equiv(const T &t)=0; virtual bool less(const T &t)=0; }; class nearStr : public std::basic_string, public Property { public: nearStr() {} nearStr(const nearStr &ns) : std::basic_string(ns) { } nearStr(const char *s) : std::basic_string(s) { } //protected: virtual bool equiv(const nearStr &ns) const; virtual bool less (const nearStr &ns) const; }; class noCaseStr : public std::basic_string, public Property { public: noCaseStr() {} noCaseStr(const noCaseStr &ns) : std::basic_string(ns) {} noCaseStr(const char *s) : std::basic_string(s) {} //protected: virtual bool equiv(const noCaseStr &ns) const; virtual bool less (const noCaseStr &ns) const; }; #endif