73 : _data(bonded._data),
74 _schema(bonded._schema),
80 bonded(bonded&& bonded) BOND_NOEXCEPT_IF(
81 BOND_NOEXCEPT_EXPR(detail::move_data<Reader>(bonded._data))
82 && std::is_nothrow_move_constructible<RuntimeSchema>::value)
83 : _data(detail::move_data<Reader>(bonded._data)),
84 _schema(
std::move(bonded._schema)),
85 _skip(
std::move(bonded._skip)),
86 _base(
std::move(bonded._base))
94 template <
typename U,
typename ReaderT>
96 bonded(
const bonded<U, ReaderT>& bonded)
97 : _data(bonded._data),
98 _schema(bonded._schema),
102 BOOST_STATIC_ASSERT((std::is_base_of<U, T>::value || std::is_base_of<T, U>::value));
115 template <
typename U>
117 bonded(
const U& value)
126 bonded(Reader data,
bool base =
false)
134 template <
typename ReaderT>
136 bonded(
const bonded<void, ReaderT>& bonded)
137 : _data(bonded._data),
138 _schema(bonded._schema),
148 detail::Skip(_data, *
this, std::nothrow);
153 template <
typename U,
typename ReaderT>
154 operator bonded<U, ReaderT>()
const
156 BOOST_STATIC_ASSERT((std::is_base_of<U, T>::value));
157 return bonded<U, ReaderT>(*
this);
161 template <
typename ReaderT>
162 operator bonded<void, ReaderT>()
const
164 return bonded<void, ReaderT>(*
this);
168 template <
typename Protocols = BuiltInProtocols,
typename Writer>
171 Apply<Protocols>(SerializeTo<Protocols>(output), *
this);
175 template <
typename X = T,
typename Protocols = BuiltInProtocols>
179 Apply<Protocols>(To<X, Protocols>(tmp), *
this);
184 template <
typename Protocols = BuiltInProtocols,
typename X>
187 Apply<Protocols>(To<X, Protocols>(var), *
this);
191 template <
typename Protocols = BuiltInProtocols,
typename U>
192 typename boost::enable_if<is_marshaled_bonded<T, Reader, U> >::type
195 _SelectProtocolAndApply<Protocols>(boost::ref(var));
199 template <
typename Protocols = BuiltInProtocols,
typename U>
200 typename boost::disable_if<is_marshaled_bonded<T, Reader, U> >::type
208 template <
typename Protocols = BuiltInProtocols,
typename X>
209 void Merge(
const X& var)
211 detail::Merge<Protocols>(var, _data);
219 detail::Skip(_data, *
this);
229 return _data == rhs._data;
233 template <
typename Protocols,
typename Transform,
typename U,
typename ReaderT>
234 friend typename boost::disable_if<detail::need_double_pass<Transform>,
bool>::type
inline
237 template <
typename Protocols,
typename Transform,
typename U,
typename ReaderT>
238 friend typename boost::enable_if<detail::need_double_pass<Transform>,
bool>::type
inline
241 template <
typename U,
typename ReaderT>
246 template <
typename Protocols,
typename Transform>
247 typename boost::enable_if<is_marshaled_bonded<T, Reader, Transform>,
bool>::type
248 _Apply(
const Transform& transform)
const
250 return _SelectProtocolAndApply<Protocols>(transform);
254 template <
typename Protocols,
typename Transform>
255 typename boost::disable_if<is_marshaled_bonded<T, Reader, Transform>,
bool>::type
256 _Apply(
const Transform& transform)
const
259 return detail::Parse<T, Protocols>(transform, _data,
typename schema_for_passthrough<T>::type(), _schema.get(), _base);
263 template <
typename Protocols,
typename Transform>
264 bool _SelectProtocolAndApply(
const Transform& transform)
const
267 auto input = CreateInputBuffer(_data.GetBuffer(), detail::ReadBlob(_data));
268 return SelectProtocolAndApply<typename remove_bonded<T>::type, Protocols>(input, transform).second;
272 RuntimeSchema _schema;