diff options
author | darin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-29 20:12:16 +0000 |
---|---|---|
committer | darin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-29 20:12:16 +0000 |
commit | 80b94a3918114dbc4adf5c73fe3fcfa5adc6720a (patch) | |
tree | a2ee400ae9b85cb060cc02b16d2fbf94c8f6078d /mojo | |
parent | 7c6d8f488483f3efc0784fb3d87ec799fbcc2a39 (diff) | |
download | chromium_src-80b94a3918114dbc4adf5c73fe3fcfa5adc6720a.zip chromium_src-80b94a3918114dbc4adf5c73fe3fcfa5adc6720a.tar.gz chromium_src-80b94a3918114dbc4adf5c73fe3fcfa5adc6720a.tar.bz2 |
No more d_ members. Use initial capital letter to denote private fields.
Pacify clang by not inlining some methods.
R=davemoore@google.com, davemoore@chromium.org
Review URL: https://codereview.chromium.org/50123003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@231625 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'mojo')
14 files changed, 422 insertions, 225 deletions
diff --git a/mojo/mojo.gyp b/mojo/mojo.gyp index 7546219..1d8b54a 100644 --- a/mojo/mojo.gyp +++ b/mojo/mojo.gyp @@ -230,8 +230,17 @@ 'mojo_bindings', ], 'sources': [ + 'public/bindings/sample/generated/sample_bar.cc', + 'public/bindings/sample/generated/sample_bar.h', + 'public/bindings/sample/generated/sample_bar_serialization.cc', + 'public/bindings/sample/generated/sample_bar_serialization.h', + 'public/bindings/sample/generated/sample_foo.cc', + 'public/bindings/sample/generated/sample_foo.h', + 'public/bindings/sample/generated/sample_foo_serialization.cc', + 'public/bindings/sample/generated/sample_foo_serialization.h', 'public/bindings/sample/generated/sample_service.h', 'public/bindings/sample/generated/sample_service_proxy.cc', + 'public/bindings/sample/generated/sample_service_serialization.cc', 'public/bindings/sample/generated/sample_service_serialization.h', 'public/bindings/sample/generated/sample_service_stub.cc', 'public/bindings/sample/sample_test.cc', diff --git a/mojo/public/bindings/lib/TODO b/mojo/public/bindings/lib/TODO index 7f3dc13..e81cc11 100644 --- a/mojo/public/bindings/lib/TODO +++ b/mojo/public/bindings/lib/TODO @@ -7,4 +7,3 @@ TODOs: - Add compile-time asserts to verify object packing and padding. - Pack boolean arrays? - Investigate making arrays of objects not be arrays of pointers. - - Consider getting rid of Data structs (i.e., d_ member). diff --git a/mojo/public/bindings/sample/generated/sample_bar.cc b/mojo/public/bindings/sample/generated/sample_bar.cc new file mode 100644 index 0000000..e4f2daf --- /dev/null +++ b/mojo/public/bindings/sample/generated/sample_bar.cc @@ -0,0 +1,19 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "mojo/public/bindings/sample/generated/sample_bar.h" + +namespace sample { + +// static +Bar* Bar::New(mojo::Buffer* buf) { + return new (buf->Allocate(sizeof(Bar))) Bar(); +} + +Bar::Bar() { + _header_.num_bytes = sizeof(*this); + _header_.num_fields = 3; +} + +} // namespace sample diff --git a/mojo/public/bindings/sample/generated/sample_bar.h b/mojo/public/bindings/sample/generated/sample_bar.h new file mode 100644 index 0000000..d6ca189 --- /dev/null +++ b/mojo/public/bindings/sample/generated/sample_bar.h @@ -0,0 +1,44 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef MOJO_GENERATED_BINDINGS_SAMPLE_BAR_H_ +#define MOJO_GENERATED_BINDINGS_SAMPLE_BAR_H_ + +#include "mojo/public/bindings/lib/bindings.h" + +namespace sample { + +#pragma pack(push, 1) + +class Bar { + public: + static Bar* New(mojo::Buffer* buf); + + void set_alpha(uint8_t alpha) { alpha_ = alpha; } + void set_beta(uint8_t beta) { beta_ = beta; } + void set_gamma(uint8_t gamma) { gamma_ = gamma; } + + uint8_t alpha() const { return alpha_; } + uint8_t beta() const { return beta_; } + uint8_t gamma() const { return gamma_; } + + private: + friend class mojo::internal::ObjectTraits<Bar>; + + Bar(); + ~Bar(); // NOT IMPLEMENTED + + mojo::internal::StructHeader _header_; + uint8_t alpha_; + uint8_t beta_; + uint8_t gamma_; + uint8_t _pad0_[5]; +}; +MOJO_COMPILE_ASSERT(sizeof(Bar) == 16, bad_sizeof_Bar); + +#pragma pack(pop) + +} // namespace sample + +#endif // MOJO_GENERATED_BINDINGS_SAMPLE_BAR_H_ diff --git a/mojo/public/bindings/sample/generated/sample_bar_serialization.cc b/mojo/public/bindings/sample/generated/sample_bar_serialization.cc new file mode 100644 index 0000000..ec02505 --- /dev/null +++ b/mojo/public/bindings/sample/generated/sample_bar_serialization.cc @@ -0,0 +1,40 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "mojo/public/bindings/sample/generated/sample_bar_serialization.h" + +#include <string.h> + +#include "mojo/public/bindings/sample/generated/sample_bar.h" + +namespace mojo { +namespace internal { + +// static +size_t ObjectTraits<sample::Bar>::ComputeSizeOf( + const sample::Bar* bar) { + return sizeof(*bar); +} + +// static +sample::Bar* ObjectTraits<sample::Bar>::Clone( + const sample::Bar* bar, Buffer* buf) { + sample::Bar* clone = sample::Bar::New(buf); + memcpy(clone, bar, sizeof(*bar)); + return clone; +} + +// static +void ObjectTraits<sample::Bar>::EncodePointersAndHandles( + sample::Bar* bar, std::vector<mojo::Handle>* handles) { +} + +// static +bool ObjectTraits<sample::Bar>::DecodePointersAndHandles( + sample::Bar* bar, const mojo::Message& message) { + return true; +} + +} // namespace internal +} // namespace mojo diff --git a/mojo/public/bindings/sample/generated/sample_bar_serialization.h b/mojo/public/bindings/sample/generated/sample_bar_serialization.h new file mode 100644 index 0000000..8947e75 --- /dev/null +++ b/mojo/public/bindings/sample/generated/sample_bar_serialization.h @@ -0,0 +1,31 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef MOJO_GENERATED_BINDINGS_SAMPLE_BAR_SERIALIZATION_H_ +#define MOJO_GENERATED_BINDINGS_SAMPLE_BAR_SERIALIZATION_H_ + +#include "mojo/public/bindings/lib/bindings_serialization.h" + +namespace sample { +class Bar; +} + +namespace mojo { +namespace internal { + +template <> +class ObjectTraits<sample::Bar> { + public: + static size_t ComputeSizeOf(const sample::Bar* bar); + static sample::Bar* Clone(const sample::Bar* bar, Buffer* buf); + static void EncodePointersAndHandles(sample::Bar* bar, + std::vector<mojo::Handle>* handles); + static bool DecodePointersAndHandles(sample::Bar* bar, + const mojo::Message& message); +}; + +} // namespace internal +} // namespace mojo + +#endif // MOJO_GENERATED_BINDINGS_SAMPLE_BAR_SERIALIZATION_H_ diff --git a/mojo/public/bindings/sample/generated/sample_foo.cc b/mojo/public/bindings/sample/generated/sample_foo.cc new file mode 100644 index 0000000..d5d99e4 --- /dev/null +++ b/mojo/public/bindings/sample/generated/sample_foo.cc @@ -0,0 +1,19 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "mojo/public/bindings/sample/generated/sample_foo.h" + +namespace sample { + +// static +Foo* Foo::New(mojo::Buffer* buf) { + return new (buf->Allocate(sizeof(Foo))) Foo(); +} + +Foo::Foo() { + _header_.num_bytes = sizeof(*this); + _header_.num_fields = 10; +} + +} // namespace sample diff --git a/mojo/public/bindings/sample/generated/sample_foo.h b/mojo/public/bindings/sample/generated/sample_foo.h new file mode 100644 index 0000000..396f209 --- /dev/null +++ b/mojo/public/bindings/sample/generated/sample_foo.h @@ -0,0 +1,81 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef MOJO_GENERATED_BINDINGS_SAMPLE_FOO_H_ +#define MOJO_GENERATED_BINDINGS_SAMPLE_FOO_H_ + +#include "mojo/public/bindings/lib/bindings.h" + +namespace sample { +class Bar; + +#pragma pack(push, 1) + +class Foo { + public: + static Foo* New(mojo::Buffer* buf); + + void set_x(int32_t x) { x_ = x; } + void set_y(int32_t y) { y_ = y; } + void set_a(bool a) { a_ = a; } + void set_b(bool b) { b_ = b; } + void set_c(bool c) { c_ = c; } + void set_bar(Bar* bar) { bar_.ptr = bar; } + void set_data(mojo::Array<uint8_t>* data) { data_.ptr = data; } + void set_extra_bars(mojo::Array<Bar*>* extra_bars) { + extra_bars_.ptr = extra_bars; + } + void set_name(mojo::String* name) { + name_.ptr = name; + } + void set_files(mojo::Array<mojo::Handle>* files) { + files_.ptr = files; + } + + int32_t x() const { return x_; } + int32_t y() const { return y_; } + bool a() const { return a_; } + bool b() const { return b_; } + bool c() const { return c_; } + const Bar* bar() const { return bar_.ptr; } + const mojo::Array<uint8_t>* data() const { return data_.ptr; } + const mojo::Array<Bar*>* extra_bars() const { + // NOTE: extra_bars is an optional field! + return _header_.num_fields >= 8 ? extra_bars_.ptr : NULL; + } + const mojo::String* name() const { + // NOTE: name is also an optional field! + return _header_.num_fields >= 9 ? name_.ptr : NULL; + } + const mojo::Array<mojo::Handle>* files() const { + // NOTE: files is also an optional field! + return _header_.num_fields >= 10 ? files_.ptr : NULL; + } + + private: + friend class mojo::internal::ObjectTraits<Foo>; + + Foo(); + ~Foo(); // NOT IMPLEMENTED + + mojo::internal::StructHeader _header_; + int32_t x_; + int32_t y_; + uint8_t a_ : 1; + uint8_t b_ : 1; + uint8_t c_ : 1; + uint8_t _pad0_[7]; + mojo::internal::StructPointer<Bar> bar_; + mojo::internal::ArrayPointer<uint8_t> data_; + mojo::internal::ArrayPointer<Bar*> extra_bars_; + mojo::internal::StringPointer name_; + mojo::internal::ArrayPointer<mojo::Handle> files_; +}; +MOJO_COMPILE_ASSERT(sizeof(Foo) == 64, bad_sizeof_Foo); + +#pragma pack(pop) + +} // namespace sample + +#endif // MOJO_GENERATED_BINDINGS_SAMPLE_FOO_H_ diff --git a/mojo/public/bindings/sample/generated/sample_foo_serialization.cc b/mojo/public/bindings/sample/generated/sample_foo_serialization.cc new file mode 100644 index 0000000..e79ad24 --- /dev/null +++ b/mojo/public/bindings/sample/generated/sample_foo_serialization.cc @@ -0,0 +1,76 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "mojo/public/bindings/sample/generated/sample_foo_serialization.h" + +#include <string.h> + +#include "mojo/public/bindings/sample/generated/sample_bar_serialization.h" +#include "mojo/public/bindings/sample/generated/sample_foo.h" + +namespace mojo { +namespace internal { + +// static +size_t ObjectTraits<sample::Foo>::ComputeSizeOf( + const sample::Foo* foo) { + return sizeof(*foo) + + mojo::internal::ComputeSizeOf(foo->bar()) + + mojo::internal::ComputeSizeOf(foo->data()) + + mojo::internal::ComputeSizeOf(foo->extra_bars()) + + mojo::internal::ComputeSizeOf(foo->name()) + + mojo::internal::ComputeSizeOf(foo->files()); +} + +// static +sample::Foo* ObjectTraits<sample::Foo>::Clone( + const sample::Foo* foo, Buffer* buf) { + sample::Foo* clone = sample::Foo::New(buf); + memcpy(clone, foo, sizeof(*foo)); + + clone->set_bar(mojo::internal::Clone(foo->bar(), buf)); + clone->set_data(mojo::internal::Clone(foo->data(), buf)); + clone->set_extra_bars(mojo::internal::Clone(foo->extra_bars(), buf)); + clone->set_name(mojo::internal::Clone(foo->name(), buf)); + clone->set_files(mojo::internal::Clone(foo->files(), buf)); + + return clone; +} + +// static +void ObjectTraits<sample::Foo>::EncodePointersAndHandles( + sample::Foo* foo, std::vector<mojo::Handle>* handles) { + Encode(&foo->bar_, handles); + Encode(&foo->data_, handles); + Encode(&foo->extra_bars_, handles); + Encode(&foo->name_, handles); + Encode(&foo->files_, handles); +} + +// static +bool ObjectTraits<sample::Foo>::DecodePointersAndHandles( + sample::Foo* foo, const mojo::Message& message) { + if (!Decode(&foo->bar_, message)) + return false; + if (!Decode(&foo->data_, message)) + return false; + if (foo->_header_.num_fields >= 8) { + if (!Decode(&foo->extra_bars_, message)) + return false; + } + if (foo->_header_.num_fields >= 9) { + if (!Decode(&foo->name_, message)) + return false; + } + if (foo->_header_.num_fields >= 10) { + if (!Decode(&foo->files_, message)) + return false; + } + + // TODO: validate + return true; +} + +} // namespace internal +} // namespace mojo diff --git a/mojo/public/bindings/sample/generated/sample_foo_serialization.h b/mojo/public/bindings/sample/generated/sample_foo_serialization.h new file mode 100644 index 0000000..58b7714 --- /dev/null +++ b/mojo/public/bindings/sample/generated/sample_foo_serialization.h @@ -0,0 +1,31 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef MOJO_GENERATED_BINDINGS_SAMPLE_FOO_SERIALIZATION_H_ +#define MOJO_GENERATED_BINDINGS_SAMPLE_FOO_SERIALIZATION_H_ + +#include "mojo/public/bindings/lib/bindings_serialization.h" + +namespace sample { +class Foo; +} + +namespace mojo { +namespace internal { + +template <> +class ObjectTraits<sample::Foo> { + public: + static size_t ComputeSizeOf(const sample::Foo* foo); + static sample::Foo* Clone(const sample::Foo* foo, Buffer* buf); + static void EncodePointersAndHandles(sample::Foo* foo, + std::vector<mojo::Handle>* handles); + static bool DecodePointersAndHandles(sample::Foo* foo, + const mojo::Message& message); +}; + +} // namespace internal +} // namespace mojo + +#endif // MOJO_GENERATED_BINDINGS_SAMPLE_FOO_SERIALIZATION_H_ diff --git a/mojo/public/bindings/sample/generated/sample_service.h b/mojo/public/bindings/sample/generated/sample_service.h index bdc0831..0fe8466 100644 --- a/mojo/public/bindings/sample/generated/sample_service.h +++ b/mojo/public/bindings/sample/generated/sample_service.h @@ -8,112 +8,7 @@ #include "mojo/public/bindings/lib/bindings.h" namespace sample { - -#pragma pack(push, 1) - -class Bar { - public: - static Bar* New(mojo::Buffer* buf) { - return new (buf->Allocate(sizeof(Bar))) Bar(); - } - - void set_alpha(uint8_t alpha) { d_.alpha = alpha; } - void set_beta(uint8_t beta) { d_.beta = beta; } - void set_gamma(uint8_t gamma) { d_.gamma = gamma; } - - uint8_t alpha() const { return d_.alpha; } - uint8_t beta() const { return d_.beta; } - uint8_t gamma() const { return d_.gamma; } - - private: - friend class mojo::internal::ObjectTraits<Bar>; - - Bar() { - header_.num_bytes = sizeof(*this); - header_.num_fields = 3; - } - ~Bar(); // NOT IMPLEMENTED - - mojo::internal::StructHeader header_; - struct Data { - uint8_t alpha; - uint8_t beta; - uint8_t gamma; - uint8_t padding0_[5]; - } d_; -}; -MOJO_COMPILE_ASSERT(sizeof(Bar) == 16, bad_sizeof_Bar); - -class Foo { - public: - static Foo* New(mojo::Buffer* buf) { - return new (buf->Allocate(sizeof(Foo))) Foo(); - } - - void set_x(int32_t x) { d_.x = x; } - void set_y(int32_t y) { d_.y = y; } - void set_a(bool a) { d_.a = a; } - void set_b(bool b) { d_.b = b; } - void set_c(bool c) { d_.c = c; } - void set_bar(Bar* bar) { d_.bar.ptr = bar; } - void set_data(mojo::Array<uint8_t>* data) { d_.data.ptr = data; } - void set_extra_bars(mojo::Array<Bar*>* extra_bars) { - d_.extra_bars.ptr = extra_bars; - } - void set_name(mojo::String* name) { - d_.name.ptr = name; - } - void set_files(mojo::Array<mojo::Handle>* files) { - d_.files.ptr = files; - } - - int32_t x() const { return d_.x; } - int32_t y() const { return d_.y; } - bool a() const { return d_.a; } - bool b() const { return d_.b; } - bool c() const { return d_.c; } - const Bar* bar() const { return d_.bar.ptr; } - const mojo::Array<uint8_t>* data() const { return d_.data.ptr; } - const mojo::Array<Bar*>* extra_bars() const { - // NOTE: extra_bars is an optional field! - return header_.num_fields >= 8 ? d_.extra_bars.ptr : NULL; - } - const mojo::String* name() const { - // NOTE: name is also an optional field! - return header_.num_fields >= 9 ? d_.name.ptr : NULL; - } - const mojo::Array<mojo::Handle>* files() const { - // NOTE: files is also an optional field! - return header_.num_fields >= 10 ? d_.files.ptr : NULL; - } - - private: - friend class mojo::internal::ObjectTraits<Foo>; - - Foo() { - header_.num_bytes = sizeof(*this); - header_.num_fields = 10; - } - ~Foo(); // NOT IMPLEMENTED - - mojo::internal::StructHeader header_; - struct Data { - int32_t x; - int32_t y; - uint8_t a : 1; - uint8_t b : 1; - uint8_t c : 1; - uint8_t padding0_[7]; - mojo::internal::StructPointer<Bar> bar; - mojo::internal::ArrayPointer<uint8_t> data; - mojo::internal::ArrayPointer<Bar*> extra_bars; - mojo::internal::StringPointer name; - mojo::internal::ArrayPointer<mojo::Handle> files; - } d_; -}; -MOJO_COMPILE_ASSERT(sizeof(Foo) == 64, bad_sizeof_Foo); - -#pragma pack(pop) +class Foo; class Service { public: diff --git a/mojo/public/bindings/sample/generated/sample_service_serialization.cc b/mojo/public/bindings/sample/generated/sample_service_serialization.cc new file mode 100644 index 0000000..899f746 --- /dev/null +++ b/mojo/public/bindings/sample/generated/sample_service_serialization.cc @@ -0,0 +1,53 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "mojo/public/bindings/sample/generated/sample_service_serialization.h" + +namespace sample { +namespace internal { + +// static +Service_Frobinate_Params* Service_Frobinate_Params::New(mojo::Buffer* buf) { + return new (buf->Allocate(sizeof(Service_Frobinate_Params))) + Service_Frobinate_Params(); +} + +Service_Frobinate_Params::Service_Frobinate_Params() { + _header_.num_bytes = sizeof(*this); + _header_.num_fields = 3; +} + +} // namespace internal +} // namespace sample + +namespace mojo { +namespace internal { + +// static +void ObjectTraits<sample::internal::Service_Frobinate_Params>:: + EncodePointersAndHandles( + sample::internal::Service_Frobinate_Params* params, + std::vector<mojo::Handle>* handles) { + Encode(¶ms->foo_, handles); + EncodeHandle(¶ms->port_, handles); +} + +// static +bool ObjectTraits<sample::internal::Service_Frobinate_Params>:: + DecodePointersAndHandles( + sample::internal::Service_Frobinate_Params* params, + const mojo::Message& message) { + if (!Decode(¶ms->foo_, message)) + return false; + if (params->_header_.num_fields >= 3) { + if (!DecodeHandle(¶ms->port_, message.handles)) + return false; + } + + // TODO: validate + return true; +} + +} // namespace internal +} // namespace mojo diff --git a/mojo/public/bindings/sample/generated/sample_service_serialization.h b/mojo/public/bindings/sample/generated/sample_service_serialization.h index 4ff9b63..5a7044b 100644 --- a/mojo/public/bindings/sample/generated/sample_service_serialization.h +++ b/mojo/public/bindings/sample/generated/sample_service_serialization.h @@ -8,6 +8,7 @@ #include <string.h> #include "mojo/public/bindings/lib/bindings_serialization.h" +#include "mojo/public/bindings/sample/generated/sample_foo_serialization.h" #include "mojo/public/bindings/sample/generated/sample_service.h" namespace sample { @@ -19,38 +20,30 @@ const uint32_t kService_Frobinate_Name = 1; class Service_Frobinate_Params { public: - static Service_Frobinate_Params* New(mojo::Buffer* buf) { - return new (buf->Allocate(sizeof(Service_Frobinate_Params))) - Service_Frobinate_Params(); - } + static Service_Frobinate_Params* New(mojo::Buffer* buf); - void set_foo(Foo* foo) { d_.foo.ptr = foo; } - void set_baz(bool baz) { d_.baz = baz; } - void set_port(mojo::Handle port) { d_.port = port; } + void set_foo(Foo* foo) { foo_.ptr = foo; } + void set_baz(bool baz) { baz_ = baz; } + void set_port(mojo::Handle port) { port_ = port; } - const Foo* foo() const { return d_.foo.ptr; } - bool baz() const { return d_.baz; } + const Foo* foo() const { return foo_.ptr; } + bool baz() const { return baz_; } mojo::Handle port() const { // NOTE: port is an optional field! - return header_.num_fields >= 3 ? d_.port : mojo::kInvalidHandle; + return _header_.num_fields >= 3 ? port_ : mojo::kInvalidHandle; } private: friend class mojo::internal::ObjectTraits<Service_Frobinate_Params>; - Service_Frobinate_Params() { - header_.num_bytes = sizeof(*this); - header_.num_fields = 3; - } + Service_Frobinate_Params(); ~Service_Frobinate_Params(); // NOT IMPLEMENTED - mojo::internal::StructHeader header_; - struct Data { - mojo::internal::StructPointer<Foo> foo; - uint8_t baz : 1; - uint8_t padding0_[3]; - mojo::Handle port; - } d_; + mojo::internal::StructHeader _header_; + mojo::internal::StructPointer<Foo> foo_; + uint8_t baz_ : 1; + uint8_t _pad0_[3]; + mojo::Handle port_; }; MOJO_COMPILE_ASSERT(sizeof(Service_Frobinate_Params) == 24, bad_sizeof_Service_Frobinate_Params); @@ -64,109 +57,14 @@ namespace mojo { namespace internal { template <> -class ObjectTraits<sample::Bar> { - public: - static size_t ComputeSizeOf(const sample::Bar* bar) { - return sizeof(*bar); - } - - static sample::Bar* Clone(const sample::Bar* bar, Buffer* buf) { - sample::Bar* clone = sample::Bar::New(buf); - memcpy(clone, bar, sizeof(*bar)); - return clone; - } - - static void EncodePointersAndHandles(sample::Bar* bar, - std::vector<mojo::Handle>* handles) { - } - - static bool DecodePointersAndHandles(sample::Bar* bar, - const mojo::Message& message) { - return true; - } -}; - -template <> -class ObjectTraits<sample::Foo> { - public: - static size_t ComputeSizeOf(const sample::Foo* foo) { - return sizeof(*foo) + - mojo::internal::ComputeSizeOf(foo->bar()) + - mojo::internal::ComputeSizeOf(foo->data()) + - mojo::internal::ComputeSizeOf(foo->extra_bars()) + - mojo::internal::ComputeSizeOf(foo->name()) + - mojo::internal::ComputeSizeOf(foo->files()); - } - - static sample::Foo* Clone(const sample::Foo* foo, Buffer* buf) { - sample::Foo* clone = sample::Foo::New(buf); - memcpy(clone, foo, sizeof(*foo)); - - clone->set_bar(mojo::internal::Clone(foo->bar(), buf)); - clone->set_data(mojo::internal::Clone(foo->data(), buf)); - clone->set_extra_bars(mojo::internal::Clone(foo->extra_bars(), buf)); - clone->set_name(mojo::internal::Clone(foo->name(), buf)); - clone->set_files(mojo::internal::Clone(foo->files(), buf)); - - return clone; - } - - static void EncodePointersAndHandles(sample::Foo* foo, - std::vector<mojo::Handle>* handles) { - Encode(&foo->d_.bar, handles); - Encode(&foo->d_.data, handles); - Encode(&foo->d_.extra_bars, handles); - Encode(&foo->d_.name, handles); - Encode(&foo->d_.files, handles); - } - - static bool DecodePointersAndHandles(sample::Foo* foo, - const mojo::Message& message) { - if (!Decode(&foo->d_.bar, message)) - return false; - if (!Decode(&foo->d_.data, message)) - return false; - if (foo->header_.num_fields >= 8) { - if (!Decode(&foo->d_.extra_bars, message)) - return false; - } - if (foo->header_.num_fields >= 9) { - if (!Decode(&foo->d_.name, message)) - return false; - } - if (foo->header_.num_fields >= 10) { - if (!Decode(&foo->d_.files, message)) - return false; - } - - // TODO: validate - return true; - } -}; - -template <> class ObjectTraits<sample::internal::Service_Frobinate_Params> { public: static void EncodePointersAndHandles( sample::internal::Service_Frobinate_Params* params, - std::vector<mojo::Handle>* handles) { - Encode(¶ms->d_.foo, handles); - EncodeHandle(¶ms->d_.port, handles); - } - + std::vector<mojo::Handle>* handles); static bool DecodePointersAndHandles( sample::internal::Service_Frobinate_Params* params, - const mojo::Message& message) { - if (!Decode(¶ms->d_.foo, message)) - return false; - if (params->header_.num_fields >= 3) { - if (!DecodeHandle(¶ms->d_.port, message.handles)) - return false; - } - - // TODO: validate - return true; - } + const mojo::Message& message); }; } // namespace internal diff --git a/mojo/public/bindings/sample/sample_test.cc b/mojo/public/bindings/sample/sample_test.cc index 1f0c9a8..bad221d 100644 --- a/mojo/public/bindings/sample/sample_test.cc +++ b/mojo/public/bindings/sample/sample_test.cc @@ -6,6 +6,8 @@ #include <string> +#include "mojo/public/bindings/sample/generated/sample_bar.h" +#include "mojo/public/bindings/sample/generated/sample_foo.h" #include "mojo/public/bindings/sample/generated/sample_service.h" #include "mojo/public/bindings/sample/generated/sample_service_proxy.h" #include "mojo/public/bindings/sample/generated/sample_service_stub.h" |