1// Copyright (c) 2012 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 "nacl_io/real_pepper_interface.h" 6 7#include <assert.h> 8#include <stdio.h> 9#include <ppapi/c/pp_errors.h> 10 11#include "nacl_io/log.h" 12 13namespace nacl_io { 14 15#include "nacl_io/pepper/undef_macros.h" 16#define BEGIN_INTERFACE(BaseClass, PPInterface, InterfaceString) \ 17 class Real##BaseClass : public BaseClass { \ 18 public: \ 19 explicit Real##BaseClass(const PPInterface* interface); 20#define END_INTERFACE(BaseClass, PPInterface) \ 21 private: \ 22 const PPInterface* interface_; \ 23 }; 24#define METHOD0(Class, ReturnType, MethodName) \ 25 virtual ReturnType MethodName(); 26#define METHOD1(Class, ReturnType, MethodName, Type0) \ 27 virtual ReturnType MethodName(Type0); 28#define METHOD2(Class, ReturnType, MethodName, Type0, Type1) \ 29 virtual ReturnType MethodName(Type0, Type1); 30#define METHOD3(Class, ReturnType, MethodName, Type0, Type1, Type2) \ 31 virtual ReturnType MethodName(Type0, Type1, Type2); 32#define METHOD4(Class, ReturnType, MethodName, Type0, Type1, Type2, Type3) \ 33 virtual ReturnType MethodName(Type0, Type1, Type2, Type3); 34#define METHOD5(Class, ReturnType, MethodName, Type0, Type1, Type2, Type3, \ 35 Type4) \ 36 virtual ReturnType MethodName(Type0, Type1, Type2, Type3, Type4); 37#include "nacl_io/pepper/all_interfaces.h" 38 39 40#include "nacl_io/pepper/undef_macros.h" 41#define BEGIN_INTERFACE(BaseClass, PPInterface, InterfaceString) \ 42 Real##BaseClass::Real##BaseClass(const PPInterface* interface) \ 43 : interface_(interface) {} 44 45#define END_INTERFACE(BaseClass, PPInterface) 46 47#define METHOD0(BaseClass, ReturnType, MethodName) \ 48 ReturnType Real##BaseClass::MethodName() { \ 49 return interface_->MethodName(); \ 50 } 51#define METHOD1(BaseClass, ReturnType, MethodName, Type0) \ 52 ReturnType Real##BaseClass::MethodName(Type0 arg0) { \ 53 return interface_->MethodName(arg0); \ 54 } 55#define METHOD2(BaseClass, ReturnType, MethodName, Type0, Type1) \ 56 ReturnType Real##BaseClass::MethodName(Type0 arg0, Type1 arg1) { \ 57 return interface_->MethodName(arg0, arg1); \ 58 } 59#define METHOD3(BaseClass, ReturnType, MethodName, Type0, Type1, Type2) \ 60 ReturnType Real##BaseClass::MethodName(Type0 arg0, Type1 arg1, \ 61 Type2 arg2) { \ 62 return interface_->MethodName(arg0, arg1, arg2); \ 63 } 64#define METHOD4(BaseClass, ReturnType, MethodName, Type0, Type1, Type2, Type3) \ 65 ReturnType Real##BaseClass::MethodName(Type0 arg0, Type1 arg1, Type2 arg2, \ 66 Type3 arg3) { \ 67 return interface_->MethodName(arg0, arg1, arg2, arg3); \ 68 } 69#define METHOD5(BaseClass, ReturnType, MethodName, Type0, Type1, Type2, Type3, \ 70 Type4) \ 71 ReturnType Real##BaseClass::MethodName(Type0 arg0, Type1 arg1, Type2 arg2, \ 72 Type3 arg3, Type4 arg4) { \ 73 return interface_->MethodName(arg0, arg1, arg2, arg3, arg4); \ 74 } 75#include "nacl_io/pepper/all_interfaces.h" 76 77 78RealPepperInterface::RealPepperInterface(PP_Instance instance, 79 PPB_GetInterface get_browser_interface) 80 : instance_(instance) { 81#include "nacl_io/pepper/undef_macros.h" 82#include "nacl_io/pepper/define_empty_macros.h" 83#undef BEGIN_INTERFACE 84#define BEGIN_INTERFACE(BaseClass, PPInterface, InterfaceString) { \ 85 const PPInterface* iface = static_cast<const PPInterface*>( \ 86 get_browser_interface(InterfaceString)); \ 87 BaseClass##interface_ = NULL; \ 88 if (iface) \ 89 BaseClass##interface_ = new Real##BaseClass(iface); \ 90 else \ 91 LOG_ERROR("interface missing: %s\n", InterfaceString); \ 92 } 93#include "nacl_io/pepper/all_interfaces.h" 94} 95 96PP_Instance RealPepperInterface::GetInstance() { 97 return instance_; 98} 99 100// Define getter function. 101#include "nacl_io/pepper/undef_macros.h" 102#include "nacl_io/pepper/define_empty_macros.h" 103#undef BEGIN_INTERFACE 104#define BEGIN_INTERFACE(BaseClass, PPInterface, InterfaceString) \ 105 BaseClass* RealPepperInterface::Get##BaseClass() { \ 106 return BaseClass##interface_; \ 107 } 108#include "nacl_io/pepper/all_interfaces.h" 109 110} // namespace nacl_io 111