|  |  | 
|  | /* | 
|  | * Copyright 2011 Google Inc. | 
|  | * | 
|  | * Use of this source code is governed by a BSD-style license that can be | 
|  | * found in the LICENSE file. | 
|  | */ | 
|  | #ifndef SkScriptCallBack_DEFINED | 
|  | #define SkScriptCallBack_DEFINED | 
|  |  | 
|  | #include "SkOperand2.h" | 
|  | #include "SkTDArray_Experimental.h" | 
|  |  | 
|  | class SkScriptCallBack { | 
|  | public: | 
|  | virtual ~SkScriptCallBack() { } | 
|  |  | 
|  | enum Type { | 
|  | kBox, | 
|  | kFunction, | 
|  | kMember, | 
|  | kMemberFunction, | 
|  | kProperty, | 
|  | kUnbox | 
|  | }; | 
|  |  | 
|  | virtual bool getReference(const char* , size_t len, SkScriptValue2* result) {  return false; } | 
|  | virtual SkOperand2::OpType getReturnType(size_t ref, SkOperand2*) { | 
|  | return SkOperand2::kS32; } | 
|  | virtual Type getType() const = 0; | 
|  | }; | 
|  |  | 
|  | class SkScriptCallBackConvert : public SkScriptCallBack { | 
|  | public: | 
|  | virtual bool convert(SkOperand2::OpType type, SkOperand2* operand) = 0; | 
|  | }; | 
|  |  | 
|  | class SkScriptCallBackFunction : public SkScriptCallBack { | 
|  | public: | 
|  | virtual void getParamTypes(SkIntArray(SkOperand2::OpType)* types) = 0; | 
|  | virtual Type getType() const { return kFunction; } | 
|  | virtual bool invoke(size_t ref, SkOpArray* params, SkOperand2* value) = 0; | 
|  | }; | 
|  |  | 
|  | class SkScriptCallBackMember: public SkScriptCallBack { | 
|  | public: | 
|  | bool getMemberReference(const char* , size_t len, void* object, SkScriptValue2* ref); | 
|  | virtual Type getType() const { return kMember; } | 
|  | virtual bool invoke(size_t ref, void* object, SkOperand2* value) = 0; | 
|  | }; | 
|  |  | 
|  | class SkScriptCallBackMemberFunction : public SkScriptCallBack { | 
|  | public: | 
|  | bool getMemberReference(const char* , size_t len, void* object, SkScriptValue2* ref); | 
|  | virtual void getParamTypes(SkIntArray(SkOperand2::OpType)* types) = 0; | 
|  | virtual Type getType() const { return kMemberFunction; } | 
|  | virtual bool invoke(size_t ref, void* object, SkOpArray* params, SkOperand2* value) = 0; | 
|  | }; | 
|  |  | 
|  | class SkScriptCallBackProperty : public SkScriptCallBack { | 
|  | public: | 
|  | virtual bool getConstValue(const char* name, size_t len, SkOperand2* value) { return false; } | 
|  | virtual bool getResult(size_t ref, SkOperand2* answer) { return false; } | 
|  | virtual Type getType() const { return kProperty; } | 
|  | }; | 
|  |  | 
|  | #endif // SkScriptCallBack_DEFINED |