461 lines
12 KiB
C++
461 lines
12 KiB
C++
/*++
|
||
|
||
Copyright (c) 1991 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
GENERIC_STRING
|
||
|
||
Abstract:
|
||
|
||
This module contains the definition for the GENERIC_STRING class.
|
||
|
||
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_
|