| // Copyright 2014 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_PUBLIC_CPP_SYSTEM_MACROS_H_ |
| #define MOJO_PUBLIC_CPP_SYSTEM_MACROS_H_ |
| |
| #include "mojo/public/c/system/macros.h" |
| |
| // Define a set of C++ specific macros. |
| // Mojo C++ API users can assume that mojo/public/cpp/system/macros.h |
| // includes mojo/public/c/system/macros.h. |
| |
| // A macro to disallow the copy constructor and operator= functions. |
| // This should be used in the private: declarations for a class. |
| #define MOJO_DISALLOW_COPY_AND_ASSIGN(TypeName) \ |
| TypeName(const TypeName&); \ |
| void operator=(const TypeName&) |
| |
| // Used to calculate the number of elements in an array. |
| // (See |arraysize()| in Chromium's base/basictypes.h for more details.) |
| namespace mojo { |
| template <typename T, size_t N> |
| char(&ArraySizeHelper(T(&array)[N]))[N]; |
| #if !defined(_MSC_VER) |
| template <typename T, size_t N> |
| char(&ArraySizeHelper(const T(&array)[N]))[N]; |
| #endif |
| } // namespace mojo |
| #define MOJO_ARRAYSIZE(array) (sizeof(::mojo::ArraySizeHelper(array))) |
| |
| // Used to make a type move-only in C++03. See Chromium's base/move.h for more |
| // details. |
| #define MOJO_MOVE_ONLY_TYPE_FOR_CPP_03(type, rvalue_type) \ |
| private: \ |
| struct rvalue_type { \ |
| explicit rvalue_type(type* object) : object(object) {} \ |
| type* object; \ |
| }; \ |
| type(type&); \ |
| void operator=(type&); \ |
| \ |
| public: \ |
| operator rvalue_type() { return rvalue_type(this); } \ |
| type Pass() { return type(rvalue_type(this)); } \ |
| typedef void MoveOnlyTypeForCPP03; \ |
| \ |
| private: |
| #endif // MOJO_PUBLIC_CPP_SYSTEM_MACROS_H_ |