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 SkADrawable;
18 class SkString;
19 
20 union SkOperand {
21 //  SkOperand() {}
22 //  SkOperand(SkScalar scalar) : fScalar(scalar) {}
23     SkTypedArray* fArray;
24     SkDisplayable* fDisplayable;
25     SkADrawable* 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     SkADrawable* 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