11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/*
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2011 Google Inc.
41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */
80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifndef SkScriptCallBack_DEFINED
90910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkScriptCallBack_DEFINED
100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkOperand2.h"
120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkTDArray_Experimental.h"
130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkScriptCallBack {
150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic:
160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project	enum Type {
170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project		kBox,
180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project		kFunction,
190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project		kMember,
200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project		kMemberFunction,
210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project		kProperty,
220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project		kUnbox
230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project	};
240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project	virtual bool getReference(const char* , size_t len, SkScriptValue2* result) {  return false; }
260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project	virtual SkOperand2::OpType getReturnType(size_t ref, SkOperand2*) {
270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project		return SkOperand2::kS32; }
280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project	virtual Type getType() const = 0;
290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project};
300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkScriptCallBackConvert : public SkScriptCallBack {
320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic:
330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project	virtual bool convert(SkOperand2::OpType type, SkOperand2* operand) = 0;
340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project};
350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkScriptCallBackFunction : public SkScriptCallBack {
370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic:
380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project	virtual void getParamTypes(SkIntArray(SkOperand2::OpType)* types) = 0;
390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project	virtual Type getType() const { return kFunction; }
400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project	virtual bool invoke(size_t ref, SkOpArray* params, SkOperand2* value) = 0;
410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project};
420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkScriptCallBackMember: public SkScriptCallBack {
440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic:
450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project	bool getMemberReference(const char* , size_t len, void* object, SkScriptValue2* ref);
460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project	virtual Type getType() const { return kMember; }
470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project	virtual bool invoke(size_t ref, void* object, SkOperand2* value) = 0;
480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project};
490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkScriptCallBackMemberFunction : public SkScriptCallBack {
510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic:
520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project	bool getMemberReference(const char* , size_t len, void* object, SkScriptValue2* ref);
530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project	virtual void getParamTypes(SkIntArray(SkOperand2::OpType)* types) = 0;
540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project	virtual Type getType() const { return kMemberFunction; }
550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project	virtual bool invoke(size_t ref, void* object, SkOpArray* params, SkOperand2* value) = 0;
560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project};
570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkScriptCallBackProperty : public SkScriptCallBack {
590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic:
600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project	virtual bool getConstValue(const char* name, size_t len, SkOperand2* value) { return false; }
610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project	virtual bool getResult(size_t ref, SkOperand2* answer) { return false; }
620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project	virtual Type getType() const { return kProperty; }
630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project};
640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif // SkScriptCallBack_DEFINED
66