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

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
Строка 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-битовый беззнаковый целый код ошибки, который в случае успешного выполнения равен 0.}}
{{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]].


{{BinaryDataStorageType}}
Для проверки доступности того или иного интерфейса предпочтительно использовать метод [[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_id32-х битовое целое, принимающее одно из следующих значений идентификаторов интерфейсов.
Символическое имя Целочисленное значение Интерфейс, соответствующий идентификатору.
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...