1// Copyright (c) 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#ifndef PPAPI_CPP_EXTENSIONS_TO_VAR_CONVERTOR_H_ 6#define PPAPI_CPP_EXTENSIONS_TO_VAR_CONVERTOR_H_ 7 8#include <string> 9 10#include "ppapi/c/pp_var.h" 11#include "ppapi/cpp/extensions/optional.h" 12#include "ppapi/cpp/var.h" 13#include "ppapi/cpp/var_array.h" 14#include "ppapi/cpp/var_array_buffer.h" 15#include "ppapi/cpp/var_dictionary.h" 16 17namespace pp { 18namespace ext { 19namespace internal { 20 21class ToVarConverterBase { 22 public: 23 PP_Var pp_var() const { 24 return var_.pp_var(); 25 } 26 27 const Var& var() const { 28 return var_; 29 } 30 31 protected: 32 ToVarConverterBase() { 33 } 34 35 explicit ToVarConverterBase(const PP_Var& var) : var_(var) { 36 } 37 38 explicit ToVarConverterBase(const Var& var): var_(var) { 39 } 40 41 ~ToVarConverterBase() { 42 } 43 44 Var var_; 45}; 46 47template <class T> 48class ToVarConverter : public ToVarConverterBase { 49 public: 50 explicit ToVarConverter(const T& object) 51 : ToVarConverterBase(object.CreateVar()) { 52 } 53 54 ~ToVarConverter() { 55 } 56}; 57 58template <class T> 59class ToVarConverter<Optional<T> > : public ToVarConverterBase { 60 public: 61 explicit ToVarConverter(const Optional<T>& object) 62 : ToVarConverterBase( 63 object.IsSet() ? ToVarConverter<T>(*object).pp_var() : 64 PP_MakeUndefined()) { 65 } 66 67 ~ToVarConverter() { 68 } 69}; 70 71template <> 72class ToVarConverter<bool> : public ToVarConverterBase { 73 public: 74 explicit ToVarConverter(bool object) : ToVarConverterBase(Var(object)) { 75 } 76 77 ~ToVarConverter() { 78 } 79}; 80 81template <> 82class ToVarConverter<int32_t> : public ToVarConverterBase { 83 public: 84 explicit ToVarConverter(int32_t object) : ToVarConverterBase(Var(object)) { 85 } 86 87 ~ToVarConverter() { 88 } 89}; 90 91template <> 92class ToVarConverter<double> : public ToVarConverterBase { 93 public: 94 explicit ToVarConverter(double object) : ToVarConverterBase(Var(object)) { 95 } 96 97 ~ToVarConverter() { 98 } 99}; 100 101template <> 102class ToVarConverter<std::string> : public ToVarConverterBase { 103 public: 104 explicit ToVarConverter(const std::string& object) 105 : ToVarConverterBase(Var(object)) { 106 } 107 108 ~ToVarConverter() { 109 } 110}; 111 112template <> 113class ToVarConverter<Var> : public ToVarConverterBase { 114 public: 115 explicit ToVarConverter(const Var& object) : ToVarConverterBase(object) { 116 } 117 118 ~ToVarConverter() { 119 } 120}; 121 122template <> 123class ToVarConverter<VarArray> : public ToVarConverterBase { 124 public: 125 explicit ToVarConverter(const Var& object) : ToVarConverterBase(object) { 126 } 127 128 ~ToVarConverter() { 129 } 130}; 131 132template <> 133class ToVarConverter<VarDictionary> : public ToVarConverterBase { 134 public: 135 explicit ToVarConverter(const Var& object) : ToVarConverterBase(object) { 136 } 137 138 ~ToVarConverter() { 139 } 140}; 141 142template <> 143class ToVarConverter<VarArrayBuffer> : public ToVarConverterBase { 144 public: 145 explicit ToVarConverter(const Var& object) : ToVarConverterBase(object) { 146 } 147 148 ~ToVarConverter() { 149 } 150}; 151 152} // namespace internal 153} // namespace ext 154} // namespace pp 155 156#endif // PPAPI_CPP_EXTENSIONS_TO_VAR_CONVERTOR_H_ 157