1 // Copyright 2014 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_CONTAINER_TEST_UTIL_H_ 6 #define MOJO_PUBLIC_CPP_BINDINGS_TESTS_CONTAINER_TEST_UTIL_H_ 7 8 #include <stddef.h> 9 10 #include "base/macros.h" 11 12 namespace mojo { 13 14 class CopyableType { 15 public: 16 CopyableType(); 17 CopyableType(const CopyableType& other); 18 CopyableType& operator=(const CopyableType& other); 19 ~CopyableType(); 20 copied()21 bool copied() const { return copied_; } num_instances()22 static size_t num_instances() { return num_instances_; } ptr()23 CopyableType* ptr() const { return ptr_; } ResetCopied()24 void ResetCopied() { copied_ = false; } 25 26 private: 27 bool copied_; 28 static size_t num_instances_; 29 CopyableType* ptr_; 30 }; 31 32 class MoveOnlyType { 33 public: 34 typedef MoveOnlyType Data_; 35 MoveOnlyType(); 36 MoveOnlyType(MoveOnlyType&& other); 37 MoveOnlyType& operator=(MoveOnlyType&& other); 38 ~MoveOnlyType(); 39 moved()40 bool moved() const { return moved_; } num_instances()41 static size_t num_instances() { return num_instances_; } ptr()42 MoveOnlyType* ptr() const { return ptr_; } ResetMoved()43 void ResetMoved() { moved_ = false; } 44 45 private: 46 bool moved_; 47 static size_t num_instances_; 48 MoveOnlyType* ptr_; 49 50 DISALLOW_COPY_AND_ASSIGN(MoveOnlyType); 51 }; 52 53 } // namespace mojo 54 55 #endif // MOJO_PUBLIC_CPP_BINDINGS_TESTS_CONTAINER_TEST_UTIL_H_ 56