1645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Copyright 2016 The Chromium Authors. All rights reserved. 2645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Use of this source code is governed by a BSD-style license that can be 3645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// found in the LICENSE file. 4645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 5645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#ifndef MOJO_PUBLIC_CPP_BINDINGS_TESTS_STRUCT_WITH_TRAITS_IMPL_H_ 6645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#define MOJO_PUBLIC_CPP_BINDINGS_TESTS_STRUCT_WITH_TRAITS_IMPL_H_ 7645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 8645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include <stdint.h> 9645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 10645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include <map> 11645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include <string> 12645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include <vector> 13645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 14645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include "base/strings/string_piece.h" 15645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include "mojo/public/cpp/system/handle.h" 16645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 17645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chaveznamespace mojo { 18645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chaveznamespace test { 19645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 20645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezstruct NestedStructWithTraitsImpl { 21645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez public: 22645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez NestedStructWithTraitsImpl(); 23645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez explicit NestedStructWithTraitsImpl(int32_t in_value); 24645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 25645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bool operator==(const NestedStructWithTraitsImpl& other) const { 26645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return value == other.value; 27645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 28645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 29645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez int32_t value = 0; 30645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}; 31645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 32645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezenum class EnumWithTraitsImpl { CUSTOM_VALUE_0 = 10, CUSTOM_VALUE_1 = 11 }; 33645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 34645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// A type which knows how to look like a mojo::test::StructWithTraits mojom type 35645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// by way of mojo::StructTraits. 36645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezclass StructWithTraitsImpl { 37645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez public: 38645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez StructWithTraitsImpl(); 39645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez ~StructWithTraitsImpl(); 40645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 41645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez StructWithTraitsImpl(const StructWithTraitsImpl& other); 42645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 43645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez void set_enum(EnumWithTraitsImpl value) { enum_ = value; } 44645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez EnumWithTraitsImpl get_enum() const { return enum_; } 45645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 46645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez void set_bool(bool value) { bool_ = value; } 47645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bool get_bool() const { return bool_; } 48645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 49645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez void set_uint32(uint32_t value) { uint32_ = value; } 50645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez uint32_t get_uint32() const { return uint32_; } 51645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 52645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez void set_uint64(uint64_t value) { uint64_ = value; } 53645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez uint64_t get_uint64() const { return uint64_; } 54645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 55645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez void set_string(std::string value) { string_ = value; } 56645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez base::StringPiece get_string_as_string_piece() const { return string_; } 57645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez const std::string& get_string() const { return string_; } 58645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 59645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez const std::vector<std::string>& get_string_array() const { 60645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return string_array_; 61645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 62645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez std::vector<std::string>& get_mutable_string_array() { return string_array_; } 63645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 64645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez const NestedStructWithTraitsImpl& get_struct() const { return struct_; } 65645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez NestedStructWithTraitsImpl& get_mutable_struct() { return struct_; } 66645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 67645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez const std::vector<NestedStructWithTraitsImpl>& get_struct_array() const { 68645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return struct_array_; 69645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 70645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez std::vector<NestedStructWithTraitsImpl>& get_mutable_struct_array() { 71645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return struct_array_; 72645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 73645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 74645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez const std::map<std::string, NestedStructWithTraitsImpl>& get_struct_map() 75645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez const { 76645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return struct_map_; 77645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 78645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez std::map<std::string, NestedStructWithTraitsImpl>& get_mutable_struct_map() { 79645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return struct_map_; 80645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 81645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 82645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez private: 83645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez EnumWithTraitsImpl enum_ = EnumWithTraitsImpl::CUSTOM_VALUE_0; 84645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bool bool_ = false; 85645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez uint32_t uint32_ = 0; 86645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez uint64_t uint64_ = 0; 87645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez std::string string_; 88645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez std::vector<std::string> string_array_; 89645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez NestedStructWithTraitsImpl struct_; 90645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez std::vector<NestedStructWithTraitsImpl> struct_array_; 91645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez std::map<std::string, NestedStructWithTraitsImpl> struct_map_; 92645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}; 93645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 94645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// A type which knows how to look like a mojo::test::PassByValueStructWithTraits 95645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// mojom type by way of mojo::StructTraits. 96645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezclass PassByValueStructWithTraitsImpl { 97645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez public: 98645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez PassByValueStructWithTraitsImpl(); 99645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez PassByValueStructWithTraitsImpl(PassByValueStructWithTraitsImpl&& other); 100645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez ~PassByValueStructWithTraitsImpl(); 101645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 102645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez ScopedHandle& get_mutable_handle() { return handle_; } 103645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 104645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez private: 105645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez ScopedHandle handle_; 106645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez DISALLOW_COPY_AND_ASSIGN(PassByValueStructWithTraitsImpl); 107645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}; 108645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 109645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez} // namespace test 110645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez} // namespace mojo 111645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 112645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#endif // MOJO_PUBLIC_CPP_BINDINGS_TESTS_STRUCT_WITH_TRAITS_IMPL_H_ 113