// Copyright (c) 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef PPAPI_CPP_EXTENSIONS_TO_VAR_CONVERTOR_H_ #define PPAPI_CPP_EXTENSIONS_TO_VAR_CONVERTOR_H_ #include <string> #include "ppapi/c/pp_var.h" #include "ppapi/cpp/extensions/optional.h" #include "ppapi/cpp/var.h" #include "ppapi/cpp/var_array.h" #include "ppapi/cpp/var_array_buffer.h" #include "ppapi/cpp/var_dictionary.h" namespace pp { namespace ext { namespace internal { class ToVarConverterBase { public: PP_Var pp_var() const { return var_.pp_var(); } const Var& var() const { return var_; } protected: ToVarConverterBase() { } explicit ToVarConverterBase(const PP_Var& var) : var_(var) { } explicit ToVarConverterBase(const Var& var): var_(var) { } ~ToVarConverterBase() { } Var var_; }; template <class T> class ToVarConverter : public ToVarConverterBase { public: explicit ToVarConverter(const T& object) : ToVarConverterBase(object.CreateVar()) { } ~ToVarConverter() { } }; template <class T> class ToVarConverter<Optional<T> > : public ToVarConverterBase { public: explicit ToVarConverter(const Optional<T>& object) : ToVarConverterBase( object.IsSet() ? ToVarConverter<T>(*object).pp_var() : PP_MakeUndefined()) { } ~ToVarConverter() { } }; template <> class ToVarConverter<bool> : public ToVarConverterBase { public: explicit ToVarConverter(bool object) : ToVarConverterBase(Var(object)) { } ~ToVarConverter() { } }; template <> class ToVarConverter<int32_t> : public ToVarConverterBase { public: explicit ToVarConverter(int32_t object) : ToVarConverterBase(Var(object)) { } ~ToVarConverter() { } }; template <> class ToVarConverter<double> : public ToVarConverterBase { public: explicit ToVarConverter(double object) : ToVarConverterBase(Var(object)) { } ~ToVarConverter() { } }; template <> class ToVarConverter<std::string> : public ToVarConverterBase { public: explicit ToVarConverter(const std::string& object) : ToVarConverterBase(Var(object)) { } ~ToVarConverter() { } }; template <> class ToVarConverter<Var> : public ToVarConverterBase { public: explicit ToVarConverter(const Var& object) : ToVarConverterBase(object) { } ~ToVarConverter() { } }; template <> class ToVarConverter<VarArray> : public ToVarConverterBase { public: explicit ToVarConverter(const Var& object) : ToVarConverterBase(object) { } ~ToVarConverter() { } }; template <> class ToVarConverter<VarDictionary> : public ToVarConverterBase { public: explicit ToVarConverter(const Var& object) : ToVarConverterBase(object) { } ~ToVarConverter() { } }; template <> class ToVarConverter<VarArrayBuffer> : public ToVarConverterBase { public: explicit ToVarConverter(const Var& object) : ToVarConverterBase(object) { } ~ToVarConverter() { } }; } // namespace internal } // namespace ext } // namespace pp #endif // PPAPI_CPP_EXTENSIONS_TO_VAR_CONVERTOR_H_