Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(48)

Side by Side Diff: mojo/public/cpp/system/message_pipe.h

Issue 392783006: Mojo: Split public/cpp/system/core.h into pieces (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2013 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_SYSTEM_MESSAGE_PIPE_H_
6 #define MOJO_PUBLIC_CPP_SYSTEM_MESSAGE_PIPE_H_
7
8 #include "mojo/public/c/system/message_pipe.h"
9 #include "mojo/public/cpp/system/handle.h"
10
11 namespace mojo {
12
13 // MessagePipeHandle -----------------------------------------------------------
14
15 class MessagePipeHandle : public Handle {
16 public:
17 MessagePipeHandle() {}
18 explicit MessagePipeHandle(MojoHandle value) : Handle(value) {}
19
20 // Copying and assignment allowed.
21 };
22
23 MOJO_COMPILE_ASSERT(sizeof(MessagePipeHandle) == sizeof(Handle),
24 bad_size_for_cpp_MessagePipeHandle);
25
26 typedef ScopedHandleBase<MessagePipeHandle> ScopedMessagePipeHandle;
27 MOJO_COMPILE_ASSERT(sizeof(ScopedMessagePipeHandle) ==
28 sizeof(MessagePipeHandle),
29 bad_size_for_cpp_ScopedMessagePipeHandle);
30
31 inline MojoResult CreateMessagePipe(const MojoCreateMessagePipeOptions* options,
32 ScopedMessagePipeHandle* message_pipe0,
33 ScopedMessagePipeHandle* message_pipe1) {
34 assert(message_pipe0);
35 assert(message_pipe1);
36 MessagePipeHandle handle0;
37 MessagePipeHandle handle1;
38 MojoResult rv = MojoCreateMessagePipe(options,
39 handle0.mutable_value(),
40 handle1.mutable_value());
41 // Reset even on failure (reduces the chances that a "stale"/incorrect handle
42 // will be used).
43 message_pipe0->reset(handle0);
44 message_pipe1->reset(handle1);
45 return rv;
46 }
47
48 // These "raw" versions fully expose the underlying API, but don't help with
49 // ownership of handles (especially when writing messages).
50 // TODO(vtl): Write "baked" versions.
51 inline MojoResult WriteMessageRaw(MessagePipeHandle message_pipe,
52 const void* bytes,
53 uint32_t num_bytes,
54 const MojoHandle* handles,
55 uint32_t num_handles,
56 MojoWriteMessageFlags flags) {
57 return MojoWriteMessage(message_pipe.value(), bytes, num_bytes, handles,
58 num_handles, flags);
59 }
60
61 inline MojoResult ReadMessageRaw(MessagePipeHandle message_pipe,
62 void* bytes,
63 uint32_t* num_bytes,
64 MojoHandle* handles,
65 uint32_t* num_handles,
66 MojoReadMessageFlags flags) {
67 return MojoReadMessage(message_pipe.value(), bytes, num_bytes, handles,
68 num_handles, flags);
69 }
70
71 // A wrapper class that automatically creates a message pipe and owns both
72 // handles.
73 class MessagePipe {
74 public:
75 MessagePipe();
76 explicit MessagePipe(const MojoCreateMessagePipeOptions& options);
77 ~MessagePipe();
78
79 ScopedMessagePipeHandle handle0;
80 ScopedMessagePipeHandle handle1;
81 };
82
83 inline MessagePipe::MessagePipe() {
84 MojoResult result MOJO_ALLOW_UNUSED =
85 CreateMessagePipe(NULL, &handle0, &handle1);
86 assert(result == MOJO_RESULT_OK);
87 }
88
89 inline MessagePipe::MessagePipe(const MojoCreateMessagePipeOptions& options) {
90 MojoResult result MOJO_ALLOW_UNUSED =
91 CreateMessagePipe(&options, &handle0, &handle1);
92 assert(result == MOJO_RESULT_OK);
93 }
94
95 inline MessagePipe::~MessagePipe() {
96 }
97
98 } // namespace mojo
99
100 #endif // MOJO_PUBLIC_CPP_SYSTEM_MESSAGE_PIPE_H_
OLDNEW
« mojo/public/cpp/system/macros.h ('K') | « mojo/public/cpp/system/macros.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698