to_var_converter.h revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
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