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

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
(Новая страница: «{{DISPLAYTITLE:AssociativeDataStorageOutputRef::find_node}} {{function_begin|unique_interface_ptr<IDataStorage> find_node(const void* pKey, std::uint32_t cbKey, s…»)
 
 
Строка 1: Строка 1:
{{DISPLAYTITLE:AssociativeDataStorageOutputRef::find_node}}
{{function_begin|AssociativeDataStorageOutputOwn() noexcept; //1
{{function_begin|unique_interface_ptr<IDataStorage> find_node(const void* pKey, std::uint32_t cbKey, std::nothrow_t) const; //1
explicit AssociativeDataStorageOutputOwn(IAssociativeDataStorageOutput* pStorage) noexcept; //2
DataStorageOwn find_node(const void* pKey, std::uint32_t cbKey) const; //2
AssociativeDataStorageOutputOwn(AssociativeDataStorageOutputOwn&& right) noexcept; //3
template <class T>
template <class AnotherAdapterRef>
unique_interface_ptr<IDataStorage>  find_node(const T* pKey, std::uint32_t cbKey, std::nothrow_t) const; //3
explicit AssociativeDataStorageOutputOwn(const AnotherAdapterRef& refRight) noexcept; //4
template <class T>
template <class AnotherAdapterOwn>
DataStorageOwn find_node(const T* pKey, std::uint32_t cbKey) const; //4
AssociativeDataStorageOutputOwn(const AnotherAdapterOwn& ownRight) noexcept; //5
template <class value_t, class alloc_t>
template <class AnotherAdapterOwn>
unique_interface_ptr<IDataStorage> find_node(const std::vector<value_t, alloc_t>& refKey, std::nothrow_t) const; //5
AssociativeDataStorageOutputOwn(AnotherAdapterOwn&& ownRight) noexcept; //6
template <class value_t, class alloc_t>
|{{AssociativeDataStorageOutputOwn::AssociativeDataStorageOutputOwn brief}}
DataStorageOwn find_node(const std::vector<value_t, alloc_t>& refKey) const; //6
# Конструктор по умолчанию, инициализирующий создаваемый экземпляр адаптера нулевым адресом.
template <class traits_t, class alloc_t>
# Явный конструктор, инициализирующий создаваемый экземпляр адаптера адресом реализации накопителя данных.
unique_interface_ptr<IDataStorage> find_node(const std::basic_string<char, traits_t, alloc_t>& refKey, std::nothrow_t) const; //7
# Конструктор, выполняющий инициализацию адаптера с перемещением адреса реализации, с которой ассоциирован параметр. Адаптер {{param|right}} в результате операции теряет владение реализацией накопителя данных, как если бы был выполнен вызов <source lang="cpp" inline>right.release_ownership()</source> с присваиванием возвращенного адреса создаваемому адаптеру.
template <class traits_t, class alloc_t>
# Явный конструктор, создающий адаптер с адресом реализации интерфейса, полученным из [[ссылочный адаптер|ссылочного адаптера]] {{param|refRight}} путем вызова <source lang="cpp" inline>refRight.get_interface()->Clone()</source> с неявным приведением результата к типу <source lang="cpp" inline>IAssociativeDataStorageOutput*</source>. Данный конструктор участвует в разрешении перегрузки, только если подтип <source lang="cpp" inline>AnotherAdapterRef::interface_type</source> существует и поддерживает метод <source lang="cpp" inline>AnotherAdapterRef::interface_type::Clone()</source>, указатель <source lang="cpp" inline>AnotherAdapterRef::interface_type*</source> приводим неявно к типу <source lang="cpp" inline>IAssociativeDataStorageOutput*</source>, а сам тип {{param|AnotherAdapterRef}} является [[ссылочный адаптер|ссылочным адаптером]].
DataStorageOwn find_node(const std::basic_string<char, traits_t, alloc_t>& refKey) const; //8
# Конструктор, создающий экземпляр адаптера на основе заданного параметрически владеющего адаптера путем клонирования интерфейса (то есть вызова метода <source lang="cpp" inline>ownRight.get_interface()->Clone()</source>). Данный конструктор участвует в разрешении перегрузки, только если подтип <source lang="cpp" inline>AnotherAdapterOwn::interface_type</source> существует и поддерживает метод <source lang="cpp" inline>AnotherAdapterOwn::interface_type::Clone()</source>, указатель <source lang="cpp" inline>AnotherAdapterOwn::interface_type*</source> приводим неявно к типу <source lang="cpp" inline>IAssociativeDataStorageOutput*</source>, а сам тип {{param|AnotherAdapterOwn}} является [[владеющий адаптер|адаптером с владением]].
unique_interface_ptr<IDataStorage> find_node(const char* pszKey, std::nothrow_t) const; //9
# Конструктор, создающий экземпляр адаптера путем переноса адреса реализации интерфейса <source lang="cpp" inline>AnotherAdapterOwn::interface_type</source> с приведением его к типу <source lang="cpp" inline>IAssociativeDataStorageOutput*</source>. В результате вызова адаптер {{param|ownRight}} теряет владение своим экземпляром реализации интерфейса <source lang="cpp" inline>AnotherAdapterOwn::interface_type</source> и инициализируется нулевым адресом, как если бы был выполнен вызов <source lang="cpp" inline>ownRight.release_ownership()</source>.}}
DataStorageOwn find_node(const char* pszKey) const; //10
|{{AssociativeDataStorageOutputRef::find_node brief}}
# Ключ задается обобщенным C-указателем и байтовой длиной. Если узел не найден, возвращается пустой указатель.
# Аналогично, но если узел не найден, генерируется исключение [https://www.chusov.org/doxygen/struct_chusov_1_1_exceptions_1_1_not_found_exception.html Chusov::Exceptions::NotFoundException].
# Поиск осуществляется по ключу, который задан указателем на байтовые данные. Данная перегрузка участвует в процедуре разрешения перегрузки только, если {{param|T}} является целочисленным байтовым типом. Если узел не найден, возвращается пустой указатель.
# Аналогично, но с генерацией исключения [https://www.chusov.org/doxygen/struct_chusov_1_1_exceptions_1_1_not_found_exception.html Chusov::Exceptions::NotFoundException], если узел с заданным ключом не существует.
# Ключ поиска задается [https://en.cppreference.com/w/cpp/container/vector вектором] байт, задающих ключевые данные. Если ассоциированный с ключом узел не найден, возвращается пустой указатель.
# Аналогично, но с генерацией исключения [https://www.chusov.org/doxygen/struct_chusov_1_1_exceptions_1_1_not_found_exception.html Chusov::Exceptions::NotFoundException], если узел с заданным ключом не существует.
# Ключ поиска задается [https://en.cppreference.com/w/cpp/string/basic_string C++-строкой]. Если ассоциированный с ключом узел не найден, возвращается пустой указатель.
# Аналогично, но если узел не найден, генерируется исключение [https://www.chusov.org/doxygen/struct_chusov_1_1_exceptions_1_1_not_found_exception.html Chusov::Exceptions::NotFoundException].
# Ключ поиска задается C-строкой. Если ассоциированный с ключом узел не найден, возвращается пустой указатель.
# Аналогично, но с генерацией исключения [https://www.chusov.org/doxygen/struct_chusov_1_1_exceptions_1_1_not_found_exception.html Chusov::Exceptions::NotFoundException], если ключ не найден.}}
{{function template paramlist begin}}
{{function template paramlist begin}}
{{function template paramlist add|T, value_t|Типы элемента ключа {{param|pKey}} в перегрузках 3-6. Эти перегрузки участвуют в процедуре разрешения перегрузки, только если типы элементов ключа являются целочисленными и байтовыми.}}
{{function template paramlist add|AnotherAdapterRef|Тип ссылочного адаптера, участвующего в качестве параметра {{param|refRight}} в конструкторе 4. Значение <source lang="cpp" inline>std::is_convertible_v<typename AnotherAdapterRef::interface_type*, IAssociativeDataStorageOutput*></source> должно быть {{cpp_true}}, адаптер - [[ссылочный адаптер|ссылочным]], а интерфейс <source lang="cpp" inline>AnotherAdapterRef::interface_type</source> должен поддерживать вызов <source lang="cpp" inline>pI->Clone(&pCopy)</source>, где <tt>pI</tt> - указатель оригинальную реализацию интерфейса <source lang="cpp" inline>AnotherAdapterRef::interface_type</source>, <tt>pCopy</tt> - указатель, на выходе функции <tt>Clone</tt> принимающий адрес копии оригинальной реализации.}}
{{function template paramlist add|alloc_t|Тип менеджера памяти {{cpp_concept|Allocator}}, используемого для управления временем жизни ключа {{param|refKey}} ключа в перегрузках 5-8. Тип используется только для дедукции типа параметра {{param|refKey}} и игнорируется при делегировании вызова методу [[IAssociativeDataStorageOutput::FindNode]].}}
{{function template paramlist add|AnotherAdapterOwn|Тип адаптера с владением, участвующего в качестве параметра {{param|ownRight}} в конструкторах 5 и 6. Значение <source lang="cpp" inline>std::is_convertible_v<typename AnotherAdapterOwn::interface_type*, IAssociativeDataStorageOutput*></source> должно быть {{cpp_true}}, адаптер - [[владеющий адаптер|владеющим]]. Для копирования перегрузкой 5 интерфейс <source lang="cpp" inline>AnotherAdapterOwn::interface_type</source> также должен поддерживать вызов <source lang="cpp" inline>pI->Clone(&pCopy)</source>, где <tt>pI</tt> - указатель оригинальную реализацию интерфейса <source lang="cpp" inline>AnotherAdapterRef::interface_type</source>, <tt>pCopy</tt> - указатель, на выходе функции <tt>Clone</tt> принимающий адрес копии оригинальной реализации.}}
{{function template paramlist add|traits_t|Тип политики обработки {{cpp_concept|CharTraits}} символов ключа в перегрузках 7 и 8. Тип используется только для дедукции типа параметра {{param|refKey}} и игнорируется при делегировании вызова методу [[IAssociativeDataStorageOutput::FindNode]].}}
{{function template paramlist end}}
{{function template paramlist end}}
{{function paramlist begin}}
{{function_paramlist begin}}
{{function paramlist add|pKey|Указатель C, адресующий байты ключа в перегрузках 1-4 метода [[AssociativeDataStorageOutputRef::find_node|find_node]].|paramdir=[in]}}
{{function_paramlist add|pStorage|Указатель на адаптируемую реализацию накопителя данных [[IAssociativeDataStorageOutput]].|paramdir=[in]}}
{{function paramlist add|cbKey|Байтовый размер ключа в перегрузках 1-4.}}
{{function_paramlist add|right|Адаптер, передающий владение своим интерфейсным указателем, если он есть, создаваемому экземпляру [[AssociativeDataStorageOutputOwn]], как если бы был выполнен вызов <source lang="cpp" inline>right.release_ownership()</source>.}}
{{function paramlist add|refKey|Ссылка на вектор [https://en.cppreference.com/w/cpp/container/vector std::vector] байт (перегрузки 5 и 6) или на C++ строку [https://en.cppreference.com/w/cpp/string/basic_string std::basic_string] (перегрузки 7 и 8) символов с ключом.}}
{{function_paramlist add|refRight|[[Ссылочный адаптер]], реализация интерфейса которого клонируется с целью создания копии, управляемой создаваемым адаптером, как если бы было выполнено создание адаптера путем вызова перегрузки 2 с аргументом <tt>pCopy</tt>, получаемым в результате вызова <source lang="cpp" inline>refRight.get_interface()->Clone(&pCopy)</source>.}}
{{function paramlist add|pszKey|C-строка, завершающаяся терминальным нулем, задающая ключ при использовании для адресации данных перегрузкок 9 или 10.|paramdir=[in]}}
{{function_paramlist add|ownRight|[[Владеющий адаптер]], реализация интерфейса которого клонируется или переносится на создаваемый адаптер. Копирование выполняется перегрузкой 5, как если бы было выполнено создание адаптера путем вызова перегрузки 2 с аргументом <tt>pCopy</tt>, получаемым в результате вызова <source lang="cpp" inline>ownRight.get_interface()->Clone(&pCopy)</source>. Перемещение выполняется перегрузкой 6, как если бы было выполнено создание адаптера путем вызова перегрузки 2 с аргументом <source lang="cpp" inline>ownRight.release_ownership()</source>.}}
{{function paramlist end}}
{{function_paramlist end}}
{{function return_value|Уникальный указатель <source lang="cpp" inline>unique_interface_ptr<IDataStorage></source> или объект [[DataStorageOwn]], которые адресует накопитель данных, связанный с узлом, который найден в результате поиска по ключу. Если ключ не найден, нечетные перегрузки возвращают объект [[unique_interface_ptr]], сконструированный по умолчанию.}}
{{function_end}}
{{function_end}}

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

AssociativeDataStorageOutputOwn() noexcept; //1
explicit AssociativeDataStorageOutputOwn(IAssociativeDataStorageOutput* pStorage) noexcept; //2
AssociativeDataStorageOutputOwn(AssociativeDataStorageOutputOwn&& right) noexcept; //3
template <class AnotherAdapterRef>
explicit AssociativeDataStorageOutputOwn(const AnotherAdapterRef& refRight) noexcept; //4
template <class AnotherAdapterOwn>
AssociativeDataStorageOutputOwn(const AnotherAdapterOwn& ownRight) noexcept; //5
template <class AnotherAdapterOwn>
AssociativeDataStorageOutputOwn(AnotherAdapterOwn&& ownRight) noexcept; //6

Конструкторы адаптера с владением.

  1. Конструктор по умолчанию, инициализирующий создаваемый экземпляр адаптера нулевым адресом.
  2. Явный конструктор, инициализирующий создаваемый экземпляр адаптера адресом реализации накопителя данных.
  3. Конструктор, выполняющий инициализацию адаптера с перемещением адреса реализации, с которой ассоциирован параметр. Адаптер right в результате операции теряет владение реализацией накопителя данных, как если бы был выполнен вызов right.release_ownership() с присваиванием возвращенного адреса создаваемому адаптеру.
  4. Явный конструктор, создающий адаптер с адресом реализации интерфейса, полученным из ссылочного адаптера refRight путем вызова refRight.get_interface()->Clone() с неявным приведением результата к типу IAssociativeDataStorageOutput*. Данный конструктор участвует в разрешении перегрузки, только если подтип AnotherAdapterRef::interface_type существует и поддерживает метод AnotherAdapterRef::interface_type::Clone(), указатель AnotherAdapterRef::interface_type* приводим неявно к типу IAssociativeDataStorageOutput*, а сам тип AnotherAdapterRef является ссылочным адаптером.
  5. Конструктор, создающий экземпляр адаптера на основе заданного параметрически владеющего адаптера путем клонирования интерфейса (то есть вызова метода ownRight.get_interface()->Clone()). Данный конструктор участвует в разрешении перегрузки, только если подтип AnotherAdapterOwn::interface_type существует и поддерживает метод AnotherAdapterOwn::interface_type::Clone(), указатель AnotherAdapterOwn::interface_type* приводим неявно к типу IAssociativeDataStorageOutput*, а сам тип AnotherAdapterOwn является адаптером с владением.
  6. Конструктор, создающий экземпляр адаптера путем переноса адреса реализации интерфейса AnotherAdapterOwn::interface_type с приведением его к типу IAssociativeDataStorageOutput*. В результате вызова адаптер ownRight теряет владение своим экземпляром реализации интерфейса AnotherAdapterOwn::interface_type и инициализируется нулевым адресом, как если бы был выполнен вызов ownRight.release_ownership().
Параметры шаблона
AnotherAdapterRefТип ссылочного адаптера, участвующего в качестве параметра refRight в конструкторе 4. Значение std::is_convertible_v<typename AnotherAdapterRef::interface_type*, IAssociativeDataStorageOutput*> должно быть true, адаптер - ссылочным, а интерфейс AnotherAdapterRef::interface_type должен поддерживать вызов pI->Clone(&pCopy), где pI - указатель оригинальную реализацию интерфейса AnotherAdapterRef::interface_type, pCopy - указатель, на выходе функции Clone принимающий адрес копии оригинальной реализации.
AnotherAdapterOwnТип адаптера с владением, участвующего в качестве параметра ownRight в конструкторах 5 и 6. Значение std::is_convertible_v<typename AnotherAdapterOwn::interface_type*, IAssociativeDataStorageOutput*> должно быть true, адаптер - владеющим. Для копирования перегрузкой 5 интерфейс AnotherAdapterOwn::interface_type также должен поддерживать вызов pI->Clone(&pCopy), где pI - указатель оригинальную реализацию интерфейса AnotherAdapterRef::interface_type, pCopy - указатель, на выходе функции Clone принимающий адрес копии оригинальной реализации.
Параметры
[in]pStorageУказатель на адаптируемую реализацию накопителя данных IAssociativeDataStorageOutput.
rightАдаптер, передающий владение своим интерфейсным указателем, если он есть, создаваемому экземпляру AssociativeDataStorageOutputOwn, как если бы был выполнен вызов right.release_ownership().
refRightСсылочный адаптер, реализация интерфейса которого клонируется с целью создания копии, управляемой создаваемым адаптером, как если бы было выполнено создание адаптера путем вызова перегрузки 2 с аргументом pCopy, получаемым в результате вызова refRight.get_interface()->Clone(&pCopy).
ownRightВладеющий адаптер, реализация интерфейса которого клонируется или переносится на создаваемый адаптер. Копирование выполняется перегрузкой 5, как если бы было выполнено создание адаптера путем вызова перегрузки 2 с аргументом pCopy, получаемым в результате вызова ownRight.get_interface()->Clone(&pCopy). Перемещение выполняется перегрузкой 6, как если бы было выполнено создание адаптера путем вызова перегрузки 2 с аргументом ownRight.release_ownership().