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.
|
|
/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corp., 1991 **/ /**********************************************************************/
/*
UATOM.HXX Universal Atom Management class definitions
Win32 Atom Management of Unicode strings.
FILE HISTORY: DavidHov 9/10/91 Created KeithMo 23-Oct-1991 Added forward references.
*/
#ifndef _UATOM_HXX_
#define _UATOM_HXX_
#include "base.hxx"
//
// Forward references.
//
DLL_CLASS HUATOM; DLL_CLASS UATOM; DLL_CLASS UATOM_LINKAGE; DLL_CLASS UATOM_MANAGER; DLL_CLASS UATOM_REGION;
/*************************************************************************
NAME: HUATOM
SYNOPSIS: Universal Atom Handle
Converts any string to a 32 bit handle regardless of content.
INTERFACE: Just construct using a string.
PARENT: <parentclass>
USES: <included class list>
CAVEATS: Remember to use an object, not a pointer to a string to construct the HUATOM.
NOTES:
HISTORY: DavidHov 9/10/91 Created
**************************************************************************/
DLL_CLASS HUATOM { public:
// Default constructor for use in static and structure declarations.
inline HUATOM () : _puaAtom( (UATOM *) NULL ) {}
// Constructor for use in constructing from a pointer.
inline HUATOM ( UATOM * puAtom ) : _puaAtom( puAtom ) {}
// Construct using a string.
HUATOM ( const TCHAR * puzStr, BOOL fExists = FALSE ) ;
// Return a pointer to the underlying text
const TCHAR * QueryText () const ;
// Return a pointer to the underlying NLS_STR in the table
const NLS_STR * QueryNls () const ;
// Standard functions and operators.
// Return standard error codes if invalid
APIERR QueryError () const ;
// Compare two HUATOMs
inline BOOL operator==( const HUATOM & huaAtom ) const { return _puaAtom == huaAtom._puaAtom ; }
// Compare two HUATOMs for inequality
inline BOOL operator!=( const HUATOM & huaAtom ) const { return _puaAtom != huaAtom._puaAtom ; }
// Return TRUE if HUATOM is invalid
inline BOOL operator ! () const { return _puaAtom == NULL ; }
// If cast BOOL, return TRUE if HUATOM is valid
inline operator BOOL () const { return _puaAtom != NULL ; }
// Assignment operator: just move the opaque pointer
// BUGBUG: if ref parameter is 'const', intermediate variable
// construction is marked 'const', and C compiler error results.
#if defined(_CFRONT_PASS_)
#define CONST_HACK
#else
#define CONST_HACK const
#endif
inline HUATOM & operator= ( CONST_HACK HUATOM & huaAtom ) { _puaAtom = huaAtom._puaAtom ; return *this ; }
// Cast to void *; return opaque pointer
inline operator void * () const { return (void *) _puaAtom ; }
inline operator const TCHAR * () const { return QueryText() ; }
inline operator const NLS_STR * () const { return QueryNls() ; }
inline operator const NLS_STR & () const { return *QueryNls() ; }
private: UATOM * _puaAtom ; };
/*************************************************************************
NAME: UATOM_MANAGER
SYNOPSIS: Universal Atom Management control functions.
The underlying hashing and table routines for HUATOM.
INTERFACE: Application must call UATOM_MANGER::Initialize() before any HUATOMs are created.
PARENT: BASE
USES: none
CAVEATS:
NOTES:
HISTORY: DavidHov 9/10/91 Created
**************************************************************************/
DLL_CLASS UATOM_MANAGER : public BASE { friend class HUATOM ; public: // Create the atom management space and instance
static APIERR Initialize ();
// Destroy the atom management space.
static APIERR Terminate () ;
// Return a pointer to the atom manager instance
static UATOM_MANAGER * Instance () ;
private: UATOM_MANAGER ();
~ UATOM_MANAGER () ;
static UATOM_MANAGER * pInstance ; // Private instance pointer
UATOM * Tokenize // Tokenizing function
( const TCHAR * puzStr, BOOL fExists = FALSE ) ;
UATOM_REGION * _pumRegion ; // Atom storage region
};
#endif // _UATOM_HXX_
|