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_dictionary.h"
      6 
      7 #include "ppapi/c/ppb_var_dictionary.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_VarDictionary_1_0>() {
     16   return PPB_VAR_DICTIONARY_INTERFACE_1_0;
     17 }
     18 
     19 }  // namespace
     20 
     21 VarDictionary::VarDictionary() : Var(Null()) {
     22   if (has_interface<PPB_VarDictionary_1_0>())
     23     var_ = get_interface<PPB_VarDictionary_1_0>()->Create();
     24   else
     25     PP_NOTREACHED();
     26 }
     27 
     28 VarDictionary::VarDictionary(const Var& var) : Var(var) {
     29   if (!var.is_dictionary()) {
     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 VarDictionary::VarDictionary(const PP_Var& var) : Var(var) {
     38   if (var.type != PP_VARTYPE_DICTIONARY) {
     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 VarDictionary::VarDictionary(const VarDictionary& other)
     47     : Var(other) {
     48 }
     49 
     50 VarDictionary::~VarDictionary() {
     51 }
     52 
     53 VarDictionary& VarDictionary::operator=(
     54     const VarDictionary& other) {
     55   Var::operator=(other);
     56   return *this;
     57 }
     58 
     59 Var& VarDictionary::operator=(const Var& other) {
     60   if (other.is_dictionary()) {
     61     Var::operator=(other);
     62   } else {
     63     PP_NOTREACHED();
     64     Var::operator=(Var(Null()));
     65   }
     66   return *this;
     67 }
     68 
     69 Var VarDictionary::Get(const Var& key) const {
     70   if (!has_interface<PPB_VarDictionary_1_0>())
     71     return Var();
     72 
     73   return Var(
     74       PASS_REF,
     75       get_interface<PPB_VarDictionary_1_0>()->Get(var_, key.pp_var()));
     76 }
     77 
     78 bool VarDictionary::Set(const Var& key, const Var& value) {
     79   if (!has_interface<PPB_VarDictionary_1_0>())
     80     return false;
     81 
     82   return PP_ToBool(get_interface<PPB_VarDictionary_1_0>()->Set(
     83       var_, key.pp_var(), value.pp_var()));
     84 }
     85 
     86 void VarDictionary::Delete(const Var& key) {
     87   if (has_interface<PPB_VarDictionary_1_0>())
     88     get_interface<PPB_VarDictionary_1_0>()->Delete(var_, key.pp_var());
     89 }
     90 
     91 bool VarDictionary::HasKey(const Var& key) const {
     92   if (!has_interface<PPB_VarDictionary_1_0>())
     93     return false;
     94 
     95   return PP_ToBool(get_interface<PPB_VarDictionary_1_0>()->HasKey(
     96       var_, key.pp_var()));
     97 }
     98 
     99 VarArray VarDictionary::GetKeys() const {
    100   if (!has_interface<PPB_VarDictionary_1_0>())
    101     return VarArray();
    102 
    103   Var result(PASS_REF,
    104              get_interface<PPB_VarDictionary_1_0>()->GetKeys(var_));
    105   if (result.is_array())
    106     return VarArray(result);
    107   else
    108     return VarArray();
    109 }
    110 
    111 }  // namespace pp
    112