IBinaryDataBase::RepresentAs: различия между версиями
Перейти к навигации
Перейти к поиску
Ninok2801 (обсуждение | вклад) |
|||
Строка 1: | Строка 1: | ||
{{function_begin | return_code_t RepresentAs(BinaryDataStorageType type_id, void** ppInterface) noexcept; |{{IBinaryDataBase::RepresentAs brief}}}} | {{function_begin | return_code_t RepresentAs(BinaryDataStorageType type_id, void** ppInterface) noexcept; |{{IBinaryDataBase::RepresentAs brief}}}} | ||
{{function_paramlist begin}} | {{function_paramlist begin}} | ||
{{function_paramlist add|type_id|}} | {{function_paramlist add|type_id|32-х битовое целое, принимающее одно из следующих значений идентификаторов интерфейсов. {{BinaryDataStorageType}}}} | ||
{{function_paramlist add|ppInterface|.|paramdir=[out]}} | {{function_paramlist add|ppInterface|Выходной указатель, принимающий интерфейс заданного типа или 0 в случае ошибки.|paramdir=[out]}} | ||
{{function_paramlist end}} | {{function_paramlist end}} | ||
{{function_return_value|32-битовый | {{function_return_value|32-битовый целый код ошибки, который в случае успешного выполнения неотрицателен (старший бит сброшен). В случае, если интерфейс, заданный идентификатором, не поддерживается, возвращается код [https://www.chusov.org/doxygen/group___error_handling.html CHSVERROR_INVALID_PARAMETER].}} | ||
{{function_end}} | {{function_end}} | ||
В случае успешного завершения функции, полученный через параметр <tt>ppInterface</tt> объект необходимо закрывать вызовом его метода [[InterfaceBase::Release|Release]] отдельно и независимо от объекта, над которым применен метод [[IBinaryDataBase::RepresentAs|RepresentAs]]. | |||
{ | Для проверки доступности того или иного интерфейса предпочтительно использовать метод [[IBinaryDataBase::IsInterfaceAvailable]]. | ||
Пример: | |||
<source lang='cpp'> | |||
char l_filename[] = "./somefile"; | |||
IIOBinaryData* pIO; //uninitialized pointer | |||
{ | |||
IBinaryDataBase* pStorage; //uninitialized pointer | |||
int32_t err = CreateFileAsBinaryDataStorage(l_filename, sizeof(l_filename), FileRead | FileWrite, FileCreateAlways, std::addressof(pStorage)) noexcept; | |||
if (err < 0) | |||
return -1; //failure | |||
if (pStorage->IsInterfaceAvailable(IOBinaryDataType) == 1) | |||
return 0; //Interface is not available | |||
err = pStorage->RepresentAs(IOBinaryDataType, std::addressof(pIO)); | |||
if (err < 0) | |||
return -1; //failure of RepresentAs | |||
} | |||
//access file via pIO... | |||
</source> |
Версия 19:58, 15 марта 2017
return_code_t RepresentAs(BinaryDataStorageType type_id, void** ppInterface) noexcept;
Осуществляет преобразование в интерфейс, заданный идентификатором.
- Параметры
type_id 32-х битовое целое, принимающее одно из следующих значений идентификаторов интерфейсов. Символическое имя Целочисленное значение Интерфейс, соответствующий идентификатору. BinaryDatabaseType 0 IBinaryDataBase InputBinaryDataType 1 IInputBinaryData InputBinaryDataContiguousAccessType 2 IInputBinaryDataContiguousAccess InMemoryInputBinaryDataType 3 IInMemoryInputBinaryData OutputBinaryDataType 256 IOutputBinaryData OutputBinaryDataContiguousAccessType 257 IOutputBinaryDataContiguousAccess IOBinaryDataType 512 IIOBinaryData IOBinaryDataContiguousAccessType 513 IIOBinaryDataContiguousAccess InMemoryIOBinaryDataType 514 IInMemoryIOBinaryData [out] ppInterface Выходной указатель, принимающий интерфейс заданного типа или 0 в случае ошибки. - Возвращаемое значение:
- 32-битовый целый код ошибки, который в случае успешного выполнения неотрицателен (старший бит сброшен). В случае, если интерфейс, заданный идентификатором, не поддерживается, возвращается код CHSVERROR_INVALID_PARAMETER.
В случае успешного завершения функции, полученный через параметр ppInterface объект необходимо закрывать вызовом его метода Release отдельно и независимо от объекта, над которым применен метод RepresentAs.
Для проверки доступности того или иного интерфейса предпочтительно использовать метод IBinaryDataBase::IsInterfaceAvailable.
Пример:
char l_filename[] = "./somefile";
IIOBinaryData* pIO; //uninitialized pointer
{
IBinaryDataBase* pStorage; //uninitialized pointer
int32_t err = CreateFileAsBinaryDataStorage(l_filename, sizeof(l_filename), FileRead | FileWrite, FileCreateAlways, std::addressof(pStorage)) noexcept;
if (err < 0)
return -1; //failure
if (pStorage->IsInterfaceAvailable(IOBinaryDataType) == 1)
return 0; //Interface is not available
err = pStorage->RepresentAs(IOBinaryDataType, std::addressof(pIO));
if (err < 0)
return -1; //failure of RepresentAs
}
//access file via pIO...