IInMemoryDataStorage: различия между версиями

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
(Новая страница: «{{IInMemoryDataStorage_brief}} {{IInMemoryDataStorage methods|Собственные методы}}»)
 
 
Строка 1: Строка 1:
{{IInMemoryDataStorage_brief}}
{{interface|IInMemoryDataStorage}}
Данные накопителя с интерфейсом [[IInMemoryDataStorage]] физически располагаются в памяти машины и могут быть адресованы прямо с использованием указателей C и ссылок C++.  Такой накопитель предполагает произвольный доступ к элементам данных, размер и семантика которых определяются реализацией.  Следовательно, налагается требование к однородности элементов в памяти, которыми, как минимум, могут быть байты.


{{IInMemoryDataStorage methods|Собственные методы}}
Для адресации элементов используются унаследованные методы [[IContiguousDataStorage]], а также пара собственных методов - [[IInMemoryDataStorage::GetPtr|GetPtr]], позволяющий получить непосредственный адрес связанного с накопителем буфера в виде указателя C и размер этого буфера в байтах, а также метод [[IInMemoryDataStorage::ReleaseBufferOwnership|ReleaseBufferOwnership]], который позволяет получить тот же буфер данных, а также передать владение этим буфером клиенту.
 
Сложность доступа к элементам буфера постоянна.
 
Гарантируется, что любая реализация интерфейса [[IInMemoryDataStorage]] будет также поддерживать интерфейсы [[IArbitrarilyAccessedDataStorage]] и [[IConsequentDataStorage]], а также родственные им интерфейсы только для чтения или только для записи данных. Для получения указателей на эти интерфейсы необходимо использовать метод [[IDataStorage::RepresentAs]], который наследуется интерфейсом  [[IInMemoryDataStorage]].
 
[[Файл:IInMemoryDataStorage-relations.png|800px|thumb|right|Отношения интерфейса [[IInMemoryDataStorage]]. Сплошными стрелками показано наследование. Пунктиром с подписью "r" показана поддерживаемость реализацией и приводимость с помощью [[IDataStorage::RepresentAs]].]]
 
При использовании интерфейса [[IArbitrarilyAccessedDataStorage]] ключом будет являться беззнаковый целочисленный восьмибайтовый индекс требуемого блока данных аналогично тому, как это определено для наследуемых методов [[IContiguousDataStorage::ReadAt]] и [[IContiguousDataStorage::WriteTo]]. ''Ключ является восьмибайтовым целым в том числе на платформах, на которых размер указателя не равен восьми байтам''.
 
Реализация накопителя, которая поддерживает интерфейс [[IInMemoryDataStorage]], также поддерживает интерфейс [[IInMemoryDataStorageInput]], который доступен через использование метода [[IDataStorage::RepresentAs]], вызываемого над {{cpp_this}}.
{{sa_list_begin}}
{{sa_list_add|IInMemoryDataStorageInput}}
{{sa_list_add|InMemoryDataStorageRef}}
{{sa_list_add|InMemoryDataStorageOwn}}
{{sa_list_end}}

Текущая версия на 23:09, 16 августа 2019

Интерфейс для чтения и записи данных в накопитель, связанный с буфером в памяти.

Методы
МетодОписание
GetPtrВозвращает адрес управляемого накопителем буфера данных в памяти.
ReleaseBufferOwnershipВозвращает управляемый накопителем буфер данных в памяти с передачей владения буфером клиенту.
Наследует открыто
КлассОписание
Интерфейс для чтения и записи в накопитель последовательно расположенных и однородных данных.

Данные накопителя с интерфейсом IInMemoryDataStorage физически располагаются в памяти машины и могут быть адресованы прямо с использованием указателей C и ссылок C++. Такой накопитель предполагает произвольный доступ к элементам данных, размер и семантика которых определяются реализацией. Следовательно, налагается требование к однородности элементов в памяти, которыми, как минимум, могут быть байты.

Для адресации элементов используются унаследованные методы IContiguousDataStorage, а также пара собственных методов - GetPtr, позволяющий получить непосредственный адрес связанного с накопителем буфера в виде указателя C и размер этого буфера в байтах, а также метод ReleaseBufferOwnership, который позволяет получить тот же буфер данных, а также передать владение этим буфером клиенту.

Сложность доступа к элементам буфера постоянна.

Гарантируется, что любая реализация интерфейса IInMemoryDataStorage будет также поддерживать интерфейсы IArbitrarilyAccessedDataStorage и IConsequentDataStorage, а также родственные им интерфейсы только для чтения или только для записи данных. Для получения указателей на эти интерфейсы необходимо использовать метод IDataStorage::RepresentAs, который наследуется интерфейсом IInMemoryDataStorage.

Отношения интерфейса IInMemoryDataStorage. Сплошными стрелками показано наследование. Пунктиром с подписью "r" показана поддерживаемость реализацией и приводимость с помощью IDataStorage::RepresentAs.

При использовании интерфейса IArbitrarilyAccessedDataStorage ключом будет являться беззнаковый целочисленный восьмибайтовый индекс требуемого блока данных аналогично тому, как это определено для наследуемых методов IContiguousDataStorage::ReadAt и IContiguousDataStorage::WriteTo. Ключ является восьмибайтовым целым в том числе на платформах, на которых размер указателя не равен восьми байтам.

Реализация накопителя, которая поддерживает интерфейс IInMemoryDataStorage, также поддерживает интерфейс IInMemoryDataStorageInput, который доступен через использование метода IDataStorage::RepresentAs, вызываемого над this.

См. также
IInMemoryDataStorageInputИнтерфейс для чтения данных из накопителя, связанного с буфером в памяти.
InMemoryDataStorageRefСсылочный адаптер, определенный над интерфейсом IInMemoryDataStorage.
InMemoryDataStorageOwnАдаптер с владением реализацией интерфейса IInMemoryDataStorage.