@@ -539,12 +539,14 @@ namespace classdesc
539539 is_class<T>,
540540 Not<is_container<T>>,
541541 Not<is_smart_ptr<T>>,
542- Not<is_string<T>>
542+ Not<is_string<T>>,
543+ Not<is_excluded<T>>
543544 > {};
544545
545546
546547 template <class T >
547- void RESTProcessp (RESTProcess_t& repo, const string& d, Exclude<T>& a)
548+ typename enable_if<is_excluded<T>,void >::T
549+ RESTProcessp (RESTProcess_t& repo, const string& d, T& a)
548550 {}
549551
550552 template <class T >
@@ -658,7 +660,8 @@ namespace classdesc
658660 erase(U& o,typename U::iterator i) {o.erase (i);}
659661
660662 template <class U >
661- void erase (U& o,typename U::const_iterator i) {}
663+ typename enable_if<Not<is_same<typename U::iterator,typename U::const_iterator>>,void >::T
664+ erase (U& o,typename U::const_iterator i) {}
662665
663666 template <class U >
664667 typename enable_if<Not<has_member_erase<U,typename U::iterator (U::*)(typename U::const_iterator)>>,void>::T
@@ -714,6 +717,12 @@ namespace classdesc
714717 RESTProcessValueSequence (Args&&... args): RESTProcessSequence<T>(actual), actual(std::forward<Args>(args)...) {}
715718 };
716719
720+ template <class T , int R> RPPtr copyMultiArrayIterator (MultiArray<T,R>& x);
721+ template <class T , int R> RPPtr copyMultiArrayIterator (const MultiArray<T,R>& x);
722+
723+ template <class T > RPPtr copyMultiArrayIterator (T& x)
724+ {return std::make_shared<RESTProcessObject<T>>(x);}
725+
717726 template <class T > struct RESTProcessMultiArray : public RESTProcessBase
718727 {
719728 T actual;
@@ -732,7 +741,7 @@ namespace classdesc
732741 RPPtr getElem (const REST_PROCESS_BUFFER& index) override {
733742 size_t idx; index>>idx;
734743 if (idx<actual.size ())
735- return std::make_shared<RESTProcessMultiArray< typename T::value_type>> (actual[idx]);
744+ return copyMultiArrayIterator (actual[idx]);
736745 return std::make_shared<RESTProcessVoid>();
737746 }
738747 RPPtr setElem (const REST_PROCESS_BUFFER& index, const REST_PROCESS_BUFFER& value) override {
@@ -741,13 +750,18 @@ namespace classdesc
741750 {
742751 auto elem=actual[idx];
743752 convert (elem,value);
744- return std::make_shared<RESTProcessMultiArray< typename T::value_type>> (elem);
753+ return copyMultiArrayIterator (elem);
745754 }
746755 return std::make_shared<RESTProcessVoid>();
747756 }
748757 size_t size () const override {return actual.size ();}
749758 };
750759
760+ template <class T , int R> RPPtr copyMultiArrayIterator (MultiArray<T,R>& x)
761+ {return std::make_shared<RESTProcessMultiArray<MultiArray<T,R>>>(x);}
762+ template <class T , int R> RPPtr copyMultiArrayIterator (const MultiArray<T,R>& x)
763+ {return std::make_shared<RESTProcessMultiArray<MultiArray<T,R>>>(x);}
764+
751765 template <class T > struct RESTProcessMultiArray <classdesc::MultiArray<T,1 >>:
752766 public RESTProcessSequence<classdesc::MultiArray<T,1 >>
753767 {
0 commit comments