Tree [r26] /
History



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] Базовая имплементация методов чтения/записи в с...

Read Me

========================================================================
    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]