IInMemoryDataStorage: различия между версиями
Ninok2801 (обсуждение | вклад) (Новая страница: «{{IInMemoryDataStorage_brief}} {{IInMemoryDataStorage methods|Собственные методы}}») |
|||
Строка 1: | Строка 1: | ||
{{ | {{interface|IInMemoryDataStorage}} | ||
Данные накопителя с интерфейсом [[IInMemoryDataStorage]] физически располагаются в памяти машины и могут быть адресованы прямо с использованием указателей C и ссылок C++. Такой накопитель предполагает произвольный доступ к элементам данных, размер и семантика которых определяются реализацией. Следовательно, налагается требование к однородности элементов в памяти, которыми, как минимум, могут быть байты. | |||
{{ | Для адресации элементов используются унаследованные методы [[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.

При использовании интерфейса IArbitrarilyAccessedDataStorage ключом будет являться беззнаковый целочисленный восьмибайтовый индекс требуемого блока данных аналогично тому, как это определено для наследуемых методов IContiguousDataStorage::ReadAt и IContiguousDataStorage::WriteTo. Ключ является восьмибайтовым целым в том числе на платформах, на которых размер указателя не равен восьми байтам.
Реализация накопителя, которая поддерживает интерфейс IInMemoryDataStorage, также поддерживает интерфейс IInMemoryDataStorageInput, который доступен через использование метода IDataStorage::RepresentAs, вызываемого над this.
- См. также
IInMemoryDataStorageInput Интерфейс для чтения данных из накопителя, связанного с буфером в памяти. InMemoryDataStorageRef Ссылочный адаптер, определенный над интерфейсом IInMemoryDataStorage. InMemoryDataStorageOwn Адаптер с владением реализацией интерфейса IInMemoryDataStorage.