| 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");
|
|
|
|
|