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.
207 lines
4.5 KiB
207 lines
4.5 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1995 - 1998
|
|
//
|
|
// File: PCache.hxx
|
|
//
|
|
// Contents: Protocol for HROW cache
|
|
//
|
|
// Classes: PMiniRowCache
|
|
//
|
|
// History: 05-Jun-95 KyleP Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Class: PMiniRowCache
|
|
//
|
|
// Purpose: Protocol for HROW cache
|
|
//
|
|
// History: 05-Jun-95 KyleP Created.
|
|
//
|
|
// Notes: PMiniRowCache is responsible for caching behaviour.
|
|
// Derived classes control movement within the rowset.
|
|
// Unlike IRowset*, there is a notion of 'current position'
|
|
// in PMiniRowCache.
|
|
//
|
|
// In addition to caching HROWs, a single binding can be
|
|
// cached for the top row. This is used to assist in
|
|
// sorting.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
class PMiniRowCache
|
|
{
|
|
public:
|
|
|
|
PMiniRowCache( int Index,
|
|
IRowset * pRowset,
|
|
unsigned cBindings,
|
|
DBBINDING * pBindings,
|
|
unsigned cbMaxLen );
|
|
|
|
virtual ~PMiniRowCache();
|
|
|
|
//
|
|
// Iteration
|
|
//
|
|
|
|
enum ENext
|
|
{
|
|
Ok,
|
|
NotNow,
|
|
EndOfRows
|
|
};
|
|
|
|
virtual ENext Next( int iDir = 1 ) = 0;
|
|
|
|
inline BOOL IsAtEnd() const;
|
|
|
|
virtual void FlushCache();
|
|
|
|
//
|
|
// Member data access
|
|
//
|
|
|
|
inline HROW GetHROW();
|
|
|
|
inline int Index() const;
|
|
|
|
inline BYTE * GetData() const;
|
|
|
|
inline ULONG DataLength() const;
|
|
|
|
//
|
|
// Cache control
|
|
//
|
|
|
|
inline ULONG CacheSize() const;
|
|
|
|
void SetCacheSize( DBCOUNTITEM cNewRows );
|
|
|
|
protected:
|
|
|
|
void LoadData();
|
|
|
|
//
|
|
// Bookeeping.
|
|
//
|
|
|
|
int const _Index;
|
|
IRowset * _pRowset;
|
|
HACCESSOR _hacc;
|
|
|
|
//
|
|
// Cached rows
|
|
//
|
|
|
|
XArray<HROW> _ahrow;
|
|
DBCOUNTITEM _chrow;
|
|
DBCOUNTITEM _ihrow;
|
|
|
|
//
|
|
// Cached data for top row.
|
|
//
|
|
|
|
ULONG _cbRow;
|
|
BYTE * _pbRow;
|
|
};
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: PMiniRowCache::IsAtEnd, public
|
|
//
|
|
// Returns: TRUE if there are no more rows in cache.
|
|
//
|
|
// History: 05-Jun-95 KyleP Created.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
inline BOOL PMiniRowCache::IsAtEnd() const
|
|
{
|
|
return( _ihrow >= _chrow );
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: PMiniRowCache::CacheSize, public
|
|
//
|
|
// Returns: Size of cache.
|
|
//
|
|
// History: 05-Jun-95 KyleP Created.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
inline ULONG PMiniRowCache::CacheSize() const
|
|
{
|
|
return _ahrow.Count();
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: PMiniRowCache::GetHROW, public
|
|
//
|
|
// Returns: HROW of top row.
|
|
//
|
|
// History: 05-Jun-95 KyleP Created.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
inline HROW PMiniRowCache::GetHROW()
|
|
{
|
|
Win4Assert( !IsAtEnd() );
|
|
|
|
return _ahrow[(unsigned) _ihrow];
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: PMiniRowCache::Index, public
|
|
//
|
|
// Returns: Index of this cache (usually position in array of rowsets).
|
|
//
|
|
// History: 05-Jun-95 KyleP Created.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
inline int PMiniRowCache::Index() const
|
|
{
|
|
return _Index;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: PMiniRowCache::GetData, public
|
|
//
|
|
// Returns: Prefetched data for top row.
|
|
//
|
|
// History: 05-Jun-95 KyleP Created.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
inline BYTE * PMiniRowCache::GetData() const
|
|
{
|
|
Win4Assert( !IsAtEnd() );
|
|
|
|
return _pbRow;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: PMiniRowCache::DataLength, public
|
|
// k
|
|
// Returns: Size of prefetched data.
|
|
//
|
|
// History: 05-Jun-95 KyleP Created.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
inline ULONG PMiniRowCache::DataLength() const
|
|
{
|
|
return _cbRow;
|
|
}
|
|
|