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]