Home | History | Annotate | Download | only in cpp
      1 // Copyright 2013 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.h"
      6 
      7 #include "ppapi/c/ppb_var_array.h"
      8 #include "ppapi/cpp/logging.h"
      9 #include "ppapi/cpp/module_impl.h"
     10 
     11 namespace pp {
     12 
     13 namespace {
     14 
     15 template <> const char* interface_name<PPB_VarArray_1_0>() {
     16   return PPB_VAR_ARRAY_INTERFACE_1_0;
     17 }
     18 
     19 }  // namespace
     20 
     21 VarArray::VarArray() : Var(Null()) {
     22   if (has_interface<PPB_VarArray_1_0>())
     23     var_ = get_interface<PPB_VarArray_1_0>()->Create();
     24   else
     25     PP_NOTREACHED();
     26 }
     27 
     28 VarArray::VarArray(const Var& var) : Var(var) {
     29   if (!var.is_array()) {
     30     PP_NOTREACHED();
     31 
     32     // This takes care of releasing the reference that this object holds.
     33     Var::operator=(Var(Null()));
     34   }
     35 }
     36 
     37 VarArray::VarArray(const PP_Var& var) : Var(var) {
     38   if (var.type != PP_VARTYPE_ARRAY) {
     39     PP_NOTREACHED();
     40 
     41     // This takes care of releasing the reference that this object holds.
     42     Var::operator=(Var(Null()));
     43   }
     44 }
     45 
     46 VarArray::VarArray(const VarArray& other) : Var(other) {
     47 }
     48 
     49 VarArray::~VarArray() {
     50 }
     51 
     52 VarArray& VarArray::operator=(const VarArray& other) {
     53   Var::operator=(other);
     54   return *this;
     55 }
     56 
     57 Var& VarArray::operator=(const Var& other) {
     58   if (other.is_array()) {
     59     Var::operator=(other);
     60   } else {
     61     PP_NOTREACHED();
     62     Var::operator=(Var(Null()));
     63   }
     64   return *this;
     65 }
     66 
     67 Var VarArray::Get(uint32_t index) const {
     68   if (!has_interface<PPB_VarArray_1_0>())
     69     return Var();
     70 
     71   return Var(PASS_REF, get_interface<PPB_VarArray_1_0>()->Get(var_, index));
     72 }
     73 
     74 bool VarArray::Set(uint32_t index, const Var& value) {
     75   if (!has_interface<PPB_VarArray_1_0>())
     76     return false;
     77 
     78   return PP_ToBool(get_interface<PPB_VarArray_1_0>()->Set(var_, index,
     79                                                           value.pp_var()));
     80 }
     81 
     82 uint32_t VarArray::GetLength() const {
     83   if (!has_interface<PPB_VarArray_1_0>())
     84     return 0;
     85 
     86   return get_interface<PPB_VarArray_1_0>()->GetLength(var_);
     87 }
     88 
     89 bool VarArray::SetLength(uint32_t length) {
     90   if (!has_interface<PPB_VarArray_1_0>())
     91     return false;
     92 
     93   return PP_ToBool(get_interface<PPB_VarArray_1_0>()->SetLength(var_, length));
     94 }
     95 
     96 }  // namespace pp
     97