1 
2 /*
3  * Copyright 2011 Google Inc.
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 #ifndef SkOperand2_DEFINED
9 #define SkOperand2_DEFINED
10 
11 #include "SkScalar.h"
12 
13 class SkOpArray;
14 class SkString;
15 
16 union SkOperand2 {
17     enum OpType {
18         kNoType,
19         kS32 = 1,
20         kScalar = 2,
21         kString = 4,
22         kArray = 8,
23         kObject = 16
24     };
25     SkOpArray* fArray;
26     void* fObject;
27     size_t fReference;
28     int32_t fS32;
29     SkScalar fScalar;
30     SkString* fString;
31 };
32 
33 struct SkScriptValue2 {
34     enum IsConstant {
35         kConstant,
36         kVariable
37     };
38     enum IsWritten {
39         kUnwritten,
40         kWritten
41     };
42     SkOperand2 fOperand;
43     SkOperand2::OpType fType : 8;
44     IsConstant fIsConstant : 8;
45     IsWritten fIsWritten : 8;
getArraySkScriptValue246     SkOpArray* getArray() { SkASSERT(fType == SkOperand2::kArray); return fOperand.fArray; }
getObjectSkScriptValue247     void* getObject() { SkASSERT(fType == SkOperand2::kObject); return fOperand.fObject; }
getS32SkScriptValue248     int32_t getS32() { SkASSERT(fType == SkOperand2::kS32); return fOperand.fS32; }
getScalarSkScriptValue249     SkScalar getScalar() { SkASSERT(fType == SkOperand2::kScalar); return fOperand.fScalar; }
getStringSkScriptValue250     SkString* getString() { SkASSERT(fType == SkOperand2::kString); return fOperand.fString; }
isConstantSkScriptValue251         bool isConstant() const { return fIsConstant == kConstant; }
52 };
53 
54 #endif // SkOperand2_DEFINED
55