Index: gpu/np_utils/np_dispatcher.h |
=================================================================== |
--- gpu/np_utils/np_dispatcher.h (revision 34090) |
+++ gpu/np_utils/np_dispatcher.h (working copy) |
@@ -1,224 +0,0 @@ |
-// 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_DISPATCHER_H_ |
-#define GPU_NP_UTILS_NP_DISPATCHER_H_ |
- |
-#include <string> |
- |
-#include "gpu/np_utils/np_utils.h" |
-#include "gpu/np_utils/np_headers.h" |
- |
-// Dispatchers make regular member functions available as NPObject methods. |
-// Usage: |
-// |
-// class MyNPObject : public DefaultNPObject<NPObject> { |
-// public: |
-// int MyMethod(bool a, float b); |
-// NP_UTILS_BEGIN_DISPATCHER_CHAIN(MyNPObject, DispatchedNPObject) |
-// NP_UTILS_DISPATCHER(MyMethod, int(bool, float)) |
-// NP_UTILS_END_DISPATCHER_CHAIN |
-// }; |
-// |
-// Multiple member functions may be listed in the dispatcher chain. Inheritance |
-// is supported. The following types are supported as return types and parameter |
-// types: |
-// * bool |
-// * int |
-// * float |
-// * double |
-// * std::string |
-// * NPObject* |
-// |
- |
-// These macros are used to make dispatcher chains. |
-#define NP_UTILS_NP_UTILS_DISPATCHER_JOIN2(a, b) a ## b |
-#define NP_UTILS_DISPATCHER_JOIN(a, b) NP_UTILS_NP_UTILS_DISPATCHER_JOIN2(a, b) |
-#define NP_UTILS_DISPATCHER_UNIQUE \ |
- NP_UTILS_DISPATCHER_JOIN(dispatcher, __LINE__) |
- |
-#define NP_UTILS_BEGIN_DISPATCHER_CHAIN(Class, BaseClass) \ |
- static ::np_utils::BaseNPDispatcher* GetDispatcherChain() { \ |
- typedef Class ThisClass; \ |
- ::np_utils::BaseNPDispatcher* top_dispatcher = \ |
- BaseClass::GetDispatcherChain(); \ |
- |
-#define NP_UTILS_DISPATCHER(name, Signature) \ |
- static ::np_utils::NPDispatcher<ThisClass, Signature> \ |
- NP_UTILS_DISPATCHER_UNIQUE( \ |
- top_dispatcher, \ |
- #name, \ |
- &ThisClass::name); \ |
- top_dispatcher = &NP_UTILS_DISPATCHER_UNIQUE; \ |
- |
-#define NP_UTILS_END_DISPATCHER_CHAIN \ |
- return top_dispatcher; \ |
- } \ |
- bool HasMethod(NPIdentifier name) { \ |
- return ::np_utils::DispatcherHasMethodHelper( \ |
- GetDispatcherChain(), this, name); \ |
- } \ |
- bool Invoke(NPIdentifier name, \ |
- const NPVariant* args, \ |
- uint32_t num_args, \ |
- NPVariant* result) { \ |
- return ::np_utils::DispatcherInvokeHelper(GetDispatcherChain(), \ |
- this, \ |
- name, \ |
- args, \ |
- num_args, \ |
- result); \ |
- } \ |
- bool Enumerate(NPIdentifier** names, uint32_t* num_names) { \ |
- return ::np_utils::DispatcherEnumerateHelper(GetDispatcherChain(), \ |
- this, \ |
- names, \ |
- num_names); \ |
- } \ |
- |
-namespace np_utils { |
- |
-class BaseNPDispatcher { |
- public: |
- BaseNPDispatcher(BaseNPDispatcher* next, const NPUTF8* name); |
- |
- virtual ~BaseNPDispatcher(); |
- |
- BaseNPDispatcher* next() const { |
- return next_; |
- } |
- |
- NPIdentifier name() const { |
- return name_; |
- } |
- |
- virtual int num_args() const = 0; |
- |
- virtual bool Invoke(NPObject* object, |
- const NPVariant* args, |
- uint32_t num_args, |
- NPVariant* result) = 0; |
- |
- private: |
- BaseNPDispatcher* next_; |
- NPIdentifier name_; |
- DISALLOW_COPY_AND_ASSIGN(BaseNPDispatcher); |
-}; |
- |
-bool DispatcherHasMethodHelper(BaseNPDispatcher* chain, |
- NPObject* object, |
- NPIdentifier name); |
- |
-bool DispatcherInvokeHelper(BaseNPDispatcher* chain, |
- NPObject* object, |
- NPIdentifier name, |
- const NPVariant* args, |
- uint32_t num_args, |
- NPVariant* result); |
- |
-bool DispatcherEnumerateHelper(BaseNPDispatcher* chain, |
- NPObject* object, |
- NPIdentifier** names, |
- uint32_t* num_names); |
- |
-// This class should never be instantiated. It is always specialized. Attempting |
-// to instantiate it results in a compilation error. This might mean an |
-// attempt to instantiate a dispatcher with more parameters than have been |
-// specialized for. See the specialization code below. |
-template <typename NPObjectType, typename FunctionType> |
-struct NPDispatcher { |
-}; |
- |
-#define TO_NPVARIANT(index) \ |
- T##index n##index; \ |
- if (!NPVariantToValue(&n##index, args[index])) \ |
- return false; \ |
- |
-#define NUM_PARAMS 0 |
-#define PARAM_TYPENAMES |
-#define PARAM_TYPES |
-#define PARAM_NAMES |
-#define PARAM_DECLS // NOLINT |
- |
-#define PARAM_TO_NVPARIANT_CONVERSIONS \ |
- |
-#include "gpu/np_utils/np_dispatcher_specializations.h" // NOLINT |
- |
- |
-#define NUM_PARAMS 1 |
-#define PARAM_TYPENAMES , typename T0 |
-#define PARAM_TYPES T0 |
-#define PARAM_NAMES n0 |
-#define PARAM_DECLS T0 n0; // NOLINT |
- |
-#define PARAM_TO_NVPARIANT_CONVERSIONS \ |
- TO_NPVARIANT(0); \ |
- |
-#include "gpu/np_utils/np_dispatcher_specializations.h" // NOLINT |
- |
- |
-#define NUM_PARAMS 2 |
-#define PARAM_TYPENAMES , typename T0, typename T1 |
-#define PARAM_TYPES T0, T1 |
-#define PARAM_NAMES n0, n1 |
-#define PARAM_DECLS T0 n0; T1 n1; // NOLINT |
- |
-#define PARAM_TO_NVPARIANT_CONVERSIONS \ |
- TO_NPVARIANT(0); \ |
- TO_NPVARIANT(1); \ |
- |
-#include "gpu/np_utils/np_dispatcher_specializations.h" // NOLINT |
- |
- |
-#define NUM_PARAMS 3 |
-#define PARAM_TYPENAMES , typename T0, typename T1, typename T2 |
-#define PARAM_TYPES T0, T1, T2 |
-#define PARAM_NAMES n0, n1, n2 |
-#define PARAM_DECLS T0 n0; T1 n1; T2 n2; // NOLINT |
- |
-#define PARAM_TO_NVPARIANT_CONVERSIONS \ |
- TO_NPVARIANT(0); \ |
- TO_NPVARIANT(1); \ |
- TO_NPVARIANT(2); \ |
- |
-#include "gpu/np_utils/np_dispatcher_specializations.h" // NOLINT |
- |
- |
-#define NUM_PARAMS 4 |
-#define PARAM_TYPENAMES , typename T0, typename T1, typename T2, typename T3 |
-#define PARAM_TYPES T0, T1, T2, T3 |
-#define PARAM_NAMES n0, n1, n2, n3 |
-#define PARAM_DECLS T0 n0; T1 n1; T2 n2; T3 n3; // NOLINT |
- |
-#define PARAM_TO_NVPARIANT_CONVERSIONS \ |
- TO_NPVARIANT(0); \ |
- TO_NPVARIANT(1); \ |
- TO_NPVARIANT(2); \ |
- TO_NPVARIANT(3); \ |
- |
-#include "gpu/np_utils/np_dispatcher_specializations.h" // NOLINT |
- |
- |
-#define NUM_PARAMS 5 |
-#define PARAM_TYPENAMES , typename T0, typename T1, typename T2, typename T3, \ |
- typename T4 |
-#define PARAM_TYPES T0, T1, T2, T3, T4 |
-#define PARAM_NAMES n0, n1, n2, n3, n4 |
-#define PARAM_DECLS T0 n0; T1 n1; T2 n2; T3 n3; T4 n4; // NOLINT |
- |
-#define PARAM_TO_NVPARIANT_CONVERSIONS \ |
- TO_NPVARIANT(0); \ |
- TO_NPVARIANT(1); \ |
- TO_NPVARIANT(2); \ |
- TO_NPVARIANT(3); \ |
- TO_NPVARIANT(4); \ |
- |
-#include "gpu/np_utils/np_dispatcher_specializations.h" // NOLINT |
- |
- |
-#undef TO_NPVARIANT |
- |
-} // namespace np_utils |
- |
-#endif // GPU_NP_UTILS_NP_DISPATCHER_H_ |