#ifndef __Log_h__
#define __Log_h__

#include <afxtempl.h>

// Структура содержит информацию об атрибутах файла.
struct CFileInfo
{
  CString filePath; // полный путь к файлу
  CString ownerName; // имя владельца (в текущем контексте)
  size_t fileSize; // размер файла (в байтах)
};

// Класс "Журнал".
class CLog
{
public:

  CLog( void );

  ~CLog( void );

  void Open( LPCTSTR path );
  // Открывает существующий журнал в режиме просмотра.

  void Create( LPCTSTR path, BOOL bAutoDelete );
  // Создает новый журнал. Если файл существует, его содержимое
  // очищается. В случае ошибки выбрасывает CFileException.

  void Close( void );
  // Закрывает журнал.

  const CString& FileName( void ) const;
  // Возвращает имя файла журнала.

  void Append( const CFileInfo& entry );
  // Добавляет в журнал новую запись.

  int Count( void ) const;
  // Возвращает количество записей в журнале.

  void GetEntry( int n, CFileInfo* pEntry ) const;
  // Извлекает из журнала запись с заданным номером (начиная с 0).

  void SetEntry( int n, const CFileInfo& entry );
  // Модифицирует запись с заданным номером (начиная с 0).

private:

  DWORD ReadRecord(int n, void* pBuf, size_t sz) const;
  // Читает запись с заданным номером в указанный буфер.

  HANDLE m_hFile; // дескриптор файла, в котором сохраняется журнал

  CString m_fileName; // имя файла

  CArray<LONG, LONG&> m_aOffsets; // смещения записей

  BOOL m_bAutoDelete; // флаг автоудаления журнала
};

#endif //__Log_h__
