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