[email protected] | 9c6e0de | 2012-01-27 04:55:55 | [diff] [blame] | 1 | // Copyright (c) 2012 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 | #include "ppapi/cpp/var_array_buffer.h" | ||||
6 | |||||
7 | #include <limits> | ||||
8 | |||||
9 | #include "ppapi/c/ppb_var_array_buffer.h" | ||||
10 | #include "ppapi/cpp/logging.h" | ||||
11 | #include "ppapi/cpp/module_impl.h" | ||||
12 | |||||
13 | namespace pp { | ||||
14 | |||||
15 | namespace { | ||||
16 | |||||
[email protected] | a5620d0 | 2012-03-16 20:52:18 | [diff] [blame] | 17 | template <> const char* interface_name<PPB_VarArrayBuffer_1_0>() { |
18 | return PPB_VAR_ARRAY_BUFFER_INTERFACE_1_0; | ||||
[email protected] | 9c6e0de | 2012-01-27 04:55:55 | [diff] [blame] | 19 | } |
20 | |||||
21 | } // namespace | ||||
22 | |||||
[email protected] | 09a1f4ad | 2013-04-13 01:33:18 | [diff] [blame] | 23 | VarArrayBuffer::VarArrayBuffer() { |
24 | ConstructWithSize(0); | ||||
25 | } | ||||
26 | |||||
[email protected] | 9c6e0de | 2012-01-27 04:55:55 | [diff] [blame] | 27 | VarArrayBuffer::VarArrayBuffer(const Var& var) : Var(var) { |
28 | if (!var.is_array_buffer()) { | ||||
29 | PP_NOTREACHED(); | ||||
30 | var_ = PP_MakeNull(); | ||||
31 | } | ||||
32 | } | ||||
33 | |||||
34 | VarArrayBuffer::VarArrayBuffer(uint32_t size_in_bytes) { | ||||
[email protected] | 09a1f4ad | 2013-04-13 01:33:18 | [diff] [blame] | 35 | ConstructWithSize(size_in_bytes); |
[email protected] | 9c6e0de | 2012-01-27 04:55:55 | [diff] [blame] | 36 | } |
37 | |||||
38 | pp::VarArrayBuffer& VarArrayBuffer::operator=(const VarArrayBuffer& other) { | ||||
39 | Var::operator=(other); | ||||
40 | return *this; | ||||
41 | } | ||||
42 | |||||
43 | pp::Var& VarArrayBuffer::operator=(const Var& other) { | ||||
44 | if (other.is_array_buffer()) { | ||||
45 | return Var::operator=(other); | ||||
46 | } else { | ||||
47 | PP_NOTREACHED(); | ||||
48 | return *this; | ||||
49 | } | ||||
50 | } | ||||
51 | |||||
52 | uint32_t VarArrayBuffer::ByteLength() const { | ||||
53 | uint32_t byte_length = std::numeric_limits<uint32_t>::max(); | ||||
[email protected] | a5620d0 | 2012-03-16 20:52:18 | [diff] [blame] | 54 | if (is_array_buffer() && has_interface<PPB_VarArrayBuffer_1_0>()) |
55 | get_interface<PPB_VarArrayBuffer_1_0>()->ByteLength(var_, &byte_length); | ||||
[email protected] | 9c6e0de | 2012-01-27 04:55:55 | [diff] [blame] | 56 | else |
57 | PP_NOTREACHED(); | ||||
58 | return byte_length; | ||||
59 | } | ||||
60 | |||||
61 | void* VarArrayBuffer::Map() { | ||||
[email protected] | a5620d0 | 2012-03-16 20:52:18 | [diff] [blame] | 62 | if (is_array_buffer() && has_interface<PPB_VarArrayBuffer_1_0>()) |
63 | return get_interface<PPB_VarArrayBuffer_1_0>()->Map(var_); | ||||
[email protected] | 9c6e0de | 2012-01-27 04:55:55 | [diff] [blame] | 64 | PP_NOTREACHED(); |
65 | return NULL; | ||||
66 | } | ||||
67 | |||||
68 | void VarArrayBuffer::Unmap() { | ||||
[email protected] | a5620d0 | 2012-03-16 20:52:18 | [diff] [blame] | 69 | if (is_array_buffer() && has_interface<PPB_VarArrayBuffer_1_0>()) |
70 | get_interface<PPB_VarArrayBuffer_1_0>()->Unmap(var_); | ||||
[email protected] | 9c6e0de | 2012-01-27 04:55:55 | [diff] [blame] | 71 | else |
72 | PP_NOTREACHED(); | ||||
73 | } | ||||
74 | |||||
[email protected] | 09a1f4ad | 2013-04-13 01:33:18 | [diff] [blame] | 75 | |
76 | void VarArrayBuffer::ConstructWithSize(uint32_t size_in_bytes) { | ||||
77 | PP_DCHECK(is_undefined()); | ||||
78 | |||||
79 | if (has_interface<PPB_VarArrayBuffer_1_0>()) { | ||||
80 | var_ = get_interface<PPB_VarArrayBuffer_1_0>()->Create(size_in_bytes); | ||||
81 | } else { | ||||
82 | PP_NOTREACHED(); | ||||
83 | var_ = PP_MakeNull(); | ||||
84 | } | ||||
85 | is_managed_ = true; | ||||
86 | } | ||||
87 | |||||
[email protected] | 9c6e0de | 2012-01-27 04:55:55 | [diff] [blame] | 88 | } // namespace pp |