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.
Permet l'accès en lecture exclusif aux événements reçus et contrôle la durée de vie de la mémoire du middleware.
GÉNÉRÉ PAR IAnon vérifiéModèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : f5d97c2beaf2ProvenanceQuestions ouvertes (1)
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand
Permet l'accès en lecture exclusif aux événements reçus et contrôle la durée de vie de la mémoire du middleware.
La classe template encapsule la possession exclusive d'échantillons d'événements reçus sur le modèle de std::unique_ptr et accorde à l'application un accès direct et immuable en lecture aux tampons du middleware (EXP ARAComAPI §5.3.5.4). Les instances sont transmises lors de l'interrogation de nouveaux échantillons, peuvent uniquement être transférées par sémantique de déplacement et maintiennent l'espace mémoire occupé ([SWS_CM_11537]). Seule la destruction du pointeur ou une mise à zéro explicite libère à nouveau le slot de tampon. La validité suppose que l'événement reste abonné et que le proxy associé existe.
Contexte
La classe template ara::com::SamplePtr représente, dans l'Adaptive Platform, le modèle central d'accès et de possession pour les données d'événements reçues (Event Samples) (EXP ARAComAPI §5.3.5.4). Sur le plan sémantique, la classe reproduit un pointeur intelligent exclusif calqué sur std::unique_ptr (EXP ARAComAPI §5.3.5.4). Les principaux partenaires d'interaction sont la couche applicative, l'objet événement ou proxy récepteur et le middleware de communication sous-jacent ara::com, qui gère les ressources de tampon (EXP ARAComAPI, p. 44, EXP ARAComAPI, p. 50).
Le concept suit expressément une approche zero-copy basée sur des références : au lieu de transmettre les données d'événements à l'application par copie de valeur, ara::com transmet des pointeurs ou des références vers des tampons de communication centraux (EXP ARAComAPI, p. 50). Dans des scénarios typiques de distribution 1:N, les caches d'événements locaux peuvent ainsi être servis uniquement par des mises à jour de références, ce qui minimise l'empreinte mémoire et la latence (EXP ARAComAPI, p. 50). L'accès aux données utiles est conceptuellement conçu comme étant strictement en lecture : lors de la mise à disposition, SamplePtr est toujours instanciée avec un type de données utiles constant (ara::com::SamplePtr<SampleType const>), de sorte que tous les opérateurs d'accès sont implicitement constants (EXP ARAComAPI, p. 39, EXP ARAComAPI, p. 44, [SWS_CM_00701]).
Cycle de vie
Les instances de SamplePtr peuvent être créées comme des pointeurs vides via le constructeur par défaut ou avec nullptr ([SWS_CM_11534], [SWS_CM_11535]). En revanche, des instances valides contenant des données utiles sont générées au sein du middleware lors de la désérialisation d'événements dans des slots de tampon et sont transmises à un callable côté application dans le cadre de GetNewSamples() (EXP ARAComAPI, p. 44).
La transmission s'accompagne d'un transfert complet de propriété (ownership transfer) vers l'application (EXP ARAComAPI §5.3.5.4). Afin de garantir l'exclusivité de la possession, le constructeur de copie et l'opérateur d'assignation par copie sont supprimés ([SWS_CM_11536], [SWS_CM_11538]). Un transfert du slot mémoire géré n'est possible que par construction par déplacement ou assignation par déplacement ([SWS_CM_11537], [SWS_CM_11540]), tandis que Swap() permet l'échange du contenu de deux pointeurs ([SWS_CM_11544]).
Tant qu'une instance de SamplePtr existe et détient l'échantillon, le middleware ne peut ni récupérer l'espace mémoire occupé ni le réécrire (EXP ARAComAPI §5.3.5.4). La libération du slot de middleware n'a lieu que lorsque la durée de vie du SamplePtr se termine par l'appel du destructeur ([SWS_CM_11547]) ou que le pointeur est explicitement vidé au moyen de Reset(nullptr) ou par l'assignation de nullptr ([SWS_CM_11539], [SWS_CM_11545]).
Le déroulement typique de l'accès aux données se divise selon les étapes suivantes :
Déclencher l'interrogation d'échantillons : l'application appelle GetNewSamples() sur le proxy d'événement et transmet une fonction de callback appropriée ayant la signature void(ara::com::SamplePtr<SampleType const>) ainsi qu'une limite supérieure pour le nombre d'échantillons à récupérer (EXP ARAComAPI, p. 44).
Transmission au callback : si de nouvelles données sont disponibles et que le quota de tampon n'est pas épuisé, le middleware désérialise l'échantillon et transmet la nouvelle instance de SamplePtr au callback (EXP ARAComAPI, p. 44).
Vérifier l'état End-to-End : via GetProfileCheckStatus(), l'application peut interroger le résultat de la vérification de la protection E2E pour le paquet de données présent ([SWS_CM_90420]).
Lire les données : la logique applicative accède en lecture à l'objet géré via operator* ([SWS_CM_11541]), operator-> ([SWS_CM_11542]) ou la méthode Get() ([SWS_CM_11546]).
Poursuite du traitement ou libération : si l'échantillon doit être persisté au-delà du callback, l'application transfère le pointeur par construction par déplacement vers ses propres structures de mémoire ([SWS_CM_11537]). Si le pointeur reste dans la portée du callback, il est automatiquement détruit à la sortie ([SWS_CM_11547]), ce qui libère immédiatement le slot dans le middleware (EXP ARAComAPI §5.3.5.4).
Lors de l'utilisation de SamplePtr, des contraintes et sources d'erreurs spécifiques doivent être prises en compte :
Épuisement du quota de tampon : le middleware surveille à chaque appel de GetNewSamples() si le nombre d'échantillons actuellement détenus par l'application dépasse le quota garanti précédemment lors de l'appel de Subscribe(). Si le quota est dépassé, GetNewSamples() refuse la délivrance d'échantillons supplémentaires et renvoie à la place un ara::core::ErrorCode (EXP ARAComAPI, p. 44, EXP ARAComAPI, p. 45).
Invalidité due à la perte d'abonnement ou à la destruction du proxy :SamplePtr ne se comporte de manière déterministe comme un std::unique_ptr que tant que l'événement sous-jacent reste abonné et que l'instance de proxy parente existe. La conservation de pointeurs au-delà de la fin de l'abonnement ou de la destruction du proxy est considérée comme une violation des préconditions.
Validité du pointeur et état nul :operator bool() permet d'évaluer l'état d'affectation du pointeur ([SWS_CM_11543]). Le déréférencement d'un pointeur vide via operator* ou operator-> entraîne un comportement indéfini. Toutes les méthodes d'accès et de modification sont déclarées comme noexcept ([SWS_CM_11541], [SWS_CM_11542], [SWS_CM_11546]).
Erreur de validation E2E : un pointeur reçu valablement ne garantit pas nécessairement des données de transmission sans erreur ; via la valeur de retour de GetProfileCheckStatus(), l'application doit vérifier si la protection End-to-End signale une corruption des données ou des retards de transmission ([SWS_CM_90420]).
Ce guide de classe a été généré par un assistant de curation IA sur la base des spécifications AUTOSAR pour Adaptive Platform Release R25-11.
GÉNÉRÉ PAR IAnon vérifiéModèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : 1cc8beae7ae3ProvenanceQuestions ouvertes (1)
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand
Utilisation et sémantique
La fonction Get est une fonction membre sans paramètre de la classe ara::com::SamplePtr provenant de l'en-tête ara/com/service/sample_ptr.h[SWS_CM_11546]. Elle retourne de manière synchrone un pointeur brut de type T* vers l'objet géré par l'instance [SWS_CM_11546]. Contrairement aux interrogations asynchrones de champs de service qui fournissent un ara::core::Future[SWS_CM_00112], cet accès s'effectue directement dans le thread appelant.
Gestion des erreurs et conditions limites
La méthode est déclarée comme noexcept et spécifiée comme sûre vis-à-vis des exceptions (exception safe) [SWS_CM_11546] ; aucun état d'erreur n'intervient par le biais d'exceptions C++. Si l'instance ne gère actuellement aucun objet, le pointeur renvoyé est vraisemblablement nullptr. Question Q-d850bd8ee144369a (ouverte) Avant le traitement ultérieur de la donnée référencée, il convient de s'assurer que la surveillance E2E présente l'état ara::com::e2e::SMState::kValid et que le contrôle de statut du profil n'a révélé aucune erreur [SWS_CM_90422].
Interaction et délimitation
Dans le gestionnaire de communication, Get sert à l'accès direct aux données pour les valeurs reçues (samples), telles qu'elles sont fournies dans le cadre de la gestion des échantillons AUTOSAR_AP_EXP_ARAComAPI §10 « GetNewSamples ». Cette fonction doit être clairement distinguée d'autres opérations Get :
Accesseur de champ (getter) : la récupération de champs de service au niveau du proxy s'effectue via Get() avec retour d'un ara::core::Future[SWS_CM_00112], pour lequel un gestionnaire peut être enregistré côté serveur [SWS_CM_00114].
État E2E : l'état de surveillance d'un accesseur de champ est déterminé séparément via GetE2EStateMachineStateGetter[SWS_CM_00145].
Ce texte a été créé par une IA et est basé sur la version AUTOSAR R25-11.
GÉNÉRÉ PAR IAnon vérifiéModèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : 0a03c7966b10ProvenanceQuestions ouvertes (1)
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand
La fonction membre Reset de la classe ara::com::SamplePtr sert à réinitialiser le pointeur vers l'objet géré [SWS_CM_11545]. En tant que paramètre, elle prend la valeur other de type std::nullptr_t. L'appel remplace l'objet actuellement détenu par un pointeur nul et ne renvoie aucune valeur (void) [SWS_CM_11545].
En matière de traitement des erreurs et de sécurité vis-à-vis des exceptions, la méthode est déclarée avec noexcept et spécifiée comme pleinement sûre vis-à-vis des exceptions (exception safe) [SWS_CM_11545]. Aucune exception C++ n'est levée et aucun code d'erreur spécifique n'est renvoyé.
Dans le système global, la libération d'instances de SamplePtr remplit une condition préalable essentielle pour éviter les erreurs de mémoire :
Une obligation comparable est formulée par [SWS_CM_00085] avant le désabonnement d'événements ou de champs (Unsubscription).
Interprétation : l'appel explicite de Reset(nullptr) devrait constituer, dans les scénarios d'application, le moyen direct de renoncer de manière déterministe à la propriété d'un échantillon d'événement avant de telles transitions de cycle de vie, lorsque le pointeur ne sort pas automatiquement de sa portée. Question Q-a615fa4078ab03ce (ouverte)
Cette note d'utilisation a été générée de manière automatisée sur la base de la spécification AUTOSAR R25-11.
L'appel s'effectue de manière synchrone et attend le paramètre suivant :
other : référence vers une autre instance de ara::com::SamplePtr dont l'objet géré est échangé avec celui de *this ([SWS_CM_11544]).
La méthode ne possède aucune valeur de retour (void) ([SWS_CM_11544]).
Gestion des erreurs
La signature est déclarée avec noexcept et classée comme sûre vis-à-vis des exceptions (exception safe) ([SWS_CM_11544]). L'appel ne lève aucune exception et ne renvoie aucun code d'erreur.
Concurrence et restrictions
Comme Swap modifie simultanément l'état de deux objets (*this et other), des appels parallèles sur au moins l'une des instances impliquées ne seraient vraisemblablement pas thread-safe sans synchronisation externe. Question Q-d906e8c05aefbd15 (ouverte)
Interaction
La méthode fait partie intégrante de la classe ara::com::SamplePtr ([SWS_CM_11544]). Elle permet le transfert efficace de propriété ou la réaffectation d'échantillons de données reçus dans les flux de communication, sans qu'il soit nécessaire de copier l'objet de données utiles sous-jacent.
Cette note d'utilisation a été générée automatiquement sur la base des documents de spécification.
gemini-3.8-flash-low· 2026-10-13 · Original allemand