/*++ Copyright (c) 1998 Microsoft Corporation Module Name: FTMan File Name: FrSpace.cpp Abstract: Implementation of the CFreeSpaceData class. The class that stores all information related to a free space Author: Cristian Teodorescu October 23, 1998 Notes: Revision History: --*/ #include "stdafx.h" #include "FrSpace.h" #include "Resource.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif /////////////////////////////////////////////////////////////////////////////////////////////////// // CFreeSpaceData // Constructor CFreeSpaceData::CFreeSpaceData( DWORD dwDiskNumber, DWORD dwSignature, LONGLONG llOffset, LONGLONG llSize, FREE_SPACE_TYPE wFreeSpaceType, LONGLONG llCylinderSize, DWORD dwPartitionCountOnLevel, DWORD dwExtendedPartitionCountOnLevel, CItemData* pParentData /* = NULL */) : CItemData( IT_FreeSpace, pParentData, FALSE ), m_dwDiskNumber(dwDiskNumber), m_dwSignature(dwSignature), m_llOffset(llOffset), m_llSize(llSize), m_wFreeSpaceType( wFreeSpaceType ), m_dwFreeSpaceNumber(0), m_llCylinderSize(llCylinderSize), m_dwPartitionCountOnLevel( dwPartitionCountOnLevel ), m_dwExtendedPartitionCountOnLevel( dwExtendedPartitionCountOnLevel ) { } //////////////////////////////////////////////////////////////////////////////////////////////////// // Public methods BOOL CFreeSpaceData::ReadItemInfo( CString& strErrors ) { MY_TRY m_bValid = TRUE; strErrors = _T(""); m_ulNumMembers = 0; // Retrieve all disks used by this volume if( !RetrieveDisksSet() ) { AddError( strErrors, IDS_ERR_RETRIEVE_DISKS_SET, FALSE ); m_bValid = FALSE; } m_bIoOK = TRUE; m_iImage = ComputeImageIndex(); return m_bValid; MY_CATCH_AND_THROW } BOOL CFreeSpaceData::ReadMembers( CObArray& arrMembersData, CString& strErrors ) { arrMembersData.RemoveAll(); strErrors = _T(""); m_ulNumMembers = 0; return TRUE; } int CFreeSpaceData::ComputeImageIndex() const { return II_FreeSpace; } BOOL CFreeSpaceData::operator==(CItemData& rData) const { MY_TRY if( rData.GetItemType() != IT_FreeSpace ) return FALSE; CFreeSpaceData* pFrSpaceData = (CFreeSpaceData*)(&rData); return( ( m_dwDiskNumber == pFrSpaceData->m_dwDiskNumber ) && ( m_dwSignature == pFrSpaceData->m_dwSignature ) && ( m_llOffset == pFrSpaceData->m_llOffset ) && ( m_llSize == pFrSpaceData->m_llSize ) && ( m_wFreeSpaceType == pFrSpaceData->m_wFreeSpaceType ) && ( m_llCylinderSize == pFrSpaceData->m_llCylinderSize ) && ( m_dwPartitionCountOnLevel == pFrSpaceData->m_dwPartitionCountOnLevel ) && ( m_dwExtendedPartitionCountOnLevel == pFrSpaceData->m_dwExtendedPartitionCountOnLevel ) ); MY_CATCH_AND_THROW } void CFreeSpaceData::GetDisplayName( CString& strDisplay ) const { MY_TRY strDisplay.Format( IDS_FREE_SPACE_NAME, m_dwDiskNumber, m_dwFreeSpaceNumber ); MY_CATCH_AND_THROW } void CFreeSpaceData::GetDisplayType( CString& strDisplay ) const { MY_TRY switch( m_wFreeSpaceType ) { case FST_Primary: strDisplay.LoadString( IDS_TYPE_FREE_SPACE ); break; case FST_InExtendedPartition: strDisplay.LoadString( IDS_TYPE_FREE_SPACE_IN_EXTENDED_PARTITION ); break; case FST_EmptyExtendedPartition: strDisplay.LoadString( IDS_TYPE_EMPTY_EXTENDED_PARTITION ); break; default: ASSERT(FALSE); } MY_CATCH_AND_THROW } BOOL CFreeSpaceData::GetSize( LONGLONG& llSize ) const { llSize = m_llSize; return TRUE; } BOOL CFreeSpaceData::GetDiskNumber( ULONG& ulDiskNumber ) const { ulDiskNumber = m_dwDiskNumber; return TRUE; } BOOL CFreeSpaceData::GetOffset( LONGLONG& llOffset) const { llOffset = m_llOffset; return TRUE; } //////////////////////////////////////////////////////////////////////////////////////////////////// // Protected methods BOOL CFreeSpaceData::RetrieveDisksSet() { MY_TRY m_setDisks.RemoveAll(); m_setDisks.Add( m_dwDiskNumber ); return TRUE; MY_CATCH_AND_THROW }