• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_TESTS_STRUCT_WITH_TRAITS_IMPL_H_
6 #define MOJO_PUBLIC_CPP_BINDINGS_TESTS_STRUCT_WITH_TRAITS_IMPL_H_
7 
8 #include <stdint.h>
9 
10 #include <map>
11 #include <set>
12 #include <string>
13 #include <vector>
14 
15 #include "base/strings/string_piece.h"
16 #include "mojo/public/cpp/system/handle.h"
17 
18 namespace mojo {
19 namespace test {
20 
21 struct NestedStructWithTraitsImpl {
22  public:
23   NestedStructWithTraitsImpl();
24   explicit NestedStructWithTraitsImpl(int32_t in_value);
25 
26   bool operator==(const NestedStructWithTraitsImpl& other) const {
27     return value == other.value;
28   }
29 
30   int32_t value = 0;
31 };
32 
33 enum class EnumWithTraitsImpl { CUSTOM_VALUE_0 = 10, CUSTOM_VALUE_1 = 11 };
34 
35 // A type which knows how to look like a mojo::test::StructWithTraits mojom type
36 // by way of mojo::StructTraits.
37 class StructWithTraitsImpl {
38  public:
39   StructWithTraitsImpl();
40   ~StructWithTraitsImpl();
41 
42   StructWithTraitsImpl(const StructWithTraitsImpl& other);
43 
set_enum(EnumWithTraitsImpl value)44   void set_enum(EnumWithTraitsImpl value) { enum_ = value; }
get_enum()45   EnumWithTraitsImpl get_enum() const { return enum_; }
46 
set_bool(bool value)47   void set_bool(bool value) { bool_ = value; }
get_bool()48   bool get_bool() const { return bool_; }
49 
set_uint32(uint32_t value)50   void set_uint32(uint32_t value) { uint32_ = value; }
get_uint32()51   uint32_t get_uint32() const { return uint32_; }
52 
set_uint64(uint64_t value)53   void set_uint64(uint64_t value) { uint64_ = value; }
get_uint64()54   uint64_t get_uint64() const { return uint64_; }
55 
set_string(std::string value)56   void set_string(std::string value) { string_ = value; }
get_string_as_string_piece()57   base::StringPiece get_string_as_string_piece() const { return string_; }
get_string()58   const std::string& get_string() const { return string_; }
59 
get_string_array()60   const std::vector<std::string>& get_string_array() const {
61     return string_array_;
62   }
get_mutable_string_array()63   std::vector<std::string>& get_mutable_string_array() { return string_array_; }
64 
get_string_set()65   const std::set<std::string>& get_string_set() const {
66     return string_set_;
67   }
get_mutable_string_set()68   std::set<std::string>& get_mutable_string_set() { return string_set_; }
69 
get_struct()70   const NestedStructWithTraitsImpl& get_struct() const { return struct_; }
get_mutable_struct()71   NestedStructWithTraitsImpl& get_mutable_struct() { return struct_; }
72 
get_struct_array()73   const std::vector<NestedStructWithTraitsImpl>& get_struct_array() const {
74     return struct_array_;
75   }
get_mutable_struct_array()76   std::vector<NestedStructWithTraitsImpl>& get_mutable_struct_array() {
77     return struct_array_;
78   }
79 
get_struct_map()80   const std::map<std::string, NestedStructWithTraitsImpl>& get_struct_map()
81       const {
82     return struct_map_;
83   }
get_mutable_struct_map()84   std::map<std::string, NestedStructWithTraitsImpl>& get_mutable_struct_map() {
85     return struct_map_;
86   }
87 
88  private:
89   EnumWithTraitsImpl enum_ = EnumWithTraitsImpl::CUSTOM_VALUE_0;
90   bool bool_ = false;
91   uint32_t uint32_ = 0;
92   uint64_t uint64_ = 0;
93   std::string string_;
94   std::vector<std::string> string_array_;
95   std::set<std::string> string_set_;
96   NestedStructWithTraitsImpl struct_;
97   std::vector<NestedStructWithTraitsImpl> struct_array_;
98   std::map<std::string, NestedStructWithTraitsImpl> struct_map_;
99 };
100 
101 // A type which corresponds nominally to the
102 // mojo::test::StructWithUnreachableTraits mojom type. Used to test that said
103 // type is never serialized, i.e. objects of this type are simply copied into
104 // a message as-is when written to an intra-process interface.
105 struct StructWithUnreachableTraitsImpl {
106   int32_t magic_number = 0;
107 };
108 
109 // A type which knows how to look like a mojo::test::TrivialStructWithTraits
110 // mojom type by way of mojo::StructTraits.
111 struct TrivialStructWithTraitsImpl {
112   int32_t value;
113 };
114 
115 // A type which knows how to look like a mojo::test::MoveOnlyStructWithTraits
116 // mojom type by way of mojo::StructTraits.
117 class MoveOnlyStructWithTraitsImpl {
118  public:
119   MoveOnlyStructWithTraitsImpl();
120   MoveOnlyStructWithTraitsImpl(MoveOnlyStructWithTraitsImpl&& other);
121   ~MoveOnlyStructWithTraitsImpl();
122 
get_mutable_handle()123   ScopedHandle& get_mutable_handle() { return handle_; }
124 
125   MoveOnlyStructWithTraitsImpl& operator=(MoveOnlyStructWithTraitsImpl&& other);
126 
127  private:
128   ScopedHandle handle_;
129   DISALLOW_COPY_AND_ASSIGN(MoveOnlyStructWithTraitsImpl);
130 };
131 
132 class UnionWithTraitsBase {
133  public:
134   enum class Type { INT32, STRUCT };
135 
~UnionWithTraitsBase()136   virtual ~UnionWithTraitsBase() {}
137 
type()138   Type type() const { return type_; }
139 
140  protected:
141   Type type_ = Type::INT32;
142 };
143 
144 class UnionWithTraitsInt32 : public UnionWithTraitsBase {
145  public:
UnionWithTraitsInt32()146   UnionWithTraitsInt32() {}
UnionWithTraitsInt32(int32_t value)147   explicit UnionWithTraitsInt32(int32_t value) : value_(value) {}
148 
149   ~UnionWithTraitsInt32() override;
150 
value()151   int32_t value() const { return value_; }
set_value(int32_t value)152   void set_value(int32_t value) { value_ = value; }
153 
154  private:
155   int32_t value_ = 0;
156 };
157 
158 class UnionWithTraitsStruct : public UnionWithTraitsBase {
159  public:
UnionWithTraitsStruct()160   UnionWithTraitsStruct() { type_ = Type::STRUCT; }
UnionWithTraitsStruct(int32_t value)161   explicit UnionWithTraitsStruct(int32_t value) : struct_(value) {
162     type_ = Type::STRUCT;
163   }
164   ~UnionWithTraitsStruct() override;
165 
get_mutable_struct()166   NestedStructWithTraitsImpl& get_mutable_struct() { return struct_; }
get_struct()167   const NestedStructWithTraitsImpl& get_struct() const { return struct_; }
168 
169  private:
170   NestedStructWithTraitsImpl struct_;
171 };
172 
173 class StructForceSerializeImpl {
174  public:
175   StructForceSerializeImpl();
176   ~StructForceSerializeImpl();
177 
set_value(int32_t value)178   void set_value(int32_t value) { value_ = value; }
value()179   int32_t value() const { return value_; }
180 
set_was_serialized()181   void set_was_serialized() const { was_serialized_ = true; }
was_serialized()182   bool was_serialized() const { return was_serialized_; }
183 
set_was_deserialized()184   void set_was_deserialized() { was_deserialized_ = true; }
was_deserialized()185   bool was_deserialized() const { return was_deserialized_; }
186 
187  private:
188   int32_t value_ = 0;
189   mutable bool was_serialized_ = false;
190   bool was_deserialized_ = false;
191 };
192 
193 class StructNestedForceSerializeImpl {
194  public:
195   StructNestedForceSerializeImpl();
196   ~StructNestedForceSerializeImpl();
197 
force()198   StructForceSerializeImpl& force() { return force_; }
force()199   const StructForceSerializeImpl& force() const { return force_; }
200 
set_was_serialized()201   void set_was_serialized() const { was_serialized_ = true; }
was_serialized()202   bool was_serialized() const { return was_serialized_; }
203 
set_was_deserialized()204   void set_was_deserialized() { was_deserialized_ = true; }
was_deserialized()205   bool was_deserialized() const { return was_deserialized_; }
206 
207  private:
208   StructForceSerializeImpl force_;
209   mutable bool was_serialized_ = false;
210   bool was_deserialized_ = false;
211 };
212 
213 }  // namespace test
214 }  // namespace mojo
215 
216 #endif  // MOJO_PUBLIC_CPP_BINDINGS_TESTS_STRUCT_WITH_TRAITS_IMPL_H_
217