#ifndef __FileListing_h__
#define __FileListing_h__

#include "Log.h"

//
// Класс "Список файлов"
// Предназначен для эффективного управления потенциально очень большим
// списком файлов.
//
class CFileListing
{
public:

  CFileListing( void );

  ~CFileListing( void );

  void load( const char* path );
  // Загружает список из указанного файла.

  void reset( void );
  // Очищает список.

  void resetFiles( void );
  // Очищает список файлов.

  void resetErrors( void );
  // Очищает список ошибок.

  void addFile( const CFileInfo& info );
  // Добавляет информацию о файле в конец списка.

  void addError( const CFileInfo& info );
  // Добавляет информацию об ошибке.

  int fileCount( void ) const;
  // Возвращяет количество файлов в списке.

  int errCount( void ) const;
  // Возвращает количество ошибок.

  void fileAt( int n, CFileInfo* pInfo ) const;
  // Извлекает информацию об n-м файле.

  void updateFileAt( int n, const CFileInfo& info );
  // Обновляет информацию об n-м файле.

  void errAt( int n, CFileInfo* pInfo ) const;
  // Извлекает информацию об n-й ошибке.

  POSITION firstOwnerPos( void ) const;
  // Возвращает позицию 1-го владельца.

  CString nextOwnerName( POSITION& pos ) const;
  // Возвращает имя очередного владельца.

  void storageDir( LPCTSTR path );
  // Задает каталог на диске, в котором должны храниться журналы.

  CString storageDir( void ) const;
  // Возвращает строку, содержащую путь к каталогу, в котором должны
  // хпаниться журналы.

private:

  CLog m_files;
  // Журнал на диске, в котором хранится информация о файлах.

  CLog m_errors;
  // Журнал на диске, в котором хранится информация об ошибках.

  CString m_storageDir;
  // Каталог на диске, в котором хранятся журналы.

  CMapStringToPtr m_ownerMap;
  // Хэш-таблица, используемая для формирования списка всех имен владельцев файлов.
};

#endif //__FileListing_h__
