bdr> Меня интересуют твои наработки по динамическим очередям. Как я понимаю это реализовано у тебя в виде библиотеки(lib или dll). Возможно ли получить от тебя dll, если да, то не кинеш ли на мыло baa@dionis.ru. Заранее благодарен!
Я планирую на праздники (первые) отделить от данной библиотеки класс DynaFile по причине его «сырости» и тогда брошу все необходимое, например, на Клариошу. Иначе мой инет просто физически не потянет рассылать отдельно всем заинтересованным. Как и DynaView, это будут LIB и DLL модули для 32бит.
bdr> И еще 2 вопроса: DLL компилена в C5 или С5.5 (я как понял ты пока на 5 работаешь)?
Библиотека будет в двух вариантах — для C5 и C55. Хотя я и не работаю на C55, тем не менее я предусматриваю в библиотеках изначально раздельную компиляцию тех кусков кода, которые по разному работают в C5/C55.
Другое дело, что под C55 я не так всесторонне тестирую эти библиотеки. Да и вообще, с полноценным тестированием туговато! Дело в том, что в моих Dyna-классах есть очень много моментов описания групп/очередей, которые невозможно реализовать в статике. Например, компилятор не пропустит напрямую массивы указателей. Или невозможно создать реферал на именованную группу внутри какой-либо структуры (GROUP/QUEUE/CLASS).
Поэтому появляется масса вариантов описаний структур, которые просто невозможно все охватить и которые будут проявляться при реальной работе с этими классами.
Поэтому, как пишут в лицензиях, «если у Вас что-то не будет работать, то мы за себя не отвечаем» 🙂
bdr> Возможно ли в твоей реализации создавать очередь очередей с разной структурой или хотя бы с одинаковой?
Это как? Типа так, что-ли?:
ParentQue QUEUE ChildQue &QUEUE END
Если так, то такая конструкция возможна и в нормальном статическом описании. Другое дело, что для комфортной работы с «дочерней» очередью надо делать ссылку на именованную очередь известной структуры. В моей библиотеке это можно реализовать так:
ParentQue TDynaQueueClass ChildQue TDynaQueueClass ParentQue._QUEUE('Parent','PR') ParentQue._QUEUEREF('Child') ParentQue._END()
Для организации очереди очередей с одинаковой структурой дочерней очереди проще описать в секции данных статическую группу известной структуры и создавать экземпляры ChildQue так:
ChildQue._QUEUE('Child','Ch',TChildGroup) ChildQue._END
Для организации очереди с дочерними очередями разной структуры прийдется описывать создание каждой новой «дочки» типа:
ChildQue._QUEUE('Child','Ch') CASE Variant of 'Первый вариант "дочки"' ChildQue._STRING('Name',40) ! или ('Name','@S40') of 'Второй вариант "дочки"' ChildQue._DECIMAL('Price',11,2) ChildQue._LONG('Index') of 'Третий вариант "дочки"' ChildQue._DECIMAL('Price',11,2) ChildQue._DECIMAL('ExtPrice',11,2) ! DECIMAL(11,2),DIM(2,5) ChildQue._DIM(2,5) ! ChildQue._LONG('Index') END ChildQue._END
Или можно загружать описания структуры «детских» очередей из внешнего текстового файла:
ChildQue.LoadDeclare(,'QueDecl.txt','имя_очереди')
А дальше — заполнение родительской очереди:
ParentQue.PutField(ChildQue.Q,'PR:Child') Add(ParentQue.Q)
Конечно, было бы здорово записывать в родительскую очередь не указатель на созданную дочернюю очередь, а указатель на сам класс ChildQue. Тогда было бы очень легко работать с полями дочерней очереди по привычным меткам. Но, к сожалению, пока я не знаю, как можно обмануть компилятор и передавать/возвращать указатели на НЕИМЕНОВАННЫЕ классы!
Кстати! Может кто знает?
Но есть более простой выход, если структура родительской очереди постоянна:
ParentQue QUEUE(PR) ChildQue &TDynaQueueClass END
Теперь, перед созданием дочерней очереди нужной структуры, пишем:
PR:ChildQue &= New(TDynaQueueClass)
а после создания: Add(ParentQue)