Честно говоря, ни фига не понялGluk wrote:тогда предлагаю так изменить формат битфилда параметров: 0 - нет параметра этого. ну, на нет и суда нет. 1 - есть параметр, и следующие 2 бита означают длину параметра.
При этом если на 7м бите указывается единица параметра, то длина указана в первых двух битах следующего байта, 8й при этом выполняет роль 8го бита следующего байта битфилда, освобождая тот 8й бит от его специального значения.
Если на 6м бите указывается единица параметра, то следующие 2 бита показывают, сколько впереди еще битфилдов кроме одного (т.е. 00 если только один, 11 если 4), и тогда во всех остальных байтах битфилда, кроме 4го дополнительного (ну, если было 11, в послденем из них) 8й бит ничего не значит специального, и они обрабатываются как обычно.
Во всех остальных случаях 8й бит установлен в 1 если есть продолжение битмапа в следующем байте, в 0 - если битмап окончен, а во всех оставшихся параметрах, если таковые возможны, нули.
По-моему, проще чем "у них" не придумаешь: если параметры занимают от 0 до 62 байт - на размер отводится 6 бит, а если от 63 до 4Гб - тогда 32 бита. Даже если попался незнакомый тэг, парсер всегда точно определит позицию следующего.
"Первый графический объект" в этом случае должен явно определять окно, иметь свой тэг, поле размера и 4 координаты. В SWF требуется только одна структура RECT-в предлагаемом формате размер _и_форма_ рисунка задается первым графическим объектом, который описан в файле, частота обновления не задается, так как не требуется для статики.
"2) Код разбит на тэг-блоки. Тэг создает объект строго определенного класса, используя для этого параметры только своего блока, с адресацией данных относительно начала блока."
-не вижу что это дает
1) Отсутствие перекрестных связей на низшем уровне (на уровне тэгов такие связи есть и оформлены как отдельные тэги)
2) Возможность независимого парсинга каждого блока с линковкой в один проход
-мой вариант без учета заголовка чуть ли не в два раза компактней будет, впрочем, дождемся результатов, обещанных Asper'ом
Допустим, надо определить окружность (простейшая фигура!) в поле 400х400 единиц. При 2-байтном формате для ее описания требуется 6 байт; при битовом уплотнении - 4. Прямоугольник требует 2 пар координат: 8 байт или 6 байт при уплотнении. Треугольник: 3 пары координат (12 байт против 8 ) и т.д.-я в предыдущих постах двух предложил указывать размер данных в битовом поле, от 1 до 4 байт, или, в случае огромных полей для рисования, строкой координаты указать можно. А так до этого еще не дочитал)