blob: f482e669b9e0326d2fcd9838399af24c2054f85f [file] [log] [blame]
reed@android.com8a1c16f2008-12-17 15:59:43 +00001#ifndef SkOperand2_DEFINED
2#define SkOperand2_DEFINED
3
4#include "SkScalar.h"
5
6class SkOpArray;
7class SkString;
8
9union SkOperand2 {
10 enum OpType {
11 kNoType,
12 kS32 = 1,
13 kScalar = 2,
14 kString = 4,
15 kArray = 8,
16 kObject = 16
17 };
18 SkOpArray* fArray;
19 void* fObject;
20 size_t fReference;
21 int32_t fS32;
22 SkScalar fScalar;
23 SkString* fString;
24};
25
26struct SkScriptValue2 {
27 enum IsConstant {
28 kConstant,
29 kVariable
30 };
31 enum IsWritten {
32 kUnwritten,
33 kWritten
34 };
35 SkOperand2 fOperand;
36 SkOperand2::OpType fType : 8;
37 IsConstant fIsConstant : 8;
38 IsWritten fIsWritten : 8;
39 SkOpArray* getArray() { SkASSERT(fType == SkOperand2::kArray); return fOperand.fArray; }
40 void* getObject() { SkASSERT(fType == SkOperand2::kObject); return fOperand.fObject; }
41 int32_t getS32() { SkASSERT(fType == SkOperand2::kS32); return fOperand.fS32; }
42 SkScalar getScalar() { SkASSERT(fType == SkOperand2::kScalar); return fOperand.fScalar; }
43 SkString* getString() { SkASSERT(fType == SkOperand2::kString); return fOperand.fString; }
44 bool isConstant() const { return fIsConstant == kConstant; }
45};
46
47#endif // SkOperand2_DEFINED