The ara::com::SamplePtr behaves as a std::unique_ptr as long as the event/ field is subscribed to, or the Proxy it belongs to is not destroyed. The precondition defined in [SWS_CM_00085] and [SWS_CM_00087] must be fulfilled. Otherwise it is considered a violation.
Note: The SamplePtr is always passed with a const SampleType to the callable in GetNewSamples() (see [SWS_CM_00701]). Therefore the sample datatype (typename T) and the SamplePtr operators using the sample datatype (typename T) are implicitly declared as const. This means that the sample data will always be read-only.
Предоставляет монопольный доступ для чтения к принятым событиям и управляет временем жизни памяти промежуточного ПО.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: f5d97c2beaf2ПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Предоставляет монопольный доступ для чтения к принятым событиям и управляет временем жизни памяти промежуточного ПО.
Шаблонный класс инкапсулирует монопольное владение принятыми выборками (samples) событий по образцу std::unique_ptr и предоставляет приложению прямой неизменяемый доступ для чтения к буферам промежуточного ПО (EXP ARAComAPI §5.3.5.4). Экземпляры передаются при запросе новых выборок, допускают передачу исключительно по семантике перемещения (move-semantics) и удерживают занятое пространство памяти ([SWS_CM_11537]). Только уничтожение указателя или его явное обнуление освобождает слот буфера. Действительность предполагает, что событие остается подписанным, а соответствующий прокси существует.
Контекст
Шаблонный класс ara::com::SamplePtr представляет собой центральную модель доступа и владения для принятых данных событий (Event Samples) в Adaptive Platform (EXP ARAComAPI §5.3.5.4). Семантически данный класс воспроизводит эксклюзивный «умный» указатель по образцу std::unique_ptr (EXP ARAComAPI §5.3.5.4). Основными партнерами по взаимодействию являются уровень приложения, принимающий объект события или прокси, а также нижележащее коммуникационное промежуточное ПО ara::com, управляющее буферными ресурсами (EXP ARAComAPI, с. 44, EXP ARAComAPI, с. 50).
Концепция целенаправленно использует подход с нулевым копированием (zero-copy) на основе ссылок: вместо передачи данных событий приложению путем копирования по значению ara::com передает указатели или ссылки на центральные коммуникационные буферы (EXP ARAComAPI, с. 50). В типичных сценариях распределения 1:N локальные кэши событий благодаря этому могут обслуживаться исключительно путем обновления ссылок, что минимизирует затраты памяти и задержку (EXP ARAComAPI, с. 50). Доступ к полезным данным концептуально рассчитан строго на чтение: при предоставлении SamplePtr всегда инстанцируется с константным типом полезных данных (ara::com::SamplePtr<SampleType const>), вследствие чего все операторы доступа являются неявно константными (EXP ARAComAPI, с. 39, EXP ARAComAPI, с. 44, [SWS_CM_00701]).
Жизненный цикл
Экземпляры SamplePtr могут создаваться как пустые указатели через конструктор по умолчанию или с nullptr ([SWS_CM_11534], [SWS_CM_11535]). Напротив, валидные экземпляры, содержащие полезные данные, формируются внутри промежуточного ПО при десериализации событий в слоты буфера и передаются в рамках GetNewSamples() вызываемому объекту на стороне приложения (EXP ARAComAPI, с. 44).
С передачей происходит полный переход права владения (ownership transfer) к приложению (EXP ARAComAPI §5.3.5.4). Чтобы гарантировать эксклюзивность владения, конструктор копирования и копирующий оператор присваивания удалены ([SWS_CM_11536], [SWS_CM_11538]). Передача управляемого слота памяти возможна исключительно через конструктор перемещения или перемещающее присваивание ([SWS_CM_11537], [SWS_CM_11540]), тогда как Swap() позволяет произвести обмен содержимым двух указателей ([SWS_CM_11544]).
Пока экземпляр SamplePtr существует и удерживает выборку, промежуточное ПО не может востребовать обратно или перезаписать занятую область памяти (EXP ARAComAPI §5.3.5.4). Освобождение слота промежуточного ПО происходит только тогда, когда время жизни SamplePtr заканчивается вызовом деструктора ([SWS_CM_11547]), или указатель явно очищается с помощью Reset(nullptr) либо присваиванием nullptr ([SWS_CM_11539], [SWS_CM_11545]).
Типичный процесс доступа к данным подразделяется на следующие шаги:
Инициация запроса выборки: Приложение вызывает GetNewSamples() на прокси события и передает подходящую функцию обратного вызова с сигнатурой void(ara::com::SamplePtr<SampleType const>), а также верхнюю границу для количества запрашиваемых выборок (EXP ARAComAPI, с. 44).
Передача в функцию обратного вызова: Если имеются новые данные и квота буфера не исчерпана, промежуточное ПО десериализует выборку и передает новый экземпляр SamplePtr в функцию обратного вызова (EXP ARAComAPI, с. 44).
Проверка статуса End-to-End: Через GetProfileCheckStatus() приложение может запросить результат проверки защиты E2E для текущего пакета данных ([SWS_CM_90420]).
Чтение данных: Логика приложения обращается к управляемому объекту для чтения через operator* ([SWS_CM_11541]), operator-> ([SWS_CM_11542]) или метод Get() ([SWS_CM_11546]).
Дальнейшая обработка или освобождение: Если выборка должна сохраняться дольше времени выполнения функции обратного вызова, приложение перемещает указатель с помощью перемещающего конструктора в собственные структуры памяти ([SWS_CM_11537]). Если указатель остается в области видимости функции обратного вызова, он автоматически уничтожается при выходе из нее ([SWS_CM_11547]), что немедленно освобождает слот в промежуточном ПО (EXP ARAComAPI §5.3.5.4).
При использовании SamplePtr необходимо учитывать специфические граничные условия и источники ошибок:
Исчерпание квоты буфера: при каждом вызове GetNewSamples() промежуточное ПО проверяет, не превышает ли количество сэмплов, удерживаемых приложением в данный момент, квоту, гарантированную ранее при вызове Subscribe(). Если квота превышена, GetNewSamples() отказывает в выдаче дальнейших сэмплов и вместо этого возвращает ara::core::ErrorCode (EXP ARAComAPI, с. 44, EXP ARAComAPI, с. 45).
Недействительность из-за потери подписки или уничтожения прокси:SamplePtr ведет себя детерминированно как std::unique_ptr только до тех пор, пока сохраняется подписка на базовое событие и существует вышестоящий экземпляр прокси. Удержание указателей после прекращения подписки или уничтожения прокси считается нарушением предусловий.
Действительность указателя и нулевое состояние: с помощью operator bool() можно оценить состояние занятости указателя ([SWS_CM_11543]). Разыменование пустого указателя через operator* или operator-> приводит к неопределенному поведению. Все методы доступа и модификации объявлены как noexcept ([SWS_CM_11541], [SWS_CM_11542], [SWS_CM_11546]).
Ошибки E2E-валидации: успешно полученный валидный указатель не гарантирует безошибочность переданных данных; по возвращаемому значению GetProfileCheckStatus() приложение должно проверить, сигнализирует ли сквозная E2E-защита об искажении данных или задержках передачи ([SWS_CM_90420]).
Данное руководство по классу было сгенерировано ИИ-ассистентом курации на основе спецификаций AUTOSAR для Adaptive Platform релиза R25-11.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 1cc8beae7ae3ПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Использование и семантика
Функция Get представляет собой функцию-член без параметров класса ara::com::SamplePtr из заголовочного файла ara/com/service/sample_ptr.h[SWS_CM_11546]. Она синхронно возвращает сырой указатель типа T* на объект, управляемый этим экземпляром [SWS_CM_11546]. В отличие от асинхронных запросов полей сервиса, предоставляющих ara::core::Future[SWS_CM_00112], данный доступ осуществляется непосредственно в вызывающем потоке.
Обработка ошибок и граничные условия
Метод объявлен как noexcept и специфицирован как безопасный относительно исключений (exception safe) [SWS_CM_11546]; состояния ошибок через исключения C++ не возникают. Если экземпляр в текущий момент не управляет объектом, возвращаемый указатель, вероятно, будет равен nullptr. Вопрос Q-d850bd8ee144369a (открытый) Перед дальнейшей обработкой адресуемых данных необходимо убедиться, что E2E-контроль имеет состояние ara::com::e2e::SMState::kValid, а проверка статуса профиля не выявила ошибки [SWS_CM_90422].
Взаимодействие и разграничение
В управлении коммуникацией Get служит для прямого доступа к данным полученных значений (семплов), как они предоставляются в рамках управления семплами AUTOSAR_AP_EXP_ARAComAPI §10 «GetNewSamples». Эту функцию следует четко разграничивать с другими операциями Get:
Геттер поля: опрос полей сервиса на прокси происходит через Get() с возвратом ara::core::Future[SWS_CM_00112], для чего на стороне сервера может быть зарегистрирован обработчик [SWS_CM_00114].
Состояние E2E: состояние контроля геттера поля определяется отдельно через GetE2EStateMachineStateGetter[SWS_CM_00145].
Этот текст создан ИИ и основан на релизе AUTOSAR R25-11.
Руководство разработчика реализации в подготовке (сложность I2)
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 0a03c7966b10ПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Функция-член Reset класса ara::com::SamplePtr служит для сброса указателя на управляемый объект [SWS_CM_11545]. В качестве параметра она принимает значение other типа std::nullptr_t. Вызов заменяет текущий удерживаемый объект нулевым указателем и не возвращает значения (void) [SWS_CM_11545].
В отношении обработки ошибок и безопасности исключений метод объявлен с noexcept и специфицирован как полностью безопасный относительно исключений (exception safe) [SWS_CM_11545]. Исключения C++ не генерируются, специфические коды ошибок не возвращаются.
В общей системе освобождение экземпляров SamplePtr выполняет существенное предварительное условие для предотвращения ошибок памяти:
Аналогичное требование формулирует [SWS_CM_00085] перед отменой подписки на события или поля (Unsubscription).
Интерпретация: явный вызов Reset(nullptr) в сценариях применения, по-видимому, служит прямым средством детерминированного отказа от владения семплом события перед такими переходами жизненного цикла, если указатель не выходит из области видимости автоматически. Вопрос Q-a615fa4078ab03ce (открытый)
Это указание по использованию было создано автоматически на основе спецификации AUTOSAR R25-11.
Руководство разработчика реализации в подготовке (сложность I2)
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 18d4b3f3f0f9ПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Вызов выполняется синхронно и ожидает следующий параметр:
other: ссылка на другой экземпляр ara::com::SamplePtr, управляемый объект которого обменивается с объектом из *this ([SWS_CM_11544]).
Метод не имеет возвращаемого значения (void) ([SWS_CM_11544]).
Обработка ошибок
Сигнатура объявлена с noexcept и классифицирована как безопасная относительно исключений (exception safe) ([SWS_CM_11544]). Вызов не генерирует исключений и не возвращает кодов ошибок.
Параллелизм и ограничения
Поскольку Swap одновременно изменяет состояние двух объектов (*this и other), параллельные вызовы по меньшей мере на одном из задействованных экземпляров без внешней синхронизации, вероятно, не являются потокобезопасными. Вопрос Q-d906e8c05aefbd15 (открытый)
Взаимодействие
Метод является неотъемлемой частью класса ara::com::SamplePtr ([SWS_CM_11544]). Он обеспечивает эффективную передачу владения или переназначение полученных выборок данных (семплов) в процессах коммуникации без необходимости копирования лежащего в основе объекта полезных данных.
Это указание по использованию было создано автоматически на основе документов спецификации.
Руководство разработчика реализации в подготовке (сложность I2)
gemini-3.8-flash-low· 2026-10-13 · Немецкий оригинал