Разработка программного модуля для компьютерной игры
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
p;
Внимание! Осмысленность идентификаторов за всё время работы модуля не гарантируется.
Входные и выходные данные.
Входные и выходные данные полностью описаны в обращении к программе. Ничего другого модуль не использует.
Сообщения.
Сообщения при работе модуля выводятся при помощи механизма исключений С++ в виде текстовых строк, каждая из которых соответствует некоторому типу исключений.
Типы исключений:
) no_file - не найден файл по имени или дескриптору;
) stream_fail - ошибка при создании потока;
) no_mounted - поиск невозможен, нет замонтированных подсистем;
) no_writable - нет возможности открыть поток на запись, все подсистемы помечены как read_only;
) incorrect_path - грубая ошибка в задании имени файла;
) zip_restrictions - неподдерживаемый формат зип-архива.
Приложение 2
Фрагменты исходных текстов.
Ниже представлены интерфейсные классы VFS. Подробности реализации в большинстве случаев опущены, поскольку код имеет большой объем.
Файл fs.hmll
{ fs
{
/////////////////////////////////////////////////////////////////////////
//перечисления для передачи фуцкциям в качестве параметров
enum SearchParams
{= 1<<0,= 1<<1,= 1<<2
};
enum WriteParams
{
append = 1
};
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
//БАЗОВЫЙ ПРЕДИКАТ
//базовая эвристика, определяет файл с большей датой последнего изменения
//как "меньший". Свои предикаты нужно писать "по образу и подобию"
struct date_heuristic
{operator()(const file_id& x, const file_id& y) const
{x_prior = x.sub_fs()->priority();y_prior = y.sub_fs()->priority();(x_prior == y_prior)(x.date() >= y.date());(x_prior > y_prior);
}
};
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
//ПРОВЕРИТЬ ПУТЬ НА ПРАВИЛЬНОСТЬ
//проверить на наличие запрещенных файловой системой символов
inline bool is_path_valid(const std::string& raw_data);
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
//ОТКРЫТЬ ФАЙЛ НА ЧТЕНИЕ
//открыть, используя предикат сортировки
template r_open_file(const std::string& file_name, Pred pred, seekable = true);
//открыть с использованием стандартного предиката
inline std::auto_ptr r_open_file(const std::string& file_name, bool seekable = true);
//открыть по идентификаторуstd::auto_ptr r_open_file(const file_id &id, bool seekable = true);
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
//ПРОВЕРИТЬ ФАЙЛ НА СУЩЕСТВОВАНИЕ
//проверить, используя предикат сортировки
template file_id file_exists(const std::string& file_name, Pred pred);
//проверить с использованием стандартного предиката
inline file_id file_exists(const std::string& file_name);
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
//ОТКРЫТЬ ФАЙЛ НА ЗАПИСЬ
//открыть, используя предикат сортировки
template
inline std::auto_ptr w_open_file(const std::string& file_name, Pred pred, seekable = true);
//открыть с использованием стандартного предиката
inline std::auto_ptr w_open_file(const std::string& file_name, bool seekable = true);
//открыть по идетификатору, параметр - appendstd::auto_ptr w_open_file(const file_id &id,seekable = true, bool app = 0);
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
//УДАЛИТЬ ФАЙЛ
//удалить, используя предикат сортировки
template void delete_file(const std::string& file_name, Pred pred);
//удалить с использованием стандартного предикатаvoid delete_file(const std::string& file_name);
//удалить по идентификаторуvoid delete_file(const file_id &id);
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
//ПОЛУЧИТЬ ОБЪЕКТ ДЛЯ ИТЕРИРОВАНИЯ
//получить объект-"переборщик" файлов по маске (path - путь вместе с маской).
//Из него можно получить контейнеры file_id по всем файлам (будет использоваться
//эвристика) и по вариантам каждого отдельного файла
//создать объект, используя предикат сортировки
template
inline fs_files get_files(const std::string& file_name, Pred pred, unsigned param);
//создать с использованием стандартного предикатаfs_files get_files(const std::string& file_name, unsigned param);
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
//СОЗДАТЬ ФИЗИЧЕСКИЕ ДИРЕКТОРИИ ПО ПУТИvoid make_dir(const std::string& file_name);
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
//МОНТИРОВАНИЕ/ДЕМОНТИРОВАНИЕ ПОДСИСТЕМ
//замонтировать подсистему. Права на удаление будут принадлежать fs.
//Возвращается объект, который нужно передать в unmount() для принудительного
//демонтирования.sub_fs_id mount(std::auto_ptr what, const std::string& file_name);
//демонтировать подсистему и получить права на её удаление
inline std::auto_ptr unmount(sub_fs_id id);
/////////////////////////////////////////////////////////////////////////
}
}
Файл system.hmll
{fs
{directory;sub_fs;cache;critical_section;
//=====================================================================================//
// class system //
//=====================================================================================//FILE_SYSTEM_EXPORT system
{::system *m_instance;~system() {}:void make_fs();void destroy_fs();system *instance();:mll::utils::lcrn_tree unmount(sub_fs_id id) = 0;mll::fs::cache* cache() = 0;critical_section *get_cs() const = 0;
};
//исключения всякого родаmll::debug::exception_template no_writable;mll::debug::exception_template<str