IPB
ЛогинПароль:

> Двоичные потоки, На будущее
сообщение
Сообщение #1


Большевик–концептуал
***

Группа: Пользователи
Сообщений: 194
Пол: Мужской
Реальное имя: Иван Левашев
Jabber: bu_gen@octagram.name
Skype: i.levashew
QQ: 3152538431
WeChat
Ада: Сторонник
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик
Turbo Pascal: Установлен

Репутация: -  1  +


GNAT -gnat95

Используя механизм сильных ссылок, реализовать потоки



За основу берётся пакет Ada.Streams. Более конкретно, оттуда импортируются типы. И по аналогии с теми методами делаются методы здесь.

Аналогично Sample_Reference, делаются два типа. Один — для наследования, Root_Stream_Referenced. Другой — обёртка Root_Stream для применения в будущих пакетах.

Для интеграции с Адой в одну сторону делается Ada_Stream, обёртка-наследник стандартного Ada.Streams.Root_Stream_Type. Обёртка не реализует по второму разу Root_Stream, а содержит её в публично доступном поле и просто делегирует вызовы методов.

В обратную сторону в общем случае не получится, и делается только один частный случай, File_Stream_Referenced, содержащий Ada.Streams.Stream_IO.File_Type.

Как и всегда при использовании механизма сильных ссылок, делаются попарно два типа, для динамической памяти File_Stream_Referenced и обёртка File_Stream. API изменяется.

    procedure Create (File : in out File_Type;
Mode : in File_Mode := Out_File;
Name : in String := "";
Form : in String := "");


Create превращается в функцию, возвращающую сильную ссылку. Form убирается. Тип Name заменяется на String_32. Можно объявить subtype String_32 is Wide_String, чтоб собиралось. Wide_String приводится к String конструкциями вида Character'Val (Unsigned_8'Mod (Character_32'Pos (Element))). Работать, конечно, с Юникодом оно нормально так не будет, но API правильное.

Аналогично с Open.

Delete не нужен. Close в явном виде не нужен, а неявно он вызывается из Finalize после проверки Is_Open. В Finalize нужно также вызвать родительский Finalize.

Унаследованные Read и Write переопределяются.

Функция Stream выбрасывается. Read и Write реализуются без неё, а если нужен адский поток, то обёртка для этого уже сделана выше.

function Name приводится к String_32 дубовым способом, как и в Create.

function Form выбрасывается.



Задача мне: надо дать заглушки для поддержки Ada 2005+ фич в AdaMagic. Я писал такое, но не под рукой сейчас


--------------------
If you want to get to the top, you have to start at the bottom
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской
Реальное имя: Сергей Дюков
Skype: sergey.dukov54
Ада: Разработчик
Компонентный Паскаль: Сторонник

Репутация: -  0  +



Задачу в первом приближении понял. Займусь несколько позже.
Сейчас занимаюсь векторами. К стати, в АДА2012 вектора могут работать с потоками. Реализовать эту функциональность для наших векторов?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
OCTAGRAM   Двоичные потоки   11.09.2019 17:31
Sergey Dukov   Задачу в первом приближении понял. Займусь несколь…   11.09.2019 17:53
Sergey Dukov   Раньше мне вроде бы было всё понятно. Сейчас у мен…   21.10.2019 13:03
OCTAGRAM   Раньше мне вроде бы было всё понятно. Сейчас у мен…   25.10.2019 0:12
Sergey Dukov   Насколько я понял, задача такова: Упрятать значени…   25.10.2019 0:57
OCTAGRAM   Насколько я понял, задача такова: Упрятать значен…   25.10.2019 4:03
Sergey Dukov   Я тут подумал, что на будущее стоит ввести в пакет…   25.10.2019 5:48
Sergey Dukov   Я проанализировал открытие файла потока в реализац…   25.10.2019 10:42
Sergey Dukov   Я реализовал задание в пакете "File_Stream_IO…   27.10.2019 1:30
OCTAGRAM   UTF-16 в рантаймах, сейчас мне кажется, не надо Л…   31.10.2019 9:15
Sergey Dukov   Я уже говорил, что с UTF-16 не стоит заморачиватьс…   31.10.2019 9:34
OCTAGRAM   В других своих проектах, которые заточены под GNAT…   31.10.2019 9:44
Sergey Dukov   Я подключил API из нашего пакета Unbounded_Array и…   31.10.2019 9:53


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 20.04.2024 3:41
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name