1// Copyright (c) 2011 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_MODULE_IMPL_H_
6#define PPAPI_CPP_MODULE_IMPL_H_
7
8/// @file
9/// This file defines some simple function templates that help the C++ wrappers
10/// (and are not for external developers to use).
11
12#include "ppapi/cpp/module.h"
13
14namespace pp {
15
16namespace {
17
18// Specialize this function to return the interface string corresponding to the
19// PP?_XXX structure.
20template <typename T> const char* interface_name() {
21  return NULL;
22}
23
24template <typename T> inline T const* get_interface() {
25  static T const* funcs = reinterpret_cast<T const*>(
26      pp::Module::Get()->GetBrowserInterface(interface_name<T>()));
27  return funcs;
28}
29
30template <typename T> inline bool has_interface() {
31  return get_interface<T>() != NULL;
32}
33
34}  // namespace
35
36}  // namespace pp
37
38#endif  // PPAPI_CPP_MODULE_IMPL_H_
39
40