1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file. 4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi/cpp/var_array.h" 6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi/c/ppb_var_array.h" 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi/cpp/logging.h" 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi/cpp/module_impl.h" 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace pp { 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace { 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochtemplate <> const char* interface_name<PPB_VarArray_1_0>() { 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return PPB_VAR_ARRAY_INTERFACE_1_0; 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochVarArray::VarArray() : Var(Null()) { 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (has_interface<PPB_VarArray_1_0>()) 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var_ = get_interface<PPB_VarArray_1_0>()->Create(); 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch else 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PP_NOTREACHED(); 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochVarArray::VarArray(const Var& var) : Var(var) { 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!var.is_array()) { 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PP_NOTREACHED(); 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // This takes care of releasing the reference that this object holds. 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Var::operator=(Var(Null())); 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochVarArray::VarArray(const PP_Var& var) : Var(var) { 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (var.type != PP_VARTYPE_ARRAY) { 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PP_NOTREACHED(); 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // This takes care of releasing the reference that this object holds. 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Var::operator=(Var(Null())); 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochVarArray::VarArray(const VarArray& other) : Var(other) { 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochVarArray::~VarArray() { 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochVarArray& VarArray::operator=(const VarArray& other) { 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Var::operator=(other); 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return *this; 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochVar& VarArray::operator=(const Var& other) { 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (other.is_array()) { 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Var::operator=(other); 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } else { 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PP_NOTREACHED(); 62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Var::operator=(Var(Null())); 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return *this; 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochVar VarArray::Get(uint32_t index) const { 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!has_interface<PPB_VarArray_1_0>()) 69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return Var(); 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return Var(PASS_REF, get_interface<PPB_VarArray_1_0>()->Get(var_, index)); 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbool VarArray::Set(uint32_t index, const Var& value) { 75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!has_interface<PPB_VarArray_1_0>()) 76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return false; 77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return PP_ToBool(get_interface<PPB_VarArray_1_0>()->Set(var_, index, 79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch value.pp_var())); 80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochuint32_t VarArray::GetLength() const { 83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!has_interface<PPB_VarArray_1_0>()) 84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return 0; 85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return get_interface<PPB_VarArray_1_0>()->GetLength(var_); 87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbool VarArray::SetLength(uint32_t length) { 90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!has_interface<PPB_VarArray_1_0>()) 91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return false; 92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return PP_ToBool(get_interface<PPB_VarArray_1_0>()->SetLength(var_, length)); 94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 95eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace pp 97