2 * Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration.
5 * @file PackedLinkDecorator.icc
6 * @author scott snyder <snyder@bnl.gov>
8 * @brief Helper class to provide type-safe access to aux data,
9 * specialized for @c PackedLink.
12#include "AthContainers/AuxElement.h"
13#include "AthContainers/AuxTypeRegistry.h"
14#include "AthContainers/exceptions.h"
22 * @param name Name of this aux variable.
24 * The name -> auxid lookup is done here.
26template <class CONT, class ALLOC>
28Decorator<PackedLink<CONT>, ALLOC>::Decorator (const std::string& name)
29 : Decorator (name, "", SG::AuxVarFlags::None)
36 * @param name Name of this aux variable.
37 * @param clsname The name of its associated class. May be blank.
39 * The name -> auxid lookup is done here.
41template <class CONT, class ALLOC>
43Decorator<PackedLink<CONT>, ALLOC>::Decorator (const std::string& name,
44 const std::string& clsname)
45 : Decorator (name, clsname, SG::AuxVarFlags::None)
51 * @brief Constructor taking an auxid directly.
52 * @param auxid ID for this auxiliary variable.
54 * Will throw @c SG::ExcAuxTypeMismatch if the types don't match.
56template <class CONT, class ALLOC>
58Decorator<PackedLink<CONT>, ALLOC>::Decorator (const SG::auxid_t auxid)
60 AuxTypeRegistry& r = AuxTypeRegistry::instance();
62 r.checkAuxID<PLink_t, ALLOC> (m_auxid);
63 m_linkedAuxid = r.linkedVariable (m_auxid);
64 if (m_linkedAuxid == static_cast<uint32_t>(null_auxid)) {
65 throw SG::ExcNoLinkedVar (auxid, typeid (CONT));
66 // cppcheck-suppress missingReturn; false positive
73 * @param name Name of this aux variable.
74 * @param clsname The name of its associated class. May be blank.
75 * @param flags Optional flags qualifying the type. See AuxTypeRegistry.
77 * The name -> auxid lookup is done here.
79template <class CONT, class ALLOC>
81Decorator<PackedLink<CONT>, ALLOC>::Decorator
82 (const std::string& name,
83 const std::string& clsname,
84 const SG::AuxVarFlags flags)
86 AuxTypeRegistry& r = AuxTypeRegistry::instance();
87 m_linkedAuxid = r.getAuxID<DLink_t, DLinkAlloc_t> (AuxTypeRegistry::linkedName (name),
89 flags | AuxVarFlags::Linked);
90 m_auxid = r.getAuxID<PLink_t, ALLOC> (name, clsname, flags, m_linkedAuxid);
95 * @brief Fetch the variable for one element.
96 * @param e The element for which to fetch the variable.
98 * Will return an @c ElementLink proxy, which may be converted to
99 * or assigned from an @c ElementLink.
101 * If the container is locked, this will allow fetching only variables
102 * that do not yet exist (in which case they will be marked as decorations)
103 * or variables already marked as decorations.
105template <class CONT, class ALLOC>
106template <IsConstAuxElement ELT>
109Decorator<PackedLink<CONT>, ALLOC>::operator() (const ELT& e) const -> ELProxy
111 assert (e.container() != 0);
112 AuxVectorData& container_nc ATLAS_THREAD_SAFE = const_cast<AuxVectorData&> (*e.container());
113 return ELProxy (e.container()->template getDecoration<PLink_t> (this->m_auxid, e.index()),
116 this->m_linkedAuxid);
121 * @brief Fetch the variable for one element.
122 * @param container The container from which to fetch the variable.
123 * @param index The index of the desired element.
125 * This allows retrieving aux data by container / index.
127 * Will return an @c ElementLink proxy, which may be converted to
128 * or assigned from an @c ElementLink.
130 * If the container is locked, this will allow fetching only variables
131 * that do not yet exist (in which case they will be marked as decorations)
132 * or variables already marked as decorations.
134template <class CONT, class ALLOC>
137Decorator<PackedLink<CONT>, ALLOC>::operator() (const AuxVectorData& container,
141 AuxVectorData& container_nc ATLAS_THREAD_SAFE = const_cast<AuxVectorData&> (container);
142 return ELProxy (container.template getDecoration<PLink_t> (this->m_auxid, index),
143 container_nc, this->m_auxid, this->m_linkedAuxid);
148 * @brief Set the variable for one element.
149 * @param e The element for which to set the variable.
150 * @param l The @c ElementLink to set.
152template <class CONT, class ALLOC>
153template <IsConstAuxElement ELT>
155void Decorator<PackedLink<CONT>, ALLOC>::set (const ELT& e,
156 const Link_t& l) const
158 set (*e.container(), e.index(), l);
163 * @brief Set the variable for one element.
164 * @param container The container for which to set the variable.
165 * @param index The index of the desired element.
166 * @param l The @c ElementLink to set.
168template <class CONT, class ALLOC>
170void Decorator<PackedLink<CONT>, ALLOC>::set (const AuxVectorData& container,
172 const Link_t& l) const
174 // Have to do this before creating the converter.
175 PLink_t& ll = container.template getDecoration<PLink_t> (this->m_auxid, index);
176 AuxVectorData& container_nc ATLAS_THREAD_SAFE = const_cast<AuxVectorData&> (container);
177 detail::PackedLinkConverter<CONT> cnv (container_nc,
179 this->m_linkedAuxid);
185 * @brief Get a pointer to the start of the array of @c PackedLinks.
186 * @param container The container from which to fetch the variable.
188template <class CONT, class ALLOC>
191Decorator<PackedLink<CONT>, ALLOC>::getPackedLinkArray (const AuxVectorData& container) const
194 return reinterpret_cast<const PLink_t*> (container.getDataArray (m_auxid));
199 * @brief Get a pointer to the start of the linked array of @c DataLinks.
200 * @param container The container from which to fetch the variable.
202template <class CONT, class ALLOC>
205Decorator<PackedLink<CONT>, ALLOC>::getDataLinkArray (const AuxVectorData& container) const
208 return reinterpret_cast<const DLink_t*>
209 (container.getDataArray (m_linkedAuxid));
214 * @brief Get a pointer to the start of the array of @c PackedLinks,
216 * @param container The container from which to fetch the variable.
218 * If the container is locked, this will allow fetching only variables
219 * that do not yet exist (in which case they will be marked as decorations)
220 * or variables already marked as decorations.
222template <class CONT, class ALLOC>
225Decorator<PackedLink<CONT>, ALLOC>::getPackedLinkDecorArray (const AuxVectorData& container) const
228 return reinterpret_cast<PLink_t*> (container.getDecorationArray (m_auxid));
233 * @brief Get a pointer to the start of the linked array of @c DataLinks,
235 * @param container The container from which to fetch the variable.
237 * If the container is locked, this will allow fetching only variables
238 * that do not yet exist (in which case they will be marked as decorations)
239 * or variables already marked as decorations.
241template <class CONT, class ALLOC>
244Decorator<PackedLink<CONT>, ALLOC>::getDataLinkDecorArray (const AuxVectorData& container) const
247 return reinterpret_cast<DLink_t*> (container.getDecorationArray (m_linkedAuxid));
252 * @brief Get a span over the array of @c PackedLinks.
253 * @param container The container from which to fetch the variable.
255template <class CONT, class ALLOC>
258Decorator<PackedLink<CONT>, ALLOC>::getPackedLinkSpan (const AuxVectorData& container) const
259 -> const_PackedLink_span
261 const SG::AuxDataSpanBase sp = *container.getDataSpan (m_auxid);
262 return const_PackedLink_span (reinterpret_cast<const PLink_t*>(sp.beg), sp.size);
267 * @brief Get a span over the array of @c DataLinks.
268 * @param container The container from which to fetch the variable.
270template <class CONT, class ALLOC>
273Decorator<PackedLink<CONT>, ALLOC>::getDataLinkSpan (const AuxVectorData& container) const
274 -> const_DataLink_span
276 const AuxDataSpanBase sp = *container.getDataSpan (m_linkedAuxid);
277 return const_DataLink_span (reinterpret_cast<const DLink_t*>(sp.beg),
283 * @brief Get a span of @c ElementLinks.
284 * @param container The container from which to fetch the variable.
286template <class CONT, class ALLOC>
289Decorator<PackedLink<CONT>, ALLOC>::getDataSpan (const AuxVectorData& container) const
292 return const_span (getPackedLinkSpan(container),
293 ConstConverter_t (*container.getDataSpan (m_linkedAuxid)));
298 * @brief Get a span over the array of @c PackedLinks, as a decoration.
299 * @param container The container from which to fetch the variable.
301 * If the container is locked, this will allow fetching only variables
302 * that do not yet exist (in which case they will be marked as decorations)
303 * or variables already marked as decorations.
305template <class CONT, class ALLOC>
308Decorator<PackedLink<CONT>, ALLOC>::getPackedLinkDecorSpan (const AuxVectorData& container) const
311 // nb. AuxVectorData::getDataSpan is suitable only for const;
312 // getDecorationArray may throw if the container is empty.
313 size_t sz = container.size_v();
314 PLink_t* beg = nullptr;
316 beg = reinterpret_cast<PLink_t*>
317 (container.getDecorationArray (this->m_auxid));
319 return PackedLink_span (beg, sz);
324 * @brief Get a span over the array of @c DataLinks, as a decoration.
325 * @param container The container from which to fetch the variable.
327 * If the container is locked, this will allow fetching only variables
328 * that do not yet exist (in which case they will be marked as decorations)
329 * or variables already marked as decorations.
331template <class CONT, class ALLOC>
334Decorator<PackedLink<CONT>, ALLOC>::getDataLinkDecorSpan (const AuxVectorData& container) const
337 const AuxDataSpanBase sp = *container.getDataSpan (this->m_linkedAuxid);
339 // Accessibility check. ??? Can we get rid of this?
340 (void)container.getDecorationArray (this->m_linkedAuxid);
342 return DataLink_span (reinterpret_cast<DLink_t*>(sp.beg), sp.size);
347 * @brief Get a span of @c ElementLink proxies, as a decoration.
348 * @param container The container from which to fetch the variable.
350 * The proxies may be converted to or assigned from @c ElementLink.
352 * If the container is locked, this will allow fetching only variables
353 * that do not yet exist (in which case they will be marked as decorations)
354 * or variables already marked as decorations.
356template <class CONT, class ALLOC>
359Decorator<PackedLink<CONT>, ALLOC>::getDecorationSpan (const AuxVectorData& container) const
362 PackedLink_span pspan = getPackedLinkDecorSpan(container);
363 AuxVectorData& container_nc ATLAS_THREAD_SAFE = const_cast<AuxVectorData&> (container);
365 detail::PackedLinkConverter<CONT> (container_nc,
367 this->m_linkedAuxid));
372 * @brief Test to see if this variable exists in the store and is writable.
373 * @param e An element of the container in which to test the variable.
375template <class CONT, class ALLOC>
376template <IsConstAuxElement ELT>
379Decorator<PackedLink<CONT>, ALLOC>::isAvailableWritable (const ELT& e) const
381 return e.container() &&
382 e.container()->isAvailableWritableAsDecoration (m_auxid) &&
383 e.container()->isAvailableWritableAsDecoration (m_linkedAuxid);
388 * @brief Test to see if this variable exists in the store and is writable.
389 * @param c The container in which to test the variable.
391template <class CONT, class ALLOC>
394Decorator<PackedLink<CONT>, ALLOC>::isAvailableWritable (const AuxVectorData& c) const
396 return c.isAvailableWritableAsDecoration (m_auxid) &&
397 c.isAvailableWritableAsDecoration (m_linkedAuxid);
401//************************************************************************
404// To make the declarations a bit more readable.
405#define DECORATOR Decorator<std::vector<PackedLink<CONT>, VALLOC>, ALLOC>
409 * @brief Constructor.
410 * @param name Name of this aux variable.
412 * The name -> auxid lookup is done here.
414template <class CONT, class ALLOC, class VALLOC>
416DECORATOR::Decorator (const std::string& name)
417 : Decorator (name, "", SG::AuxVarFlags::None)
423 * @brief Constructor.
424 * @param name Name of this aux variable.
425 * @param clsname The name of its associated class. May be blank.
427 * The name -> auxid lookup is done here.
429template <class CONT, class ALLOC, class VALLOC>
431DECORATOR::Decorator (const std::string& name,
432 const std::string& clsname)
433 : Decorator (name, clsname, SG::AuxVarFlags::None)
439 * @brief Constructor taking an auxid directly.
440 * @param auxid ID for this auxiliary variable.
442 * Will throw @c SG::ExcAuxTypeMismatch if the types don't match.
444template <class CONT, class ALLOC, class VALLOC>
446DECORATOR::Decorator (const SG::auxid_t auxid)
448 AuxTypeRegistry& r = AuxTypeRegistry::instance();
450 r.checkAuxID<VElt_t, ALLOC> (m_auxid);
451 m_linkedAuxid = r.linkedVariable (m_auxid);
452 if (m_linkedAuxid == static_cast<uint32_t>(null_auxid)) {
453 throw SG::ExcNoLinkedVar (auxid, typeid (CONT));
457 * @brief Constructor.
458 * @param name Name of this aux variable.
459 * @param clsname The name of its associated class. May be blank.
460 * @param flags Optional flags qualifying the type. See AuxTypeRegistry.
462 * The name -> auxid lookup is done here.
464template <class CONT, class ALLOC, class VALLOC>
466DECORATOR::Decorator (const std::string& name,
467 const std::string& clsname,
468 const SG::AuxVarFlags flags)
470 AuxTypeRegistry& r = AuxTypeRegistry::instance();
471 m_linkedAuxid = r.getAuxID<DLink_t, DLinkAlloc_t> (AuxTypeRegistry::linkedName (name),
473 flags | AuxVarFlags::Linked);
474 m_auxid = r.getAuxID<VElt_t, ALLOC> (name, clsname, flags, m_linkedAuxid);
479 * @brief Fetch the variable for one element.
480 * @param e The element for which to fetch the variable.
482 * This will return a range of @c ElementLink proxies.
483 * These proxies may be converted to or assigned from @c ElementLink.
485 * If the container is locked, this will allow fetching only variables
486 * that do not yet exist (in which case they will be marked as decorations)
487 * or variables already marked as decorations.
489template <class CONT, class ALLOC, class VALLOC>
490template <IsConstAuxElement ELT>
492DECORATOR::operator() (const ELT& e) const
495 assert (e.container() != 0);
496 // This has be to called before making the ELSpanProxyHelper.
497 VElt_t* veltArr = getPackedLinkVectorDecorArray(*e.container());
498 AuxVectorData& container_nc ATLAS_THREAD_SAFE = *const_cast<AuxVectorData*>(e.container());
499 return elt_span (veltArr[e.index()], container_nc,
501 this->m_linkedAuxid);
506 * @brief Fetch the variable for one element.
507 * @param container The container from which to fetch the variable.
508 * @param index The index of the desired element.
510 * This allows retrieving aux data by container / index.
512 * This will return a range of @c ElementLink proxies.
513 * These proxies may be converted to or assigned from @c ElementLink.
515 * If the container is locked, this will allow fetching only variables
516 * that do not yet exist (in which case they will be marked as decorations)
517 * or variables already marked as decorations.
519template <class CONT, class ALLOC, class VALLOC>
521DECORATOR::operator() (const AuxVectorData& container,
525 // This has be to called before making the ELSpanProxyHelper.
526 VElt_t* veltArr = getPackedLinkVectorDecorArray(container);
527 AuxVectorData& container_nc ATLAS_THREAD_SAFE = const_cast<AuxVectorData&>(container);
528 return elt_span (veltArr[index], container_nc,
530 this->m_linkedAuxid);
535 * @brief Set the variable for one element.
536 * @param e The element for which to set the variable.
537 * @param r The variable value to set, as a range over @c ElementLink.
539template <class CONT, class ALLOC, class VALLOC>
540template <IsConstAuxElement ELT, detail::ElementLinkRange<CONT> RANGE>
541void DECORATOR::set (const ELT& e, const RANGE& r) const
543 set (*e.container(), e.index(), r);
548 * @brief Set the variable for one element.
549 * @param container The container from which to fetch the variable.
550 * @param index The index of the desired element.
551 * @param r The variable value to set, as a range over @c ElementLink.
553template <class CONT, class ALLOC, class VALLOC>
554template <detail::ElementLinkRange<CONT> RANGE>
555void DECORATOR::set (const AuxVectorData& container,
557 const RANGE& r) const
559 AuxVectorData& container_nc ATLAS_THREAD_SAFE = const_cast<AuxVectorData&> (container);
560 detail::PackedLinkConverter<CONT> cnv (container_nc,
562 this->m_linkedAuxid);
563 VElt_t& velt = container.template getDecoration<VElt_t> (this->m_auxid, index);
569 * @brief Get a pointer to the start of the array of vectors of @c PackedLinks.
570 * @param container The container from which to fetch the variable.
572template <class CONT, class ALLOC, class VALLOC>
575DECORATOR::getPackedLinkVectorArray (const AuxVectorData& container) const
578 return reinterpret_cast<const VElt_t*>
579 (container.getDataArray (m_auxid));
584 * @brief Get a pointer to the start of the linked array of @c DataLinks.
585 * @param container The container from which to fetch the variable.
587template <class CONT, class ALLOC, class VALLOC>
590DECORATOR::getDataLinkArray (const AuxVectorData& container) const
593 return reinterpret_cast<const DLink_t*>
594 (container.getDataArray (m_linkedAuxid));
599 * @brief Get a pointer to the start of the array of vectors of @c PackedLinks,
601 * @param container The container from which to fetch the variable.
603template <class CONT, class ALLOC, class VALLOC>
606DECORATOR::getPackedLinkVectorDecorArray (const AuxVectorData& container) const
609 return reinterpret_cast<VElt_t*> (container.getDecorationArray (m_auxid));
614 * @brief Get a pointer to the start of the linked array of @c DataLinks,
616 * @param container The container from which to fetch the variable.
618template <class CONT, class ALLOC, class VALLOC>
621DECORATOR::getDataLinkDecorArray (const AuxVectorData& container) const
624 return reinterpret_cast<DLink_t*> (container.getDecorationArray (m_linkedAuxid));
629 * @brief Get a span over the vector of @c PackedLinks for a given element.
630 * @param e The element for which to fetch the variable.
632template <class CONT, class ALLOC, class VALLOC>
633template <IsConstAuxElement ELT>
636DECORATOR::getPackedLinkSpan (const ELT& e) const
637 -> const_PackedLink_span
639 auto elt = reinterpret_cast<const VElt_t*>
640 (e.container()->getDataArray (this->m_auxid)) + e.index();
641 return const_PackedLink_span (elt->data(), elt->size());
646 * @brief Get a span over the vector of @c PackedLinks for a given element.
647 * @param container The container from which to fetch the variable.
648 * @param index The index of the desired element.
650template <class CONT, class ALLOC, class VALLOC>
653DECORATOR::getPackedLinkSpan (const AuxVectorData& container, size_t index) const
654 -> const_PackedLink_span
656 auto elt = reinterpret_cast<const VElt_t*>
657 (container.getDataArray (this->m_auxid)) + index;
658 return const_PackedLink_span (elt->data(), elt->size());
663 * @brief Get a span over the vector of @c PackedLinks for a given element.
664 * @param container The container from which to fetch the variable.
665 * @param index The index of the desired element.
667template <class CONT, class ALLOC, class VALLOC>
670DECORATOR::getPackedLinkSpan (AuxVectorData& container, size_t index) const
673 auto elt = reinterpret_cast<VElt_t*>
674 (container.getDataArray (this->m_auxid)) + index;
675 return PackedLink_span (elt->data(), elt->size());
680 * @brief Get a span over the vectors of @c PackedLinks.
681 * @param container The container from which to fetch the variable.
683template <class CONT, class ALLOC, class VALLOC>
686DECORATOR::getPackedLinkVectorSpan (const AuxVectorData& container) const
687 -> const_PackedLinkVector_span
689 auto beg = reinterpret_cast<const VElt_t*>
690 (container.getDataArray (m_auxid));
691 return const_PackedLinkVector_span (beg, container.size_v());
696 * @brief Get a span over the array of @c DataLinks.
697 * @param container The container from which to fetch the variable.
699template <class CONT, class ALLOC, class VALLOC>
702DECORATOR::getDataLinkSpan (const AuxVectorData& container) const
703 -> const_DataLink_span
705 const AuxDataSpanBase* sp = container.getDataSpan (m_linkedAuxid);
706 return const_DataLink_span (reinterpret_cast<const DLink_t*>(sp->beg),
712 * @brief Get a span over spans of @c ElementLinks.
713 * @param container The container from which to fetch the variable.
715template <class CONT, class ALLOC, class VALLOC>
718DECORATOR::getDataSpan (const AuxVectorData& container) const
721 const_PackedLinkVector_span pvspan = getPackedLinkVectorSpan(container);
722 return const_span (pvspan,
723 ConstVectorTransform_t (*container.getDataSpan (m_linkedAuxid)));
728 * @brief Get a span over the vector of @c PackedLinks for a given element,
730 * @param e The element for which to fetch the variable.
732 * If the container is locked, this will allow fetching only variables
733 * that do not yet exist (in which case they will be marked as decorations)
734 * or variables already marked as decorations.
736template <class CONT, class ALLOC, class VALLOC>
737template <IsConstAuxElement ELT>
740DECORATOR::getPackedLinkDecorSpan (const ELT& e) const
743 auto elt = reinterpret_cast<VElt_t*>
744 (e.container()->getDecorationArray (this->m_auxid)) + e.index();
745 return PackedLink_span (elt->data(), elt->size());
750 * @brief Get a span over the vector of @c PackedLinks for a given element,
752 * @param container The container from which to fetch the variable.
753 * @param index The index of the desired element.
755 * If the container is locked, this will allow fetching only variables
756 * that do not yet exist (in which case they will be marked as decorations)
757 * or variables already marked as decorations.
759template <class CONT, class ALLOC, class VALLOC>
762DECORATOR::getPackedLinkDecorSpan (const AuxVectorData& container, size_t index) const
765 auto elt = reinterpret_cast<VElt_t*>
766 (container.getDecorationArray (this->m_auxid)) + index;
767 return PackedLink_span (elt->data(), elt->size());
772 * @brief Get a span over the vectors of @c PackedLinks,
774 * @param container The container from which to fetch the variable.
776 * If the container is locked, this will allow fetching only variables
777 * that do not yet exist (in which case they will be marked as decorations)
778 * or variables already marked as decorations.
780template <class CONT, class ALLOC, class VALLOC>
783DECORATOR::getPackedLinkVectorDecorSpan (const AuxVectorData& container) const
784 -> PackedLinkVector_span
786 auto beg = reinterpret_cast<VElt_t*>
787 (container.getDecorationArray (m_auxid));
788 return PackedLinkVector_span (beg, container.size_v());
793 * @brief Get a span over the array of @c DataLinks, as a decoration.
794 * @param container The container from which to fetch the variable.
796 * If the container is locked, this will allow fetching only variables
797 * that do not yet exist (in which case they will be marked as decorations)
798 * or variables already marked as decorations.
800template <class CONT, class ALLOC, class VALLOC>
803DECORATOR::getDataLinkDecorSpan (const AuxVectorData& container) const
806 (void)container.getDecorationArray (this->m_linkedAuxid); // check for locking
807 const AuxDataSpanBase* sp = container.getDataSpan (m_linkedAuxid);
808 return DataLink_span (reinterpret_cast<DLink_t*>(sp->beg), sp->size);
813 * @brief Get a span over spans of @c ElementLink proxies,
815 * @param container The container from which to fetch the variable.
817 * The individual proxies may be converted to or assigned from @c ElementLink.
818 * Each element may also be assigned from a range of @c ElementLink,
819 * or converted to a vector of @c ElementLink.
821 * If the container is locked, this will allow fetching only variables
822 * that do not yet exist (in which case they will be marked as decorations)
823 * or variables already marked as decorations.
825template <class CONT, class ALLOC, class VALLOC>
828DECORATOR::getDecorationSpan (const AuxVectorData& container) const
831 PackedLinkVector_span pvspan = getPackedLinkVectorDecorSpan(container);
832 AuxVectorData& container_nc ATLAS_THREAD_SAFE = const_cast<AuxVectorData&> (container);
834 ELSpanConverter (container_nc,
836 this->m_linkedAuxid));
841 * @brief Test to see if this variable exists in the store and is writable.
842 * @param e An element of the container in which to test the variable.
844template <class CONT, class ALLOC, class VALLOC>
845template <IsConstAuxElement ELT>
848DECORATOR::isAvailableWritable (const ELT& e) const
850 return e.container() &&
851 e.container()->isAvailableWritableAsDecoration (m_auxid) &&
852 e.container()->isAvailableWritableAsDecoration (m_linkedAuxid);
857 * @brief Test to see if this variable exists in the store and is writable.
858 * @param c The container in which to test the variable.
860template <class CONT, class ALLOC, class VALLOC>
863DECORATOR::isAvailableWritable (const AuxVectorData& c) const
865 return c.isAvailableWritableAsDecoration (m_auxid) &&
866 c.isAvailableWritableAsDecoration (m_linkedAuxid);