Index: mojo/public/cpp/system/buffer.h |
diff --git a/mojo/public/cpp/system/buffer.h b/mojo/public/cpp/system/buffer.h |
index a2d524e20d13e28c1d526c5da6eb430f3d83955a..27ba814a6172786f8d3eda184c68a56667c9299d 100644 |
--- a/mojo/public/cpp/system/buffer.h |
+++ b/mojo/public/cpp/system/buffer.h |
@@ -14,27 +14,61 @@ |
#include <stdint.h> |
+#include <memory> |
+ |
#include "base/compiler_specific.h" |
#include "base/logging.h" |
#include "mojo/public/c/system/buffer.h" |
#include "mojo/public/cpp/system/handle.h" |
namespace mojo { |
+namespace internal { |
+ |
+struct Unmapper { |
+ void operator()(void* buffer) { |
+ MojoResult result = MojoUnmapBuffer(buffer); |
+ DCHECK_EQ(MOJO_RESULT_OK, result); |
+ } |
+}; |
+ |
+} // namespace internal |
+ |
+using ScopedSharedBufferMapping = std::unique_ptr<void, internal::Unmapper>; |
+ |
+class SharedBufferHandle; |
+ |
+typedef ScopedHandleBase<SharedBufferHandle> ScopedSharedBufferHandle; |
// A strongly-typed representation of a |MojoHandle| referring to a shared |
// buffer. |
class SharedBufferHandle : public Handle { |
public: |
+ enum class AccessMode { |
+ READ_WRITE, |
+ READ_ONLY, |
+ }; |
+ |
SharedBufferHandle() {} |
explicit SharedBufferHandle(MojoHandle value) : Handle(value) {} |
// Copying and assignment allowed. |
+ |
+ // Clones this shared buffer handle. If |access_mode| is READ_ONLY or this is |
+ // a read-only handle, the new handle will be read-only. On failure, this will |
+ // return an empty result. |
+ ScopedSharedBufferHandle Clone(AccessMode = AccessMode::READ_WRITE) const; |
+ |
+ // Maps |size| bytes of this shared buffer. On failure, this will return a |
+ // null mapping. |
+ ScopedSharedBufferMapping Map(uint64_t size) const; |
+ |
+ // Maps |size| bytes of this shared buffer, starting |offset| bytes into the |
+ // buffer. On failure, this will return a null mapping. |
+ ScopedSharedBufferMapping MapAtOffset(uint64_t size, uint64_t offset) const; |
}; |
static_assert(sizeof(SharedBufferHandle) == sizeof(Handle), |
"Bad size for C++ SharedBufferHandle"); |
- |
-typedef ScopedHandleBase<SharedBufferHandle> ScopedSharedBufferHandle; |
static_assert(sizeof(ScopedSharedBufferHandle) == sizeof(SharedBufferHandle), |
"Bad size for C++ ScopedSharedBufferHandle"); |