///////////////////////////////////////////////////////////////////////////// // Creation 20/12/2003 // // // MAP.CPP // ------- // // // Sylvain MARECHAL - sylvain.marechal1@libertysurf.fr ///////////////////////////////////////////////////////////////////////////// // // Show map usage // ///////////////////////////////////////////////////////////////////////////// #pragma warning(disable : 4786) // Suppress low warnings #include #include #include // A class that manages files class CFile { public: CFile() { m_hFile = NULL; m_szName[0] = 0; } ~CFile() { if(m_hFile) Close(); } int Open( const char * pszFile, const char * Mode ) { strcpy( m_szName, pszFile ); m_hFile = fopen( pszFile, Mode ); return m_hFile != NULL ? 0 : -1; } int Close() { if(!m_hFile) return -1; fclose(m_hFile); m_hFile = NULL; return 0; } int Read( char * pszBuffer, int cbBuffer ) { if(!m_hFile) return -1; return fread( pszBuffer, 1, cbBuffer, m_hFile ); } int Write( const char * pszBuffer, int cbBuffer ) { if(!m_hFile) return -1; return fwrite( pszBuffer, 1, cbBuffer, m_hFile ); } FILE * GetFileHandle() { return m_hFile; } const char * GetFileName() { return m_szName; } private: FILE * m_hFile; char m_szName[1024]; }; // Map declaration typedef std::map FileMap; typedef FileMap::iterator FileMapIterator; // Map global variable static FileMap s_FileMap; ///////////////////////////////////////////////////////////////////////////// // // FINDCLASSFILEBYHANDLE ///////////////////////////////////////////////////////////////////////////// // // DESCRIPTION // --FindClassFileByHandle-- // ARGUMENTS // Argument1: FILE * hFile // RETOUR/RESULTAT // void // REMARQUE // Rev 20/12/2003 ////////////////////////////////////////////////////////////////////////////// void FindClassFileByHandle( FILE * hFile ) { FileMapIterator it; // Look in the map it = s_FileMap.find(hFile); if( it != s_FileMap.end() ) { CFile * pFile = it->second; printf( "File found(hFile=%#x): Name is '%s', handle=%#x\n", hFile, pFile->GetFileName(), pFile->GetFileHandle() ); } else { printf( "File not found in the map\n" ); } } ///////////////////////////////////////////////////////////////////////////// // // MAIN ///////////////////////////////////////////////////////////////////////////// // // DESCRIPTION // --main-- // ARGUMENTS // RETOUR/RESULTAT // int // REMARQUE // Rev 20/12/2003 ////////////////////////////////////////////////////////////////////////////// int main() { CFile FileObject; FILE * hFile; // Open the file if( FileObject.Open( "map.cpp", "r" ) < 0 ) { printf( "Can't open file\n" ); return 1; } // Retrieve file handle hFile = FileObject.GetFileHandle(); // Add the file in the map s_FileMap.insert( FileMap::value_type(hFile, &FileObject) ); // Find the object with the file handle by searching in the map FindClassFileByHandle( hFile ); // Close the file FileObject.Close(); return 0; }