1 2 /* 3 * Copyright 2006 The Android Open Source Project 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 10 #ifndef SkOperand_DEFINED 11 #define SkOperand_DEFINED 12 13 #include "SkDisplayType.h" 14 15 class SkTypedArray; 16 class SkDisplayable; 17 class SkDrawable; 18 class SkString; 19 20 union SkOperand { 21 // SkOperand() {} 22 // SkOperand(SkScalar scalar) : fScalar(scalar) {} 23 SkTypedArray* fArray; 24 SkDisplayable* fDisplayable; 25 SkDrawable* fDrawable; 26 void* fObject; 27 int32_t fS32; 28 SkMSec fMSec; 29 SkScalar fScalar; 30 SkString* fString; 31 }; 32 33 struct SkScriptValue { 34 SkOperand fOperand; 35 SkDisplayTypes fType; getArraySkScriptValue36 SkTypedArray* getArray() { SkASSERT(fType == SkType_Array); return fOperand.fArray; } getDisplayableSkScriptValue37 SkDisplayable* getDisplayable() { SkASSERT(fType == SkType_Displayable); return fOperand.fDisplayable; } getDrawableSkScriptValue38 SkDrawable* getDrawable() { SkASSERT(fType == SkType_Drawable); return fOperand.fDrawable; } getS32SkScriptValue39 int32_t getS32(SkAnimateMaker* maker) { SkASSERT(fType == SkType_Int || fType == SkType_Boolean || 40 SkDisplayType::IsEnum(maker, fType)); return fOperand.fS32; } getMSecSkScriptValue41 SkMSec getMSec() { SkASSERT(fType == SkType_MSec); return fOperand.fMSec; } getScalarSkScriptValue42 SkScalar getScalar() { SkASSERT(fType == SkType_Float); return fOperand.fScalar; } getStringSkScriptValue43 SkString* getString() { SkASSERT(fType == SkType_String); return fOperand.fString; } 44 }; 45 46 #endif // SkOperand_DEFINED 47