| Index: mojo/public/cpp/bindings/type_converter.h
|
| diff --git a/mojo/public/cpp/bindings/type_converter.h b/mojo/public/cpp/bindings/type_converter.h
|
| index 83597747c55d2887b8ca1531a328ab448fd02730..0ac5f6d47603042826bcfb2e352b5323cc071e90 100644
|
| --- a/mojo/public/cpp/bindings/type_converter.h
|
| +++ b/mojo/public/cpp/bindings/type_converter.h
|
| @@ -18,12 +18,8 @@ namespace mojo {
|
| // template <>
|
| // class TypeConverter<T, U> {
|
| // public:
|
| -// static T ConvertFrom(const U& input, Buffer* buf);
|
| +// static T ConvertFrom(const U& input);
|
| // static U ConvertTo(const T& input);
|
| -//
|
| -// // Maybe (mutually exclusive):
|
| -// MOJO_ALLOW_IMPLICIT_TYPE_CONVERSION();
|
| -// MOJO_INHERIT_IMPLICIT_TYPE_CONVERSION(X, Y);
|
| // };
|
| // }
|
| //
|
| @@ -43,83 +39,44 @@ namespace mojo {
|
| //
|
| // namespace mojo {
|
| // template <>
|
| -// class TypeConverter<geometry::Point, gfx::Point> {
|
| +// class TypeConverter<geometry::PointPtr, gfx::Point> {
|
| // public:
|
| -// static geometry::Point ConvertFrom(const gfx::Point& input,
|
| -// Buffer* buf) {
|
| -// geometry::Point::Builder builder(buf);
|
| -// builder.set_x(input.x());
|
| -// builder.set_y(input.y());
|
| -// return builder.Finish();
|
| +// static geometry::PointPtr ConvertFrom(const gfx::Point& input) {
|
| +// geometry::PointPtr result;
|
| +// result->x = input.x();
|
| +// result->y = input.y();
|
| +// return result.Pass();
|
| // }
|
| -// static gfx::Point ConvertTo(const geometry::Point& input) {
|
| -// return gfx::Point(input.x(), input.y());
|
| +// static gfx::Point ConvertTo(const geometry::PointPtr& input) {
|
| +// return input ? gfx::Point(input->x, input->y) : gfx::Point();
|
| // }
|
| // };
|
| // }
|
| //
|
| // With the above TypeConverter defined, it is possible to write code like this:
|
| //
|
| -// void AcceptPoint(const geometry::Point& input) {
|
| +// void AcceptPoint(const geometry::PointPtr& input) {
|
| // // With an explicit cast using the .To<> method.
|
| // gfx::Point pt = input.To<gfx::Point>();
|
| //
|
| -// mojo::AllocationScope scope;
|
| // // With an explicit cast using the static From() method.
|
| -// geometry::Point output = geometry::Point::From(pt);
|
| -// }
|
| -//
|
| -// More "direct" conversions can be enabled by adding the following macro to the
|
| -// TypeConverter specialization:
|
| -// MOJO_ALLOW_IMPLICIT_TYPE_CONVERSION();
|
| -//
|
| -// To be exact, this macro enables:
|
| -// - converting constructor:
|
| -// T(const U& u, mojo::Buffer* buf = mojo::Buffer::current());
|
| -// - assignment operator:
|
| -// T& operator=(const U& u);
|
| -// - conversion operator:
|
| -// operator U() const;
|
| -//
|
| -// If the macro is added to TypeConverter<geometry::Point, gfx::Point>, for
|
| -// example, it is possible to write code like this:
|
| -//
|
| -// void SomeFunction(const gfx::Point& pt);
|
| -//
|
| -// void AcceptPoint(const geometry::Point& input) {
|
| -// // Using the conversion operator.
|
| -// SomeFunction(input);
|
| -//
|
| -// mojo::AllocationScope scope;
|
| -// // Using the converting constructor.
|
| -// geometry::Point output_1(pt);
|
| -//
|
| -// geometry::Point output_2;
|
| -// // Using the assignment operator.
|
| -// output_2 = pt;
|
| +// geometry::PointPtr output = geometry::Point::From(pt);
|
| // }
|
| //
|
| -// There is another macro to inherit implicit conversion settings from another
|
| -// TypeConverter:
|
| -// MOJO_INHERIT_IMPLICIT_TYPE_CONVERSION(X, Y);
|
| -//
|
| -// It allows implicit conversions if and only if TypeConverter<X, Y> allows
|
| -// implicit conversions. This is useful when defining TypeConverter for
|
| -// container types.
|
| -//
|
| -// Although these macros are convenient, they make conversions less obvious.
|
| -// Users may do conversions excessively without paying attention to the cost. So
|
| -// please use them wisely.
|
| template <typename T, typename U> class TypeConverter;
|
|
|
| -} // namespace mojo
|
| -
|
| -#define MOJO_ALLOW_IMPLICIT_TYPE_CONVERSION() \
|
| - static void AssertAllowImplicitTypeConversion() {}
|
| -
|
| -#define MOJO_INHERIT_IMPLICIT_TYPE_CONVERSION(T, U) \
|
| - static void AssertAllowImplicitTypeConversion() { \
|
| - TypeConverter<T, U>::AssertAllowImplicitTypeConversion(); \
|
| +// The following specialization is useful when you are converting between
|
| +// Array<POD> and std::vector<POD>.
|
| +template <typename T> class TypeConverter<T, T> {
|
| + public:
|
| + static T ConvertFrom(const T& obj) {
|
| + return obj;
|
| + }
|
| + static T ConvertTo(const T& obj) {
|
| + return obj;
|
| }
|
| +};
|
| +
|
| +} // namespace mojo
|
|
|
| #endif // MOJO_PUBLIC_CPP_BINDINGS_TYPE_CONVERTER_H_
|
|
|