//+--------------------------------------------------------------------------- // // Copyright (C) 1992, Microsoft Corporation. // // File: PhysIndex.HXX // // Contents: FAT Buffer/Index package // // Classes: CPhysBuffer -- Buffer // // History: 05-Mar-92 KyleP Created // //---------------------------------------------------------------------------- #pragma once #include //+------------------------------------------------------------------------- // // Class: CPhysIndex // // Purpose: Provides physical access to index pages // // History: 17-Feb-92 KyleP Subclass for PhysIndex / PhysHash // //-------------------------------------------------------------------------- class CPhysIndex : public CPhysStorage { public: inline CPhysIndex( PStorage & storage, PStorageObject& obj, WORKID objectId, unsigned cpageReqSize, XPtr & stream ); inline CPhysIndex( PStorage & storage, PStorageObject& obj, WORKID objectId, PStorage::EOpenMode mode, XPtr & stream ); inline CPhysIndex( CPhysIndex & readIndex, PStorage::EOpenMode mode, XPtr & stream ); inline PMmStream * DupReadWriteStream( PStorage::EOpenMode mode ) { return _storage.DupExistingIndexStream( _obj, _stream.GetReference(), mode ); } PStorage & GetStorage() { return _storage; } private: virtual void ReOpenStream(); }; //+------------------------------------------------------------------------- // // Class: CPhysHash // // Purpose: Provides physical access to hash pages // // History: 17-Feb-92 KyleP Subclass for PhysIndex / PhysHash // //-------------------------------------------------------------------------- class CPhysHash : public CPhysStorage { public: inline CPhysHash( PStorage & storage, PStorageObject& obj, WORKID objectId, unsigned cpageReqSize, XPtr & stream ); inline CPhysHash( PStorage & storage, PStorageObject& obj, WORKID objectId, PStorage::EOpenMode mode, XPtr & stream ); private: virtual void ReOpenStream(); }; //+------------------------------------------------------------------------- // // Method: CPhysIndex::CPhysIndex // // Synopsis: Ctor for an existing index in readable or writeable mode. // // History: 17-Feb-1994 KyleP Created // 10-Apr-1994 SrikantS Added the ability to open an // existing stream for write // access. // //-------------------------------------------------------------------------- inline CPhysIndex::CPhysIndex( PStorage & storage, PStorageObject& obj, WORKID objectid, PStorage::EOpenMode mode, XPtr & stream ) : CPhysStorage( storage, obj, objectid, stream.Acquire(), mode, FALSE ) { } //+------------------------------------------------------------------------- // // Method: CPhysIndex::CPhysIndex // // Synopsis: Ctor for new writeable index // // History: 17-Feb-1994 KyleP Created // //-------------------------------------------------------------------------- inline CPhysIndex::CPhysIndex( PStorage & storage, PStorageObject & obj, WORKID objectid, unsigned cpageReqSize, XPtr & stream ) : CPhysStorage( storage, obj, objectid, cpageReqSize, stream.Acquire(), FALSE ) { } //+--------------------------------------------------------------------------- // // Function: CPhysIndex::CPhysIndex // // Synopsis: Clones an existing CPhysIndex by duplicating the stream. // This is used during master merge to have a separate // CPhysIndex for queries and the merge process. // // Arguments: [readIndex] -- An existing index. // [mode] -- Mode in which to open. // // History: 8-23-94 srikants Created // // Notes: // //---------------------------------------------------------------------------- inline CPhysIndex::CPhysIndex( CPhysIndex & readIndex, PStorage::EOpenMode mode, XPtr & stream ) : CPhysStorage( readIndex._storage, readIndex._obj, readIndex.ObjectId(), stream.Acquire(), mode, FALSE ) { Win4Assert( PStorage::eOpenForWrite == mode ); } //+------------------------------------------------------------------------- // // Method: CPhysHash::CPhysHash // // Synopsis: Ctor for an existing hash stream. // // History: 17-Feb-1994 KyleP Created // 20-Apr-1994 Srikants Optionally open in write mode. // //-------------------------------------------------------------------------- inline CPhysHash::CPhysHash( PStorage & storage, PStorageObject& obj, WORKID objectid, PStorage::EOpenMode mode, XPtr & stream ) : CPhysStorage( storage, obj, objectid, stream.Acquire(), mode, FALSE ) { } //+------------------------------------------------------------------------- // // Method: CPhysHash::CPhysHash // // Synopsis: Ctor for a new writeable hash // // History: 17-Feb-1994 KyleP Created // //-------------------------------------------------------------------------- inline CPhysHash::CPhysHash( PStorage & storage, PStorageObject & obj, WORKID objectid, unsigned cpageReqSize, XPtr & stream ) : CPhysStorage( storage, obj, objectid, cpageReqSize, stream.Acquire(), FALSE ) { }