Разработка программного модуля для компьютерной игры

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



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