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
15class SkTypedArray;
16class SkDisplayable;
17class SkDrawable;
18class SkString;
19
20union 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
33struct SkScriptValue {
34    SkOperand fOperand;
35    SkDisplayTypes fType;
36    SkTypedArray* getArray() { SkASSERT(fType == SkType_Array); return fOperand.fArray; }
37    SkDisplayable* getDisplayable() { SkASSERT(fType == SkType_Displayable); return fOperand.fDisplayable; }
38    SkDrawable* getDrawable() { SkASSERT(fType == SkType_Drawable); return fOperand.fDrawable; }
39    int32_t getS32(SkAnimateMaker* maker) { SkASSERT(fType == SkType_Int || fType == SkType_Boolean ||
40        SkDisplayType::IsEnum(maker, fType)); return fOperand.fS32; }
41    SkMSec getMSec() { SkASSERT(fType == SkType_MSec); return fOperand.fMSec; }
42    SkScalar getScalar() { SkASSERT(fType == SkType_Float); return fOperand.fScalar; }
43    SkString* getString() { SkASSERT(fType == SkType_String); return fOperand.fString; }
44};
45
46#endif // SkOperand_DEFINED
47