summaryrefslogtreecommitdiff
path: root/chromium/ppapi/cpp/dev/buffer_dev.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/ppapi/cpp/dev/buffer_dev.cc')
-rw-r--r--chromium/ppapi/cpp/dev/buffer_dev.cc69
1 files changed, 69 insertions, 0 deletions
diff --git a/chromium/ppapi/cpp/dev/buffer_dev.cc b/chromium/ppapi/cpp/dev/buffer_dev.cc
new file mode 100644
index 00000000000..aca7b1b795f
--- /dev/null
+++ b/chromium/ppapi/cpp/dev/buffer_dev.cc
@@ -0,0 +1,69 @@
+// Copyright (c) 2011 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.
+
+#include "ppapi/cpp/dev/buffer_dev.h"
+
+#include "ppapi/c/dev/ppb_buffer_dev.h"
+#include "ppapi/cpp/instance_handle.h"
+#include "ppapi/cpp/module.h"
+#include "ppapi/cpp/module_impl.h"
+
+namespace pp {
+
+namespace {
+
+template <> const char* interface_name<PPB_Buffer_Dev>() {
+ return PPB_BUFFER_DEV_INTERFACE;
+}
+
+} // namespace
+
+Buffer_Dev::Buffer_Dev() : data_(NULL), size_(0) {
+}
+
+Buffer_Dev::Buffer_Dev(const Buffer_Dev& other)
+ : Resource(other) {
+ Init();
+}
+
+Buffer_Dev::Buffer_Dev(PP_Resource resource)
+ : Resource(resource) {
+ Init();
+}
+
+Buffer_Dev::Buffer_Dev(const InstanceHandle& instance, uint32_t size)
+ : data_(NULL),
+ size_(0) {
+ if (!has_interface<PPB_Buffer_Dev>())
+ return;
+
+ PassRefFromConstructor(get_interface<PPB_Buffer_Dev>()->Create(
+ instance.pp_instance(), size));
+ Init();
+}
+
+Buffer_Dev::Buffer_Dev(PassRef, PP_Resource resource)
+ : Resource(PassRef(), resource) {
+ Init();
+}
+
+Buffer_Dev::~Buffer_Dev() {
+ get_interface<PPB_Buffer_Dev>()->Unmap(pp_resource());
+}
+
+Buffer_Dev& Buffer_Dev::operator=(const Buffer_Dev& rhs) {
+ Resource::operator=(rhs);
+ Init();
+ return *this;
+}
+
+void Buffer_Dev::Init() {
+ if (!get_interface<PPB_Buffer_Dev>()->Describe(pp_resource(), &size_) ||
+ !(data_ = get_interface<PPB_Buffer_Dev>()->Map(pp_resource()))) {
+ data_ = NULL;
+ size_ = 0;
+ }
+}
+
+} // namespace pp