Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

451 lines
13 KiB

/*++
Copyright (c) 1999 Microsoft Corporation
Module Name:
objstr.h
Abstract:
Implements a set of APIs to handle the string representation of nodes/leafs of a tree
Author:
03-Jan-2000 Ovidiu Temereanca (ovidiut) - File creation.
Revision History:
<alias> <date> <comments>
--*/
/*
+-------+
| root1 | Level 1
+-------+
/ \
/ \
+---------+ (-------)
| node1 | ( leaf1 ) Level 2
+---------+ (-------)
/ | \ \__________
/ | \ \
+-------+ +-------+ (-------) (-------)
| node2 | | node3 | ( leaf2 ) ( leaf3 ) Level 3
+-------+ +-------+ (-------) (-------)
/ \
/ \
+-------+ (-------)
| node4 | ( leaf4 ) Level 4
+-------+ (-------)
/ \
/ \
(-------) (-------)
( leaf5 ) ( leaf6 ) Level 5
(-------) (-------)
The string representation of some tree elements above:
root1
root1 <leaf1>
root1\node1
root1\node1 <leaf2>
root1\node1 <leaf3>
*/
//
// Types
//
typedef PCTSTR ENCODEDSTRHANDLE;
typedef enum {
OBSPF_EXACTNODE = 0x0001,
OBSPF_NODEISROOTPLUSSTAR = 0x0002,
OBSPF_OPTIONALNODE = 0x0004,
OBSPF_NOLEAF = 0x0008,
OBSPF_EXACTLEAF = 0x0010,
OBSPF_OPTIONALLEAF = 0x0020,
} OBSP_FLAGS;
typedef struct TAG_OBSPARSEDPATTERNA {
PPARSEDPATTERNA NodePattern;
PPARSEDPATTERNA LeafPattern;
PSTR ExactRoot;
DWORD ExactRootBytes;
PCSTR Leaf;
DWORD MinNodeLevel;
DWORD MaxNodeLevel;
DWORD MaxSubLevel;
DWORD Flags;
PMHANDLE Pool;
} OBSPARSEDPATTERNA, *POBSPARSEDPATTERNA;
typedef struct TAG_OBSPARSEDPATTERNW {
PPARSEDPATTERNW NodePattern;
PPARSEDPATTERNW LeafPattern;
PWSTR ExactRoot;
DWORD ExactRootBytes;
PCWSTR Leaf;
DWORD MinNodeLevel;
DWORD MaxNodeLevel;
DWORD MaxSubLevel;
DWORD Flags;
PMHANDLE Pool;
} OBSPARSEDPATTERNW, *POBSPARSEDPATTERNW;
//
// APIs
//
BOOL
ObsInitialize (
VOID
);
VOID
ObsTerminate (
VOID
);
VOID
ObsFreeA (
IN PCSTR EncodedObject
);
VOID
ObsFreeW (
IN PCWSTR EncodedObject
);
BOOL
ObsEncodeStringExA (
PSTR Destination,
PCSTR Source,
PCSTR CharsToEncode
);
#define ObsEncodeStringA(d,s) ObsEncodeStringExA(d,s,NULL)
BOOL
ObsEncodeStringExW (
PWSTR Destination,
PCWSTR Source,
PCWSTR CharsToEncode
);
#define ObsEncodeStringW(d,s) ObsEncodeStringExW(d,s,NULL)
BOOL
ObsDecodeStringA (
PSTR Destination,
PCSTR Source
);
BOOL
ObsDecodeStringW (
PWSTR Destination,
PCWSTR Source
);
BOOL
RealObsSplitObjectStringExA (
IN PCSTR EncodedObject,
OUT PCSTR* DecodedNode, OPTIONAL
OUT PCSTR* DecodedLeaf, OPTIONAL
IN PMHANDLE Pool, OPTIONAL
IN BOOL DecodeStrings
);
#define ObsSplitObjectStringExA(o,n,l,p,s) TRACK_BEGIN(BOOL, ObsSplitObjectStringExA)\
RealObsSplitObjectStringExA(o,n,l,p,s)\
TRACK_END()
#define ObsSplitObjectStringA(o,n,l) ObsSplitObjectStringExA(o,n,l,NULL,TRUE)
BOOL
RealObsSplitObjectStringExW (
IN PCWSTR EncodedObject,
OUT PCWSTR* DecodedNode, OPTIONAL
OUT PCWSTR* DecodedLeaf, OPTIONAL
IN PMHANDLE Pool, OPTIONAL
IN BOOL DecodeStrings
);
#define ObsSplitObjectStringExW(o,n,l,p,s) TRACK_BEGIN(BOOL, ObsSplitObjectStringExW)\
RealObsSplitObjectStringExW(o,n,l,p,s)\
TRACK_END()
#define ObsSplitObjectStringW(o,n,l) ObsSplitObjectStringExW(o,n,l,NULL,TRUE)
BOOL
ObsHasNodeA (
IN PCSTR EncodedObject
);
BOOL
ObsHasNodeW (
IN PCWSTR EncodedObject
);
PCSTR
ObsGetLeafPortionOfEncodedStringA (
IN PCSTR EncodedObject
);
PCWSTR
ObsGetLeafPortionOfEncodedStringW (
IN PCWSTR EncodedObject
);
PCSTR
ObsGetNodeLeafDividerA (
IN PCSTR EncodedObject
);
PCWSTR
ObsGetNodeLeafDividerW (
IN PCWSTR EncodedObject
);
PCSTR
ObsFindNonEncodedCharInEncodedStringA (
IN PCSTR String,
IN MBCHAR Char
);
PCWSTR
ObsFindNonEncodedCharInEncodedStringW (
IN PCWSTR String,
IN WCHAR Char
);
PSTR
ObsBuildEncodedObjectStringFromPatternA (
IN POBSPARSEDPATTERNA Pattern
);
PWSTR
ObsBuildEncodedObjectStringFromPatternW (
IN POBSPARSEDPATTERNW Pattern
);
PSTR
RealObsBuildEncodedObjectStringExA (
IN PCSTR DecodedNode,
IN PCSTR DecodedLeaf, OPTIONAL
IN BOOL EncodeString
);
#define ObsBuildEncodedObjectStringExA(n,l,e) TRACK_BEGIN(PSTR, ObsBuildEncodedObjectStringExA)\
RealObsBuildEncodedObjectStringExA(n,l,e)\
TRACK_END()
#define ObsBuildEncodedObjectStringA(node,leaf) ObsBuildEncodedObjectStringExA(node,leaf,FALSE)
PSTR
ObsBuildPartialEncodedObjectStringExA (
IN PCSTR DecodedNode,
IN PCSTR DecodedLeaf, OPTIONAL
IN BOOL EncodeString
);
PWSTR
RealObsBuildEncodedObjectStringExW (
IN PCWSTR DecodedNode,
IN PCWSTR DecodedLeaf, OPTIONAL
IN BOOL EncodeString
);
#define ObsBuildEncodedObjectStringExW(n,l,e) TRACK_BEGIN(PWSTR, ObsBuildEncodedObjectStringExW)\
RealObsBuildEncodedObjectStringExW(n,l,e)\
TRACK_END()
#define ObsBuildEncodedObjectStringW(node,leaf) ObsBuildEncodedObjectStringExW(node,leaf,FALSE)
PWSTR
ObsBuildPartialEncodedObjectStringExW (
IN PCWSTR DecodedNode,
IN PCWSTR DecodedLeaf, OPTIONAL
IN BOOL EncodeString
);
POBSPARSEDPATTERNA
RealObsCreateParsedPatternExA (
IN PMHANDLE Pool, OPTIONAL
IN PCSTR EncodedObject,
IN BOOL MakePrimaryRootEndWithWack
);
#define ObsCreateParsedPatternExA(p,o,m) TRACK_BEGIN(POBSPARSEDPATTERNA, ObsCreateParsedPatternExA)\
RealObsCreateParsedPatternExA(p,o,m)\
TRACK_END()
#define ObsCreateParsedPatternA(obj) ObsCreateParsedPatternExA (NULL,obj,FALSE)
POBSPARSEDPATTERNW
RealObsCreateParsedPatternExW (
IN PMHANDLE Pool, OPTIONAL
IN PCWSTR EncodedObject,
IN BOOL MakePrimaryRootEndWithWack
);
#define ObsCreateParsedPatternExW(p,o,m) TRACK_BEGIN(POBSPARSEDPATTERNW, ObsCreateParsedPatternExW)\
RealObsCreateParsedPatternExW(p,o,m)\
TRACK_END()
#define ObsCreateParsedPatternW(obj) ObsCreateParsedPatternExW (NULL,obj,FALSE)
VOID
ObsDestroyParsedPatternA (
IN POBSPARSEDPATTERNA ParsedPattern
);
VOID
ObsDestroyParsedPatternW (
IN POBSPARSEDPATTERNW ParsedPattern
);
BOOL
ObsParsedPatternMatchA (
IN POBSPARSEDPATTERNA ParsedPattern,
IN PCSTR EncodedObject
);
BOOL
ObsParsedPatternMatchW (
IN POBSPARSEDPATTERNW ParsedPattern,
IN PCWSTR EncodedObject
);
BOOL
ObsParsedPatternMatchExA (
IN POBSPARSEDPATTERNA ParsedPattern,
IN PCSTR Node,
IN PCSTR Leaf OPTIONAL
);
BOOL
ObsParsedPatternMatchExW (
IN POBSPARSEDPATTERNW ParsedPattern,
IN PCWSTR Node,
IN PCWSTR Leaf OPTIONAL
);
BOOL
ObsPatternMatchA (
IN PCSTR ObjectPattern,
IN PCSTR ObjectStr
);
BOOL
ObsPatternMatchW (
IN PCWSTR ObjectPattern,
IN PCWSTR ObjectStr
);
BOOL
ObsIsPatternContainedA (
IN PCSTR Container,
IN PCSTR Contained
);
BOOL
ObsIsPatternContainedW (
IN PCWSTR Container,
IN PCWSTR Contained
);
BOOL
ObsGetPatternLevelsA (
IN PCSTR ObjectPattern,
OUT PDWORD MinLevel, OPTIONAL
OUT PDWORD MaxLevel OPTIONAL
);
BOOL
ObsGetPatternLevelsW (
IN PCWSTR ObjectPattern,
OUT PDWORD MinLevel, OPTIONAL
OUT PDWORD MaxLevel OPTIONAL
);
BOOL
ObsPatternIncludesPatternA (
IN POBSPARSEDPATTERNA IncludingPattern,
IN POBSPARSEDPATTERNA IncludedPattern
);
BOOL
ObsPatternIncludesPatternW (
IN POBSPARSEDPATTERNW IncludingPattern,
IN POBSPARSEDPATTERNW IncludedPattern
);
//
// Macros
//
#ifdef UNICODE
#define OBSPARSEDPATTERN OBSPARSEDPATTERNW
#define POBSPARSEDPATTERN POBSPARSEDPATTERNW
#define ObsFree ObsFreeW
#define ObsEncodeStringEx ObsEncodeStringExW
#define ObsEncodeString ObsEncodeStringW
#define ObsDecodeString ObsDecodeStringW
#define ObsSplitObjectString ObsSplitObjectStringW
#define ObsSplitObjectStringEx ObsSplitObjectStringExW
#define ObsHasNode ObsHasNodeW
#define ObsGetLeafPortionOfEncodedString ObsGetLeafPortionOfEncodedStringW
#define ObsGetNodeLeafDivider ObsGetNodeLeafDividerW
#define ObsFindNonEncodedCharInEncodedString ObsFindNonEncodedCharInEncodedStringW
#define ObsBuildEncodedObjectStringFromPattern ObsBuildEncodedObjectStringFromPatternW
#define ObsBuildEncodedObjectStringEx ObsBuildEncodedObjectStringExW
#define ObsBuildPartialEncodedObjectStringEx ObsBuildPartialEncodedObjectStringExW
#define ObsBuildEncodedObjectString ObsBuildEncodedObjectStringW
#define ObsCreateParsedPattern ObsCreateParsedPatternW
#define ObsCreateParsedPatternEx ObsCreateParsedPatternExW
#define ObsDestroyParsedPattern ObsDestroyParsedPatternW
#define ObsParsedPatternMatch ObsParsedPatternMatchW
#define ObsParsedPatternMatchEx ObsParsedPatternMatchExW
#define ObsPatternMatch ObsPatternMatchW
#define ObsIsPatternContained ObsIsPatternContainedW
#define ObsGetPatternLevels ObsGetPatternLevelsW
#define ObsPatternIncludesPattern ObsPatternIncludesPatternW
#else
#define OBSPARSEDPATTERN OBSPARSEDPATTERNA
#define POBSPARSEDPATTERN POBSPARSEDPATTERNA
#define ObsFree ObsFreeA
#define ObsEncodeStringEx ObsEncodeStringExA
#define ObsEncodeString ObsEncodeStringA
#define ObsDecodeString ObsDecodeStringA
#define ObsSplitObjectString ObsSplitObjectStringA
#define ObsSplitObjectStringEx ObsSplitObjectStringExA
#define ObsHasNode ObsHasNodeA
#define ObsGetLeafPortionOfEncodedString ObsGetLeafPortionOfEncodedStringA
#define ObsGetNodeLeafDivider ObsGetNodeLeafDividerA
#define ObsFindNonEncodedCharInEncodedString ObsFindNonEncodedCharInEncodedStringA
#define ObsBuildEncodedObjectStringFromPattern ObsBuildEncodedObjectStringFromPatternA
#define ObsBuildEncodedObjectStringEx ObsBuildEncodedObjectStringExA
#define ObsBuildPartialEncodedObjectStringEx ObsBuildPartialEncodedObjectStringExA
#define ObsBuildEncodedObjectString ObsBuildEncodedObjectStringA
#define ObsCreateParsedPattern ObsCreateParsedPatternA
#define ObsCreateParsedPatternEx ObsCreateParsedPatternExA
#define ObsDestroyParsedPattern ObsDestroyParsedPatternA
#define ObsParsedPatternMatch ObsParsedPatternMatchA
#define ObsParsedPatternMatchEx ObsParsedPatternMatchExA
#define ObsPatternMatch ObsPatternMatchA
#define ObsIsPatternContained ObsIsPatternContainedA
#define ObsGetPatternLevels ObsGetPatternLevelsA
#define ObsPatternIncludesPattern ObsPatternIncludesPatternA
#endif