mirror of https://github.com/tongzx/nt5src
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.
123 lines
3.2 KiB
123 lines
3.2 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1991 - 1992.
|
|
//
|
|
// File: keyarray.hxx
|
|
//
|
|
// Contents: Key Array Class
|
|
//
|
|
// Classes: CKeyArray
|
|
//
|
|
// WARNING: CKeyArray is in CSynRestriction, which is not unwindable,
|
|
// so don't make CKeyArray unwindable
|
|
//
|
|
// History: 30-Jan-92 AmyA Created
|
|
// 14-Nov-95 dlee added fThrow bother
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
#ifdef DISPLAY_INCLUDES
|
|
#pragma message( "#include <" __FILE__ ">..." )
|
|
#endif
|
|
|
|
class CKey;
|
|
class CKeyBuf;
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Class: CKeyArray
|
|
//
|
|
// Purpose: Class for the management of an array of CKeys.
|
|
//
|
|
// Interface:
|
|
//
|
|
// History: 30-Jan-92 AmyA Created
|
|
// 15-Apr-92 BartoszM Re-implemented
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
class CKeyArray
|
|
{
|
|
public:
|
|
CKeyArray( int size, BOOL fThrow = TRUE );
|
|
CKeyArray( const CKeyArray& keyArray, BOOL fThrow = TRUE );
|
|
~CKeyArray();
|
|
int Count() const { return _count; }
|
|
BOOL Add (const CKey& Key);
|
|
BOOL Add (const CKeyBuf& Key);
|
|
BOOL Add (int pos, const CKeyBuf& keyBuf);
|
|
BOOL Add (int pos, const CKey& key);
|
|
void Delete (int pos );
|
|
void Transfer(int dest, int source);
|
|
BOOL FillMax ( int pos );
|
|
CKey& Get (int position) const;
|
|
int TotalKeySize() const;
|
|
BOOL IsValid() const { return 0 != _aKey; }
|
|
|
|
//
|
|
// Serialization
|
|
//
|
|
|
|
void Marshall( PSerStream & stm ) const;
|
|
CKeyArray( PDeSerStream & stm, BOOL fThrow = TRUE );
|
|
|
|
#ifdef CIEXTMODE
|
|
void CiExtDump(void *ciExtSelf);
|
|
#endif
|
|
|
|
private:
|
|
void _Grow(int pos);
|
|
void _Add( const CKey& Key );
|
|
void _Add( const CKeyBuf& Key );
|
|
void _Add( int pos, const CKeyBuf& keyBuf );
|
|
void _Add( int pos, const CKey& key );
|
|
void _FillMax ( int pos );
|
|
|
|
#if CIDBG == 1
|
|
void Display() {}
|
|
#endif // CIDBG == 1
|
|
|
|
CKey* _aKey;
|
|
int _count;
|
|
int _size;
|
|
BOOL _fThrow;
|
|
};
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CKeyArray::Get, public
|
|
//
|
|
// Synopsis: Get access to key at given position
|
|
//
|
|
// Arguments: [pos] -- position in array
|
|
//
|
|
// History: 16-Apr-92 BartoszM Created.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
inline CKey& CKeyArray::Get(int position) const
|
|
{
|
|
Win4Assert(position < _size);
|
|
return _aKey[position];
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//----------------------------------------------------------------------------
|
|
inline void CKeyArray::Transfer(int dest, int source)
|
|
{
|
|
Win4Assert(dest < _size);
|
|
Win4Assert(source < _size);
|
|
|
|
_aKey[dest].Acquire( _aKey[source] );
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//----------------------------------------------------------------------------
|
|
inline void CKeyArray::Delete(int position)
|
|
{
|
|
Win4Assert(position < _size);
|
|
_aKey[position].Free();
|
|
}
|
|
|