xrFSL Code
Status: Planning
Brought to you by:
pavdev
| File | Date | Author | Commit |
|---|---|---|---|
| Temp | 2008-06-11 | pavdev | [r22] Небольшой рефакторинг проекта. Добавлен интерфе... |
| include | 2008-06-18 | pavdev | [r26] Базовая имплементация методов чтения/записи в с... |
| libs | 2008-06-06 | pavdev | [r1] |
| src | 2008-06-18 | pavdev | [r26] Базовая имплементация методов чтения/записи в с... |
| ReadMe.txt | 2008-06-08 | pavdev | [r12] Solve problem in PPEFormat |
| XRaySerializer.sln | 2008-06-06 | pavdev | [r2] Commit for testing SVN |
| xrFSL.vcproj | 2008-06-18 | pavdev | [r26] Базовая имплементация методов чтения/записи в с... |
========================================================================
DYNAMIC LINK LIBRARY : XRaySerializer Project Overview
========================================================================
Прошу прощения за столь долгое отсутствие. Сессия меня доконала :)))
Ну что ж основа проекту положена, написан каркас библиотеки и создан проект на [url=http://sourceforge.net/projects/xrfsl/]SourceForge[/url].
Теперь предстоит заняться разбором форматов и реализацией соответствующих частей библиотеки.
Далее пойдут техническая и другая подробная информация, примерный план такой:
[list]
[*]Терминология;
[*]Концепция библиотеки;
[*]Требования к коду(стиль и т.д.);
[*]Структура проекта;
[*]Простейший цикл разработки;
* Знакомимся с SVN :)
* Добавляем свой формат в библиотеку.
[/list]
[size=6][b]Терминология.[/b][/size]
Терминология получилось несколько специфичной, поэтому выделена в отдельный пункт, как требующая пояснений. В основе библиотеки лежит два понятия:
[i]Формат(Format).
Парсер(Загрузчик/Loader).[/i]
[u]Формат.[/u]
Формат является инкапсулятором данных, которые мы можем получить из файла, на примере ogf это будут: информация о вершинах/индексах, информация о костях, о материалах и т.п.
[u]Парсер.[/u]
Собственно парсер данных файла, с последующим помещением информации в "формат".
[size=6][b]Концепция библиотеки.[/b][/size]
Библиотека построена таким образом, чтобы обеспечить единый интерфейс для взаимодействия с любым форматом. В роли этого интерфейса на данном этапе выступает [i]FormatManager[/i], класс, управляющий всеми форматами и парсерами. Формат имеет свой парсер по умолчанию(IFormat::loadImpl), для чего же тогда ещё отдельные парсеры? Сделано это опять же для обеспечения гибкости, опять же в качестве примера приведу ogf, не зависимо от версии формата данные у нас практически идентичные, но [i]формат ФАЙЛА[/i] может быть другой(другие id чанков и т.д.) вот для этого и служат альтернативные парсеры, которые по другому парсят файл, но загоняют данные в тот же формат.
[size=6][b]Требования к коду.[/b][/size]
Вообще я видел много различный нотаций кода, начиная от какой-нибудь общеизвестной венгерской и заканчивая разработками каких-нибудь фирм.
Но, применительно к срр мне больше нравится венгерская нотация - дёшево и сердито, поэтому приветствуется использование именно её. Исхожу из того, что я не компилятор, я не могу с ходу сказать переменная какого это типа :)
Относится это к полям классов и прототипам функций, внутри функции или метода, для локальной переменной можно задать просто осмысленное имя.
Список применяемых префиксов:
[code]
s string строка sClientName
sz zero-terminated string строка, ограниченная нулевым символом szClientName
i int integer переменная iCount
f float float переменная fRadius
u unsigned беззнаковая переменная uiSize
b boolean булева переменная bIsEmpty
a array массив aDimensions
t, dt time, datetime время, дата и время tDelivery, dtDelivery
p pointer указатель pBox
lp long pointer двойной (дальний) указатель lpBox
r reference ссылка rBoxes
h handle дескриптор hWindow
m_ member переменная-член m_sAddress
g_ global глобальная переменная g_nSpeed
C class класс CString
T type тип TObject[/code]
Имена методов класса начинаются со строчной буквы.
Комментарии обязательны, даже, если кажется, что это очевидно, лишним не будет ;) Я придерживаюсь комментирования на русском языке, непереводимые или переводимые криво выражения пишу на английском.
Если необходимо изменить уже существующий код, то оставляем более подробный комментарий и незабываем подписываться, чтобы можно было потом отыскать того, кто это сделал :)
[quote][b][color=Blue]Example.cpp[/color][/b] :
[i][color=#008000]// инициализируем LocatorApi - xrcore.dll sorry GSC... )
// открыть файл можно только из ворк диры, поэтому инициализация вынесена из конструктора в метод открытия файла -- Neo][
[/i][/color]xr_FS[b][color=#FF0000]->[/b][/color]_initialize[b][color=#FF0000]([/b][/color][color=#AC00A9]32[b][/color][color=#FF0000], [/b][/color]getPath[b][color=#FF0000]([/b][/color]m_sFileName[b][color=#FF0000]).[/b][/color]c_str[b][color=#FF0000]());[/color][/b]
[/quote]
[i]Комментарии должны быть совместимы с системой Doxygen, [url=http://belsut.info/pmo/ius/pages/use_doxygen.htm]подробнее...[/url][/i]
[b]Структура проекта.[/b]
Структура у проекта следующая:
bin\ - бинарные файлы
BinTemp\ - временные бинарные файлы
doc\ - документация кода
include\ - папка с хидерами
libs\ - library files
src\ - source code
Temp\ - папка для временных файлов, таких, как куски кода, части документации и т.д.
[size=6][b]Простейший цикл разработки.[/b][/size]
[b]Знакомимся с SVN.[/b]
SVN - система контроля версий файлов, незаменимая вещь при коллективной работе над кодом.
Вдаваться в подробности я не буду, о системе можно почитать и на официальном сайте, я же сторонник практики, поэтому рассмотрим простейший цикл внесения изменений в исходный код и отправки их в репозиторий.
Для начала нам понадобится клиент SVN, для Windows, чтобы не работать с консолью выбор очевиден: [url=http://tortoisesvn.tigris.org/]Tortoise SVN[/url].
Программа интегрируется в контекстное меню проводника.
Для начала необходимо создать рабочую папку, в которой будет проект. Далее необходимо извлечь проект в эту папку в контекстном меню выбираем команду SVN Extract...
Адрес репозитория: https://xrfsl.svn.sourceforge.net/svnroot/xrfsl
По окончанию операции в папке будет находиться последняя версия проекта.
Можно начинать работу, вносить изменения в файлы.
После того, как закончена работа, например добавлен новый формат, можно отправить изменения на сервер.
Предварительно дав команду SVN Update, чтобы убедиться, что не возникло конфликтов в изменённых файлах и после их устранения, если таковые будут конечно, можно делать SVN Commit, [b]не забыв вписать комментарий к проделанной работе[/b], что изменено, что добавлено и т.д.
Вообще это верхушка работы с SVN, стартовая точка, более подробно [url=http://svnbook.red-bean.com/]здесь[/url].
[b]Добавляем свой формат в библиотеку.[/b]