Index: mojo/public/cpp/bindings/lib/serialization_util.h |
diff --git a/mojo/public/cpp/bindings/lib/serialization_util.h b/mojo/public/cpp/bindings/lib/serialization_util.h |
index 9fc08b85228b1d2b40bd0c7f9a294ec4237a504b..a93781753c9582c0230f742a7578b9f49293ab1d 100644 |
--- a/mojo/public/cpp/bindings/lib/serialization_util.h |
+++ b/mojo/public/cpp/bindings/lib/serialization_util.h |
@@ -228,6 +228,37 @@ ReturnType CallWithContext(ReturnType (*f)(ParamType), |
} |
template <typename T, typename MaybeConstUserType> |
+struct HasGetBeginMethod { |
+ template <typename U> |
+ static char Test(decltype(U::GetBegin(std::declval<MaybeConstUserType&>()))*); |
+ template <typename U> |
+ static int Test(...); |
+ static const bool value = sizeof(Test<T>(0)) == sizeof(char); |
+ |
+ private: |
+ EnsureTypeIsComplete<T> check_t_; |
+}; |
+ |
+template < |
+ typename Traits, |
+ typename MaybeConstUserType, |
+ typename std::enable_if< |
+ HasGetBeginMethod<Traits, MaybeConstUserType>::value>::type* = nullptr> |
+decltype(Traits::GetBegin(std::declval<MaybeConstUserType&>())) |
+CallGetBeginIfExists(MaybeConstUserType& input) { |
+ return Traits::GetBegin(input); |
+} |
+ |
+template < |
+ typename Traits, |
+ typename MaybeConstUserType, |
+ typename std::enable_if< |
+ !HasGetBeginMethod<Traits, MaybeConstUserType>::value>::type* = nullptr> |
+size_t CallGetBeginIfExists(MaybeConstUserType& input) { |
+ return 0; |
+} |
+ |
+template <typename T, typename MaybeConstUserType> |
struct HasGetDataMethod { |
template <typename U> |
static char Test(decltype(U::GetData(std::declval<MaybeConstUserType&>()))*); |