@@ -136,6 +136,7 @@ class ByRef
136136 {}
137137
138138 const T& Get () const {return *m_val;}
139+ T& Get () {return *const_cast <T*>(m_val);}
139140private:
140141 const T* m_val;
141142};
@@ -149,6 +150,7 @@ class ByVal
149150 {}
150151
151152 const T& Get () const {return m_val;}
153+ T& Get () {return m_val;}
152154private:
153155 T m_val;
154156};
@@ -257,7 +259,7 @@ InternalValueList ListAdapter::ToValueList() const
257259 return result;
258260}
259261
260- template <template <typename > class Holder >
262+ template <template <typename > class Holder , bool CanModify >
261263class InternalValueMapAdapter : public IMapAccessor
262264{
263265public:
@@ -298,6 +300,16 @@ class InternalValueMapAdapter : public IMapAccessor
298300
299301 return result;
300302 }
303+
304+ bool SetValue (std::string name, const InternalValue& val) override
305+ {
306+ if (CanModify)
307+ {
308+ m_values.Get ()[name] = val;
309+ return true ;
310+ }
311+ return false ;
312+ }
301313private:
302314 Holder<InternalValueMap> m_values;
303315};
@@ -354,6 +366,7 @@ class GenericMapAdapter : public IMapAccessor
354366 return m_values.Get ().GetKeys ();
355367 }
356368
369+
357370private:
358371 Holder<GenericMap> m_values;
359372};
@@ -407,32 +420,32 @@ class ValuesMapAdapter : public IMapAccessor
407420
408421MapAdapter MapAdapter::CreateAdapter (InternalValueMap&& values)
409422{
410- return MapAdapter ([accessor = InternalValueMapAdapter<ByVal>(std::move (values))]() {return &accessor;});
423+ return MapAdapter ([accessor = InternalValueMapAdapter<ByVal, true >(std::move (values))]() mutable {return &accessor;});
411424}
412425
413426MapAdapter MapAdapter::CreateAdapter (const InternalValueMap* values)
414427{
415- return MapAdapter ([accessor = InternalValueMapAdapter<ByRef>(*values)]() {return &accessor;});
428+ return MapAdapter ([accessor = InternalValueMapAdapter<ByRef, false >(*values)]() mutable {return &accessor;});
416429}
417430
418431MapAdapter MapAdapter::CreateAdapter (const GenericMap& values)
419432{
420- return MapAdapter ([accessor = GenericMapAdapter<ByRef>(values)]() {return &accessor;});
433+ return MapAdapter ([accessor = GenericMapAdapter<ByRef>(values)]() mutable {return &accessor;});
421434}
422435
423436MapAdapter MapAdapter::CreateAdapter (GenericMap&& values)
424437{
425- return MapAdapter ([accessor = GenericMapAdapter<ByVal>(std::move (values))]() {return &accessor;});
438+ return MapAdapter ([accessor = GenericMapAdapter<ByVal>(std::move (values))]() mutable {return &accessor;});
426439}
427440
428441MapAdapter MapAdapter::CreateAdapter (const ValuesMap& values)
429442{
430- return MapAdapter ([accessor = ValuesMapAdapter<ByRef>(values)]() {return &accessor;});
443+ return MapAdapter ([accessor = ValuesMapAdapter<ByRef>(values)]() mutable {return &accessor;});
431444}
432445
433446MapAdapter MapAdapter::CreateAdapter (ValuesMap&& values)
434447{
435- return MapAdapter ([accessor = ValuesMapAdapter<ByVal>(std::move (values))]() {return &accessor;});
448+ return MapAdapter ([accessor = ValuesMapAdapter<ByVal>(std::move (values))]() mutable {return &accessor;});
436449}
437450
438451} // jinja2
0 commit comments