| // Copyright (c) 2006-2008 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 GPU_NP_UTILS_NP_CLASS_H_ |
| #define GPU_NP_UTILS_NP_CLASS_H_ |
| |
| #include "gpu/np_utils/np_object_pointer.h" |
| #include "gpu/np_utils/np_headers.h" |
| |
| // This file implements NPGetClass<T>. This function returns an NPClass |
| // that can be used to instantiate an NPObject subclass T. The NPClass |
| // function pointers will invoke the most derived corresponding member |
| // functions in T. |
| |
| namespace np_utils { |
| |
| namespace np_class_impl { |
| // This template version of the NPClass allocate function creates a subclass |
| // of BaseNPObject. |
| template <typename NPObjectType> |
| static NPObject* Allocate(NPP npp, NPClass*) { |
| return new NPObjectType(npp); |
| } |
| |
| // These implementations of the NPClass functions forward to the virtual |
| // functions in DefaultNPObject. |
| template <typename NPObjectType> |
| static void Deallocate(NPObject* object) { |
| delete static_cast<NPObjectType*>(object); |
| } |
| |
| template <typename NPObjectType> |
| static void Invalidate(NPObject* object) { |
| return static_cast<NPObjectType*>(object)->Invalidate(); |
| } |
| |
| template <typename NPObjectType> |
| static bool HasMethod(NPObject* object, NPIdentifier name) { |
| return static_cast<NPObjectType*>(object)->HasMethod(name); |
| } |
| |
| template <typename NPObjectType> |
| static bool Invoke(NPObject* object, |
| NPIdentifier name, |
| const NPVariant* args, |
| uint32_t num_args, |
| NPVariant* result) { |
| return static_cast<NPObjectType*>(object)->Invoke( |
| name, args, num_args, result); |
| } |
| |
| template <typename NPObjectType> |
| static bool InvokeDefault(NPObject* object, |
| const NPVariant* args, |
| uint32_t num_args, |
| NPVariant* result) { |
| return static_cast<NPObjectType*>(object)->InvokeDefault( |
| args, num_args, result); |
| } |
| |
| template <typename NPObjectType> |
| static bool HasProperty(NPObject* object, NPIdentifier name) { |
| return static_cast<NPObjectType*>(object)->HasProperty(name); |
| } |
| |
| template <typename NPObjectType> |
| static bool GetProperty(NPObject* object, |
| NPIdentifier name, |
| NPVariant* result) { |
| return static_cast<NPObjectType*>(object)->GetProperty(name, result); |
| } |
| |
| template <typename NPObjectType> |
| static bool SetProperty(NPObject* object, |
| NPIdentifier name, |
| const NPVariant* value) { |
| return static_cast<NPObjectType*>(object)->SetProperty(name, value); |
| } |
| |
| template <typename NPObjectType> |
| static bool RemoveProperty(NPObject* object, NPIdentifier name) { |
| return static_cast<NPObjectType*>(object)->RemoveProperty(name); |
| } |
| |
| template <typename NPObjectType> |
| static bool Enumerate(NPObject* object, |
| NPIdentifier** names, |
| uint32_t* count) { |
| return static_cast<NPObjectType*>(object)->Enumerate(names, count); |
| }; |
| |
| template <typename NPObjectType> |
| static bool Construct(NPObject* object, |
| const NPVariant* args, |
| uint32_t num_args, |
| NPVariant* result) { |
| return static_cast<NPObjectType*>(object)->Construct( |
| args, num_args, result); |
| } |
| } // namespace np_class_impl; |
| |
| template <typename NPObjectType> |
| const NPClass* NPGetClass() { |
| static const NPClass np_class = { |
| NP_CLASS_STRUCT_VERSION, |
| np_class_impl::Allocate<NPObjectType>, |
| np_class_impl::Deallocate<NPObjectType>, |
| np_class_impl::Invalidate<NPObjectType>, |
| np_class_impl::HasMethod<NPObjectType>, |
| np_class_impl::Invoke<NPObjectType>, |
| np_class_impl::InvokeDefault<NPObjectType>, |
| np_class_impl::HasProperty<NPObjectType>, |
| np_class_impl::GetProperty<NPObjectType>, |
| np_class_impl::SetProperty<NPObjectType>, |
| np_class_impl::RemoveProperty<NPObjectType>, |
| np_class_impl::Enumerate<NPObjectType>, |
| np_class_impl::Construct<NPObjectType>, |
| }; |
| return &np_class; |
| }; |
| |
| } // namespace np_utils |
| |
| #endif // GPU_NP_UTILS_NP_CLASS_H_ |