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

Side by Side Diff: mojo/public/cpp/system/buffer.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_BUFFER_H_
6 #define MOJO_PUBLIC_CPP_SYSTEM_BUFFER_H_
7
8 #include "mojo/public/c/system/buffer.h"
9 #include "mojo/public/cpp/system/handle.h"
10
11 namespace mojo {
12
13 // SharedBufferHandle ----------------------------------------------------------
14
15 class SharedBufferHandle : public Handle {
16 public:
17 SharedBufferHandle() {}
18 explicit SharedBufferHandle(MojoHandle value) : Handle(value) {}
19
20 // Copying and assignment allowed.
21 };
22
23 MOJO_COMPILE_ASSERT(sizeof(SharedBufferHandle) == sizeof(Handle),
viettrungluu 2014/07/15 00:44:09 I'd prefer that you not rely on the transitive inc
Hajime Morrita 2014/07/15 17:38:15 Makes sense. I added a comment on macros.h about t
24 bad_size_for_cpp_SharedBufferHandle);
25
26 typedef ScopedHandleBase<SharedBufferHandle> ScopedSharedBufferHandle;
27 MOJO_COMPILE_ASSERT(sizeof(ScopedSharedBufferHandle) ==
28 sizeof(SharedBufferHandle),
29 bad_size_for_cpp_ScopedSharedBufferHandle);
30
31 inline MojoResult CreateSharedBuffer(
32 const MojoCreateSharedBufferOptions* options,
33 uint64_t num_bytes,
34 ScopedSharedBufferHandle* shared_buffer) {
35 assert(shared_buffer);
36 SharedBufferHandle handle;
37 MojoResult rv = MojoCreateSharedBuffer(options, num_bytes,
38 handle.mutable_value());
39 // Reset even on failure (reduces the chances that a "stale"/incorrect handle
40 // will be used).
41 shared_buffer->reset(handle);
42 return rv;
43 }
44
45 // TODO(vtl): This (and also the functions below) are templatized to allow for
46 // future/other buffer types. A bit "safer" would be to overload this function
47 // manually. (The template enforces that the in and out handles to be of the
48 // same type.)
49 template <class BufferHandleType>
50 inline MojoResult DuplicateBuffer(
51 BufferHandleType buffer,
52 const MojoDuplicateBufferHandleOptions* options,
53 ScopedHandleBase<BufferHandleType>* new_buffer) {
54 assert(new_buffer);
55 BufferHandleType handle;
56 MojoResult rv = MojoDuplicateBufferHandle(
57 buffer.value(), options, handle.mutable_value());
58 // Reset even on failure (reduces the chances that a "stale"/incorrect handle
59 // will be used).
60 new_buffer->reset(handle);
61 return rv;
62 }
63
64 template <class BufferHandleType>
65 inline MojoResult MapBuffer(BufferHandleType buffer,
66 uint64_t offset,
67 uint64_t num_bytes,
68 void** pointer,
69 MojoMapBufferFlags flags) {
70 assert(buffer.is_valid());
71 return MojoMapBuffer(buffer.value(), offset, num_bytes, pointer, flags);
72 }
73
74 inline MojoResult UnmapBuffer(void* pointer) {
75 assert(pointer);
76 return MojoUnmapBuffer(pointer);
77 }
78
79 // A wrapper class that automatically creates a shared buffer and owns the
80 // handle.
81 class SharedBuffer {
82 public:
83 explicit SharedBuffer(uint64_t num_bytes);
84 SharedBuffer(uint64_t num_bytes,
85 const MojoCreateSharedBufferOptions& options);
86 ~SharedBuffer();
87
88 ScopedSharedBufferHandle handle;
89 };
90
91 inline SharedBuffer::SharedBuffer(uint64_t num_bytes) {
92 MojoResult result MOJO_ALLOW_UNUSED =
93 CreateSharedBuffer(NULL, num_bytes, &handle);
94 assert(result == MOJO_RESULT_OK);
95 }
96
97 inline SharedBuffer::SharedBuffer(
98 uint64_t num_bytes,
99 const MojoCreateSharedBufferOptions& options) {
100 MojoResult result MOJO_ALLOW_UNUSED =
101 CreateSharedBuffer(&options, num_bytes, &handle);
102 assert(result == MOJO_RESULT_OK);
103 }
104
105 inline SharedBuffer::~SharedBuffer() {
106 }
107
108 } // namespace mojo
109
110 #endif // MOJO_PUBLIC_CPP_SYSTEM_BUFFER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698