structStep{intindex;constchar*end;QMap<QIdentifier,QJsonValue/*TODO QVariant for meta() support*/>cachedItems;Step(inti=-1,constchar*e=nullptr):index(i),end(e){}};
enumQValueMode{Invalid=0,Read=1,Write=2};//!< Specifies QTransmogrifier::bind traversal and processing (the design would support other QValueMode like Append or Diff)
enumQValueMode{Invalid=0,Read=1,Write=2};//!< Specifies QTransmogrifier::zap traversal and processing (the design would support other QValueMode like Append or Diff)
structBindGeneric{};
structBindNative{};
...
...
@@ -318,7 +318,7 @@ using QRecord = QRec<QValueStatus>;
staticQValueStatusbind(QValue&&value,T&t){returnt.bind(std::move(value));}// In case of error, define a T::bind(QValue) method or external QTransmogrifier<T>::bind(QValue,T&)
staticQValueStatusbind(QValue&&value,constT&t){returnconst_cast<T&>(t).bind(std::move(value));}// In case of error, define a T::bind(QValue) method or external QTransmogrifier<T>::bind(QValue,const T&)
staticQValueStatusbind(QValue&&value,T&&t){returnt.bind(std::move(value));}// In case of error, define a T::bind(QValue) method or external QTransmogrifier<T>::bind(QValue,T&&)
staticQValueStatuszap(QValue&&value,T&t){returnt.zap(std::move(value));}// In case of error, define a T::bind(QValue) method or external QTransmogrifier<T>::bind(QValue,T&)
staticQValueStatuszap(QValue&&value,constT&t){returnconst_cast<T&>(t).zap(std::move(value));}// In case of error, define a T::bind(QValue) method or external QTransmogrifier<T>::bind(QValue,const T&)
staticQValueStatuszap(QValue&&value,T&&t){returnt.zap(std::move(value));}// In case of error, define a T::bind(QValue) method or external QTransmogrifier<T>::bind(QValue,T&&)
template<>//!< \remark Enumerating types where BindSupport<_> = BindNative with C++11 seems hard, so we just handle the set of default QAbstractValue BindNative types
while((srcVal=srcSeq.unsafeItem())){// using item()'s QVal<QSeq<QValueStatus> would cause an infinite compiler loop to generate corresponding QTransmogrifier<QVal<QSeq<QSeq<...>>,_> functions
while((srcVal=srcSeq.unsafeItem())){// using item()'s QVal<QSequence would cause an infinite compiler loop to generate corresponding QTransmogrifier<QVal<QSeq<QSeq<...>>,_> functions
elseif(src->mode()==Write&&dst->mode()==Read){returnbind(std::move(dst),std::move(src));}// To return reader's QValueStatus instead of writer's QValueStatus since it should contain more information (mismatches, etc.)
elseif(src->mode()==Write&&dst->mode()==Read){returnzap(std::move(dst),std::move(src));}// To return reader's QValueStatus instead of writer's QValueStatus since it should contain more information (mismatches, etc.)
else{Q_ASSERT_X(!src||!dst,Q_FUNC_INFO,"Unsupported src->mode() and dst->mode()");returnsrc.null();}