138 lines
3.7 KiB
C++
138 lines
3.7 KiB
C++
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1994 - 1994.
|
|
//
|
|
// File: tablecur.hxx
|
|
//
|
|
// Contents: Large table cursor definitions
|
|
//
|
|
// Classes: CTableCursor - basic table cursor
|
|
// CTableCursorSet - a set of table cursors
|
|
//
|
|
// Functions:
|
|
//
|
|
// History:
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
class CTableRowAlloc;
|
|
class CPidRemapper;
|
|
class CTableSource;
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Class: CTableCursor
|
|
//
|
|
// Purpose: A pointer into a large table. Also holds a copy of the
|
|
// column bindings and associated data.
|
|
//
|
|
// Notes:
|
|
//
|
|
// History: 02 Jun 94 AlanW Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
class CTableCursor
|
|
{
|
|
friend class CTableCursorSet;
|
|
public:
|
|
|
|
CTableCursor( );
|
|
|
|
~CTableCursor( void );
|
|
|
|
SCODE SetBindings(
|
|
ULONG cbRowLength,
|
|
XPtr<CTableColumnSet> & NewColumns
|
|
);
|
|
|
|
//
|
|
// Accessor functions
|
|
//
|
|
|
|
USHORT GetRowWidth(void) const
|
|
{ return _cbRowWidth; }
|
|
|
|
const CTableColumnSet & GetBindings(void) const {
|
|
return _BoundColumns.GetReference();
|
|
}
|
|
|
|
void ValidateBindings() const
|
|
{
|
|
// this should only happen if we've been hacked
|
|
|
|
if ( _BoundColumns.IsNull() )
|
|
{
|
|
Win4Assert( !"are we being hacked?" );
|
|
THROW( CException( E_FAIL ) );
|
|
}
|
|
}
|
|
|
|
void SetSource(CTableSource *pSource)
|
|
{ _pSource = pSource; }
|
|
CTableSource & GetSource()
|
|
{ return *_pSource; }
|
|
|
|
private:
|
|
// Check that a binding is legal.
|
|
SCODE _CheckBinding(
|
|
CTableColumn const & rCol,
|
|
CTableRowAlloc & rRowAlloc,
|
|
USHORT maxRow
|
|
);
|
|
|
|
// Check that a set of bindings is legal.
|
|
SCODE _CheckBindings(
|
|
CTableColumnSet const & rCols,
|
|
CTableRowAlloc & rRowAlloc,
|
|
USHORT maxRow
|
|
);
|
|
|
|
USHORT _hUnique; // unique portion of handle matched
|
|
// on external calls
|
|
USHORT _cbRowWidth; // width of output row
|
|
XPtr<CTableColumnSet> _BoundColumns; // Bound output column description
|
|
CTableSource * _pSource; // source associated with cursor
|
|
};
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Class: CTableCursorSet
|
|
//
|
|
// Purpose: A collection of CTableCursors.
|
|
//
|
|
// Notes:
|
|
//
|
|
// History: 02 Jun 94 AlanW Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
DECL_DYNARRAY( CTableCursorArray, CTableCursor )
|
|
|
|
class CTableCursorSet : public CTableCursorArray
|
|
{
|
|
public:
|
|
CTableCursorSet(void):
|
|
_hKeyGenerator(0),
|
|
CTableCursorArray(1)
|
|
{
|
|
}
|
|
|
|
~CTableCursorSet(void);
|
|
|
|
CTableCursor& Lookup(ULONG hCursor);
|
|
void Add( CTableCursor * const pCursorIn,
|
|
ULONG &rhCursor );
|
|
SCODE Release(ULONG hCursor);
|
|
|
|
unsigned Count();
|
|
private:
|
|
USHORT _hKeyGenerator; // generator value for cursor handles
|
|
};
|
|
|