/*++ Copyright (c) 1991 Microsoft Corporation Module Name: GENERIC_STRING Abstract: This module contains the definition for the GENERIC_STRING class. Author: Ramon J. San Andres (ramonsa) 03-May-91 Environment: ULIB, User Mode Notes: A GENERIC_STRING is the base class for all string classes. This base class provides a basic wide-character interface. A string is a finite, ordered sequence of wide characters. Note that a GENERIC_STRING is NOT necessarily null-terminated. Individual characters within a string are indexed by a number of type CHNUM (CHaracter NUMber). This index is zero-based. There are three special symbols that are widely used in the ULIB strings world: INVALID_CHAR This symbol represents an invalid wide character. INVALID_CHNUM This symbol represents an invalid CHNUM index within a GENERIC_STRING. TO_END This symbol means "up to the end of the string", and is used a lot as a default value in those methods that accept a length argument. --*/ // // This class is no longer supported. // #include "wstring.hxx" #define _GENERIC_STRING_ #if !defined (_GENERIC_STRING_) #define _GENERIC_STRING_ // // Comparison flags // #define COMPARE_IGNORECASE ( 1 ) #define COMPARE_IGNOREDIACRITIC ( 2 ) #define COMPARE_IGNORESYMBOLS ( 4 ) // // The type of the index used to access individual characters within // a generic string. // DEFINE_TYPE( ULONG, CHNUM ); // // Magic constants // #define INVALID_CHAR ((WCHAR)(-1)) #define INVALID_CHNUM ((CHNUM)(-1)) #define TO_END INVALID_CHNUM DECLARE_CLASS( GENERIC_STRING ); class GENERIC_STRING : public OBJECT { public: DECLARE_CAST_MEMBER_FUNCTION( GENERIC_STRING ); VIRTUAL ~GENERIC_STRING( ); VIRTUAL PBYTE GetInternalBuffer ( IN CHNUM Position DEFAULT 0 ) CONST PURE; VIRTUAL BOOLEAN IsChAt ( IN WCHAR Char, IN CHNUM Position DEFAULT 0 ) CONST PURE; VIRTUAL BOOLEAN MakeNumber ( OUT PLONG Number, IN CHNUM Position DEFAULT 0, IN CHNUM Length DEFAULT TO_END ) CONST PURE; VIRTUAL ULONG QueryByteCount ( IN CHNUM Position DEFAULT 0, IN CHNUM Length DEFAULT TO_END ) CONST PURE; VIRTUAL WCHAR QueryChAt( IN CHNUM Position DEFAULT 0 ) CONST PURE; VIRTUAL CHNUM QueryChCount ( ) CONST PURE; VIRTUAL PGENERIC_STRING QueryGenericString ( IN CHNUM Position DEFAULT 0, IN CHNUM Length DEFAULT TO_END ) CONST PURE; VIRTUAL PSTR QuerySTR( IN CHNUM Position DEFAULT 0, IN CHNUM Length DEFAULT TO_END, IN OUT PSTR Buffer DEFAULT NULL, IN ULONG BufferSize DEFAULT 0 ) CONST PURE; VIRTUAL PWSTR QueryWSTR ( IN CHNUM Position DEFAULT 0, IN CHNUM Length DEFAULT TO_END, IN OUT PWSTR Buffer DEFAULT NULL, IN ULONG BufferSize DEFAULT 0, IN BOOLEAN ForceNull DEFAULT TRUE ) CONST PURE; VIRTUAL BOOLEAN Replace ( IN PCGENERIC_STRING String2, IN CHNUM Position DEFAULT 0, IN CHNUM Length DEFAULT TO_END, IN CHNUM Position2 DEFAULT 0, IN CHNUM Length2 DEFAULT TO_END ) PURE; VIRTUAL BOOLEAN SetChAt ( IN WCHAR Char, IN CHNUM Position DEFAULT 0, IN CHNUM Length DEFAULT TO_END ) PURE; VIRTUAL CHNUM Strchr ( IN WCHAR Char, IN CHNUM Position DEFAULT 0, IN CHNUM Length DEFAULT TO_END ) CONST PURE; VIRTUAL LONG Strcmp ( IN PCGENERIC_STRING GenericString ) CONST PURE; VIRTUAL CHNUM Strcspn ( IN PCGENERIC_STRING GenericString, IN CHNUM Position DEFAULT 0, IN CHNUM Length DEFAULT TO_END ) CONST PURE; VIRTUAL LONG Stricmp ( IN PCGENERIC_STRING GenericString ) CONST PURE; VIRTUAL LONG StringCompare ( IN CHNUM Position1, IN CHNUM Length1 , IN PCGENERIC_STRING GenericString2, IN CHNUM Position2, IN CHNUM Length2, IN USHORT CompareFlags DEFAULT COMPARE_IGNORECASE ) CONST PURE; VIRTUAL CHNUM StrLen ( ) CONST PURE; VIRTUAL CHNUM Strrchr ( IN WCHAR Char, IN CHNUM Position DEFAULT 0, IN CHNUM Length DEFAULT TO_END ) CONST PURE; VIRTUAL CHNUM Strspn ( IN PCGENERIC_STRING GenericString, IN CHNUM Position DEFAULT 0, IN CHNUM Length DEFAULT TO_END ) CONST PURE; VIRTUAL CHNUM Strstr ( IN PCGENERIC_STRING GenericString, IN CHNUM Position DEFAULT 0, IN CHNUM Length DEFAULT TO_END ) CONST PURE; NONVIRTUAL BOOLEAN operator == ( IN RCGENERIC_STRING String ) CONST; NONVIRTUAL BOOLEAN operator != ( IN RCGENERIC_STRING String ) CONST; NONVIRTUAL BOOLEAN operator < ( IN RCGENERIC_STRING String ) CONST; NONVIRTUAL BOOLEAN operator > ( IN RCGENERIC_STRING String ) CONST; NONVIRTUAL BOOLEAN operator <= ( IN RCGENERIC_STRING String ) CONST; NONVIRTUAL BOOLEAN operator >= ( IN RCGENERIC_STRING String ) CONST; protected: DECLARE_CONSTRUCTOR( GENERIC_STRING ); NONVIRTUAL BOOLEAN Initialize ( ); private: VOID Construct ( ); }; INLINE BOOLEAN GENERIC_STRING::operator == ( IN RCGENERIC_STRING String ) CONST /*++ Routine Description: Compares this string with another. Arguments: String - Supplies a reference to the string to compare. Return Value: TRUE - if String is equal to this string FALSE - if not. --*/ { return (StringCompare( 0, QueryChCount(), (PCGENERIC_STRING)&String, 0, String.QueryChCount(), COMPARE_IGNORECASE ) == 0); } INLINE BOOLEAN GENERIC_STRING::operator != ( IN RCGENERIC_STRING String ) CONST /*++ Routine Description: Compares this string with another. Arguments: String - Supplies a reference to the string to compare. Return Value: TRUE - if String is equal to this string FALSE - if not. --*/ { return (StringCompare( 0, QueryChCount(), (PCGENERIC_STRING)&String, 0, String.QueryChCount(), COMPARE_IGNORECASE ) != 0); } INLINE BOOLEAN GENERIC_STRING::operator < ( IN RCGENERIC_STRING String ) CONST /*++ Routine Description: Compares this string with another. Arguments: String - Supplies a reference to the string to compare. Return Value: TRUE - if String is less then this string FALSE - if not. --*/ { return (StringCompare( 0, QueryChCount(), (PCGENERIC_STRING)&String, 0, String.QueryChCount(), COMPARE_IGNORECASE ) < 0); } INLINE BOOLEAN GENERIC_STRING::operator > ( IN RCGENERIC_STRING String ) CONST /*++ Routine Description: Compares this string with another. Arguments: String - Supplies a reference to the string to compare. Return Value: TRUE - if String is greater then this string FALSE - if not. --*/ { return (StringCompare( 0, QueryChCount(), (PCGENERIC_STRING)&String, 0, String.QueryChCount(), COMPARE_IGNORECASE ) > 0); } INLINE BOOLEAN GENERIC_STRING::operator <= ( IN RCGENERIC_STRING String ) CONST /*++ Routine Description: Compares this string with another. Arguments: String - Supplies a reference to the string to compare. Return Value: TRUE - if String is less then or equal this string FALSE - if not. --*/ { return (StringCompare( 0, QueryChCount(), (PCGENERIC_STRING)&String, 0, String.QueryChCount(), COMPARE_IGNORECASE ) <= 0); } INLINE NONVIRTUAL BOOLEAN GENERIC_STRING::operator >= ( IN RCGENERIC_STRING String ) CONST /*++ Routine Description: Compares this string with another. Arguments: String - Supplies a reference to the string to compare. Return Value: TRUE - if String is greater then or equal this string FALSE - if not. --*/ { return (StringCompare( 0, QueryChCount(), (PCGENERIC_STRING)&String, 0, String.QueryChCount(), COMPARE_IGNORECASE ) >= 0); } #endif // _GENERIC_STRING_