2 * Copyright (C) 2002-2024 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.
26 template <class CONT, class ALLOC>
28 Decorator<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.
41 template <class CONT, class ALLOC>
43 Decorator<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.
56 template <class CONT, class ALLOC>
58 Decorator<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 AuxTypeRegsitry.
77 * The name -> auxid lookup is done here.
79 template <class CONT, class ALLOC>
81 Decorator<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.
105 template <class CONT, class ALLOC>
106 template <IsConstAuxElement ELT>
109 Decorator<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.
134 template <class CONT, class ALLOC>
137 Decorator<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.
152 template <class CONT, class ALLOC>
153 template <IsConstAuxElement ELT>
155 void 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.
168 template <class CONT, class ALLOC>
170 void 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.
188 template <class CONT, class ALLOC>
191 Decorator<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.
202 template <class CONT, class ALLOC>
205 Decorator<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.
222 template <class CONT, class ALLOC>
225 Decorator<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.
241 template <class CONT, class ALLOC>
244 Decorator<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.
255 template <class CONT, class ALLOC>
258 Decorator<PackedLink<CONT>, ALLOC>::getPackedLinkSpan (const AuxVectorData& container) const
259 -> const_PackedLink_span
261 auto beg = reinterpret_cast<const PLink_t*>(container.getDataArray (m_auxid));
262 return const_PackedLink_span (beg, container.size_v());
267 * @brief Get a span over the array of @c DataLinks.
268 * @param container The container from which to fetch the variable.
270 template <class CONT, class ALLOC>
273 Decorator<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.
286 template <class CONT, class ALLOC>
289 Decorator<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.
305 template <class CONT, class ALLOC>
308 Decorator<PackedLink<CONT>, ALLOC>::getPackedLinkDecorSpan (const AuxVectorData& container) const
311 auto beg = reinterpret_cast<PLink_t*>
312 (container.getDecorationArray (this->m_auxid));
313 return PackedLink_span (beg, container.size_v());
318 * @brief Get a span over the array of @c DataLinks, as a decoration.
319 * @param container The container from which to fetch the variable.
321 * If the container is locked, this will allow fetching only variables
322 * that do not yet exist (in which case they will be marked as decorations)
323 * or variables already marked as decorations.
325 template <class CONT, class ALLOC>
328 Decorator<PackedLink<CONT>, ALLOC>::getDataLinkDecorSpan (const AuxVectorData& container) const
331 (void)container.getDecorationArray (this->m_linkedAuxid); // check for locking
332 const AuxDataSpanBase* sp = container.getDataSpan (m_linkedAuxid);
333 return DataLink_span (reinterpret_cast<DLink_t*>(sp->beg), sp->size);
338 * @brief Get a span of @c ElementLink proxies, as a decoration.
339 * @param container The container from which to fetch the variable.
341 * The proxies may be converted to or assigned from @c ElementLink.
343 * If the container is locked, this will allow fetching only variables
344 * that do not yet exist (in which case they will be marked as decorations)
345 * or variables already marked as decorations.
347 template <class CONT, class ALLOC>
350 Decorator<PackedLink<CONT>, ALLOC>::getDecorationSpan (const AuxVectorData& container) const
353 PackedLink_span pspan = getPackedLinkDecorSpan(container);
354 AuxVectorData& container_nc ATLAS_THREAD_SAFE = const_cast<AuxVectorData&> (container);
356 detail::PackedLinkConverter<CONT> (container_nc,
358 this->m_linkedAuxid));
363 * @brief Test to see if this variable exists in the store and is writable.
364 * @param e An element of the container in which to test the variable.
366 template <class CONT, class ALLOC>
367 template <IsConstAuxElement ELT>
370 Decorator<PackedLink<CONT>, ALLOC>::isAvailableWritable (const ELT& e) const
372 return e.container() &&
373 e.container()->isAvailableWritableAsDecoration (m_auxid) &&
374 e.container()->isAvailableWritableAsDecoration (m_linkedAuxid);
379 * @brief Test to see if this variable exists in the store and is writable.
380 * @param c The container in which to test the variable.
382 template <class CONT, class ALLOC>
385 Decorator<PackedLink<CONT>, ALLOC>::isAvailableWritable (const AuxVectorData& c) const
387 return c.isAvailableWritableAsDecoration (m_auxid) &&
388 c.isAvailableWritableAsDecoration (m_linkedAuxid);
392 //************************************************************************
395 // To make the declarations a bit more readable.
396 #define DECORATOR Decorator<std::vector<PackedLink<CONT>, VALLOC>, ALLOC>
400 * @brief Constructor.
401 * @param name Name of this aux variable.
403 * The name -> auxid lookup is done here.
405 template <class CONT, class ALLOC, class VALLOC>
407 DECORATOR::Decorator (const std::string& name)
408 : Decorator (name, "", SG::AuxVarFlags::None)
414 * @brief Constructor.
415 * @param name Name of this aux variable.
416 * @param clsname The name of its associated class. May be blank.
418 * The name -> auxid lookup is done here.
420 template <class CONT, class ALLOC, class VALLOC>
422 DECORATOR::Decorator (const std::string& name,
423 const std::string& clsname)
424 : Decorator (name, clsname, SG::AuxVarFlags::None)
430 * @brief Constructor taking an auxid directly.
431 * @param auxid ID for this auxiliary variable.
433 * Will throw @c SG::ExcAuxTypeMismatch if the types don't match.
435 template <class CONT, class ALLOC, class VALLOC>
437 DECORATOR::Decorator (const SG::auxid_t auxid)
439 AuxTypeRegistry& r = AuxTypeRegistry::instance();
441 r.checkAuxID<VElt_t, ALLOC> (m_auxid);
442 m_linkedAuxid = r.linkedVariable (m_auxid);
443 if (m_linkedAuxid == static_cast<uint32_t>(null_auxid)) {
444 throw SG::ExcNoLinkedVar (auxid, typeid (CONT));
448 * @brief Constructor.
449 * @param name Name of this aux variable.
450 * @param clsname The name of its associated class. May be blank.
451 * @param flags Optional flags qualifying the type. See AuxTypeRegsitry.
453 * The name -> auxid lookup is done here.
455 template <class CONT, class ALLOC, class VALLOC>
457 DECORATOR::Decorator (const std::string& name,
458 const std::string& clsname,
459 const SG::AuxVarFlags flags)
461 AuxTypeRegistry& r = AuxTypeRegistry::instance();
462 m_linkedAuxid = r.getAuxID<DLink_t, DLinkAlloc_t> (AuxTypeRegistry::linkedName (name),
464 flags | AuxVarFlags::Linked);
465 m_auxid = r.getAuxID<VElt_t, ALLOC> (name, clsname, flags, m_linkedAuxid);
470 * @brief Fetch the variable for one element.
471 * @param e The element for which to fetch the variable.
473 * This will return a range of @c ElementLink proxies.
474 * These proxies may be converted to or assigned from @c ElementLink.
476 * If the container is locked, this will allow fetching only variables
477 * that do not yet exist (in which case they will be marked as decorations)
478 * or variables already marked as decorations.
480 template <class CONT, class ALLOC, class VALLOC>
481 template <IsConstAuxElement ELT>
483 DECORATOR::operator() (const ELT& e) const
486 assert (e.container() != 0);
487 // This has be to called before making the ELSpanProxyHelper.
488 VElt_t* veltArr = getPackedLinkVectorDecorArray(*e.container());
489 AuxVectorData& container_nc ATLAS_THREAD_SAFE = *const_cast<AuxVectorData*>(e.container());
490 return elt_span (veltArr[e.index()], container_nc,
492 this->m_linkedAuxid);
497 * @brief Fetch the variable for one element.
498 * @param container The container from which to fetch the variable.
499 * @param index The index of the desired element.
501 * This allows retrieving aux data by container / index.
503 * This will return a range of @c ElementLink proxies.
504 * These proxies may be converted to or assigned from @c ElementLink.
506 * If the container is locked, this will allow fetching only variables
507 * that do not yet exist (in which case they will be marked as decorations)
508 * or variables already marked as decorations.
510 template <class CONT, class ALLOC, class VALLOC>
512 DECORATOR::operator() (const AuxVectorData& container,
516 // This has be to called before making the ELSpanProxyHelper.
517 VElt_t* veltArr = getPackedLinkVectorDecorArray(container);
518 AuxVectorData& container_nc ATLAS_THREAD_SAFE = const_cast<AuxVectorData&>(container);
519 return elt_span (veltArr[index], container_nc,
521 this->m_linkedAuxid);
526 * @brief Set the variable for one element.
527 * @param e The element for which to set the variable.
528 * @param r The variable value to set, as a range over @c ElementLink.
530 template <class CONT, class ALLOC, class VALLOC>
531 template <IsConstAuxElement ELT, detail::ElementLinkRange<CONT> RANGE>
532 void DECORATOR::set (const ELT& e, const RANGE& r) const
534 set (*e.container(), e.index(), r);
539 * @brief Set the variable for one element.
540 * @param container The container from which to fetch the variable.
541 * @param index The index of the desired element.
542 * @param r The variable value to set, as a range over @c ElementLink.
544 template <class CONT, class ALLOC, class VALLOC>
545 template <detail::ElementLinkRange<CONT> RANGE>
546 void DECORATOR::set (const AuxVectorData& container,
548 const RANGE& r) const
550 AuxVectorData& container_nc ATLAS_THREAD_SAFE = const_cast<AuxVectorData&> (container);
551 detail::PackedLinkConverter<CONT> cnv (container_nc,
553 this->m_linkedAuxid);
554 VElt_t& velt = container.template getDecoration<VElt_t> (this->m_auxid, index);
560 * @brief Get a pointer to the start of the array of vectors of @c PackedLinks.
561 * @param container The container from which to fetch the variable.
563 template <class CONT, class ALLOC, class VALLOC>
566 DECORATOR::getPackedLinkVectorArray (const AuxVectorData& container) const
569 return reinterpret_cast<const VElt_t*>
570 (container.getDataArray (m_auxid));
575 * @brief Get a pointer to the start of the linked array of @c DataLinks.
576 * @param container The container from which to fetch the variable.
578 template <class CONT, class ALLOC, class VALLOC>
581 DECORATOR::getDataLinkArray (const AuxVectorData& container) const
584 return reinterpret_cast<const DLink_t*>
585 (container.getDataArray (m_linkedAuxid));
590 * @brief Get a pointer to the start of the array of vectors of @c PackedLinks,
592 * @param container The container from which to fetch the variable.
594 template <class CONT, class ALLOC, class VALLOC>
597 DECORATOR::getPackedLinkVectorDecorArray (const AuxVectorData& container) const
600 return reinterpret_cast<VElt_t*> (container.getDecorationArray (m_auxid));
605 * @brief Get a pointer to the start of the linked array of @c DataLinks,
607 * @param container The container from which to fetch the variable.
609 template <class CONT, class ALLOC, class VALLOC>
612 DECORATOR::getDataLinkDecorArray (const AuxVectorData& container) const
615 return reinterpret_cast<DLink_t*> (container.getDecorationArray (m_linkedAuxid));
620 * @brief Get a span over the vector of @c PackedLinks for a given element.
621 * @param e The element for which to fetch the variable.
623 template <class CONT, class ALLOC, class VALLOC>
624 template <IsConstAuxElement ELT>
627 DECORATOR::getPackedLinkSpan (const ELT& e) const
628 -> const_PackedLink_span
630 auto elt = reinterpret_cast<const VElt_t*>
631 (e.container()->getDataArray (this->m_auxid)) + e.index();
632 return const_PackedLink_span (elt->data(), elt->size());
637 * @brief Get a span over the vector of @c PackedLinks for a given element.
638 * @param container The container from which to fetch the variable.
639 * @param index The index of the desired element.
641 template <class CONT, class ALLOC, class VALLOC>
644 DECORATOR::getPackedLinkSpan (const AuxVectorData& container, size_t index) const
645 -> const_PackedLink_span
647 auto elt = reinterpret_cast<const VElt_t*>
648 (container.getDataArray (this->m_auxid)) + index;
649 return const_PackedLink_span (elt->data(), elt->size());
654 * @brief Get a span over the vector of @c PackedLinks for a given element.
655 * @param container The container from which to fetch the variable.
656 * @param index The index of the desired element.
658 template <class CONT, class ALLOC, class VALLOC>
661 DECORATOR::getPackedLinkSpan (AuxVectorData& container, size_t index) const
664 auto elt = reinterpret_cast<VElt_t*>
665 (container.getDataArray (this->m_auxid)) + index;
666 return PackedLink_span (elt->data(), elt->size());
671 * @brief Get a span over the vectors of @c PackedLinks.
672 * @param container The container from which to fetch the variable.
674 template <class CONT, class ALLOC, class VALLOC>
677 DECORATOR::getPackedLinkVectorSpan (const AuxVectorData& container) const
678 -> const_PackedLinkVector_span
680 auto beg = reinterpret_cast<const VElt_t*>
681 (container.getDataArray (m_auxid));
682 return const_PackedLinkVector_span (beg, container.size_v());
687 * @brief Get a span over the array of @c DataLinks.
688 * @param container The container from which to fetch the variable.
690 template <class CONT, class ALLOC, class VALLOC>
693 DECORATOR::getDataLinkSpan (const AuxVectorData& container) const
694 -> const_DataLink_span
696 const AuxDataSpanBase* sp = container.getDataSpan (m_linkedAuxid);
697 return const_DataLink_span (reinterpret_cast<const DLink_t*>(sp->beg),
703 * @brief Get a span over spans of @c ElementLinks.
704 * @param container The container from which to fetch the variable.
706 template <class CONT, class ALLOC, class VALLOC>
709 DECORATOR::getDataSpan (const AuxVectorData& container) const
712 const_PackedLinkVector_span pvspan = getPackedLinkVectorSpan(container);
713 return const_span (pvspan,
714 ConstVectorTransform_t (*container.getDataSpan (m_linkedAuxid)));
719 * @brief Get a span over the vector of @c PackedLinks for a given element,
721 * @param e The element for which to fetch the variable.
723 * If the container is locked, this will allow fetching only variables
724 * that do not yet exist (in which case they will be marked as decorations)
725 * or variables already marked as decorations.
727 template <class CONT, class ALLOC, class VALLOC>
728 template <IsConstAuxElement ELT>
731 DECORATOR::getPackedLinkDecorSpan (const ELT& e) const
734 auto elt = reinterpret_cast<VElt_t*>
735 (e.container()->getDecorationArray (this->m_auxid)) + e.index();
736 return PackedLink_span (elt->data(), elt->size());
741 * @brief Get a span over the vector of @c PackedLinks for a given element,
743 * @param container The container from which to fetch the variable.
744 * @param index The index of the desired element.
746 * If the container is locked, this will allow fetching only variables
747 * that do not yet exist (in which case they will be marked as decorations)
748 * or variables already marked as decorations.
750 template <class CONT, class ALLOC, class VALLOC>
753 DECORATOR::getPackedLinkDecorSpan (const AuxVectorData& container, size_t index) const
756 auto elt = reinterpret_cast<VElt_t*>
757 (container.getDecorationArray (this->m_auxid)) + index;
758 return PackedLink_span (elt->data(), elt->size());
763 * @brief Get a span over the vectors of @c PackedLinks,
765 * @param container The container from which to fetch the variable.
767 * If the container is locked, this will allow fetching only variables
768 * that do not yet exist (in which case they will be marked as decorations)
769 * or variables already marked as decorations.
771 template <class CONT, class ALLOC, class VALLOC>
774 DECORATOR::getPackedLinkVectorDecorSpan (const AuxVectorData& container) const
775 -> PackedLinkVector_span
777 auto beg = reinterpret_cast<VElt_t*>
778 (container.getDecorationArray (m_auxid));
779 return PackedLinkVector_span (beg, container.size_v());
784 * @brief Get a span over the array of @c DataLinks, as a decoration.
785 * @param container The container from which to fetch the variable.
787 * If the container is locked, this will allow fetching only variables
788 * that do not yet exist (in which case they will be marked as decorations)
789 * or variables already marked as decorations.
791 template <class CONT, class ALLOC, class VALLOC>
794 DECORATOR::getDataLinkDecorSpan (const AuxVectorData& container) const
797 (void)container.getDecorationArray (this->m_linkedAuxid); // check for locking
798 const AuxDataSpanBase* sp = container.getDataSpan (m_linkedAuxid);
799 return DataLink_span (reinterpret_cast<DLink_t*>(sp->beg), sp->size);
804 * @brief Get a span over spans of @c ElementLink proxies,
806 * @param container The container from which to fetch the variable.
808 * The individual proxies may be converted to or assigned from @c ElementLink.
809 * Each element may also be assigned from a range of @c ElementLink,
810 * or converted to a vector of @c ElementLink.
812 * If the container is locked, this will allow fetching only variables
813 * that do not yet exist (in which case they will be marked as decorations)
814 * or variables already marked as decorations.
816 template <class CONT, class ALLOC, class VALLOC>
819 DECORATOR::getDecorationSpan (const AuxVectorData& container) const
822 PackedLinkVector_span pvspan = getPackedLinkVectorDecorSpan(container);
823 AuxVectorData& container_nc ATLAS_THREAD_SAFE = const_cast<AuxVectorData&> (container);
825 ELSpanConverter (container_nc,
827 this->m_linkedAuxid));
832 * @brief Test to see if this variable exists in the store and is writable.
833 * @param e An element of the container in which to test the variable.
835 template <class CONT, class ALLOC, class VALLOC>
836 template <IsConstAuxElement ELT>
839 DECORATOR::isAvailableWritable (const ELT& e) const
841 return e.container() &&
842 e.container()->isAvailableWritableAsDecoration (m_auxid) &&
843 e.container()->isAvailableWritableAsDecoration (m_linkedAuxid);
848 * @brief Test to see if this variable exists in the store and is writable.
849 * @param c The container in which to test the variable.
851 template <class CONT, class ALLOC, class VALLOC>
854 DECORATOR::isAvailableWritable (const AuxVectorData& c) const
856 return c.isAvailableWritableAsDecoration (m_auxid) &&
857 c.isAvailableWritableAsDecoration (m_linkedAuxid);