|
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; |
|
46 SkOpArray* getArray() { SkASSERT(fType == SkOperand2::kArray); return fOperand.fArray; } |
|
47 void* getObject() { SkASSERT(fType == SkOperand2::kObject); return fOperand.fObject; } |
|
48 int32_t getS32() { SkASSERT(fType == SkOperand2::kS32); return fOperand.fS32; } |
|
49 SkScalar getScalar() { SkASSERT(fType == SkOperand2::kScalar); return fOperand.fScalar; } |
|
50 SkString* getString() { SkASSERT(fType == SkOperand2::kString); return fOperand.fString; } |
|
51 bool isConstant() const { return fIsConstant == kConstant; } |
|
52 }; |
|
53 |
|
54 #endif // SkOperand2_DEFINED |