|  | 
 | /* | 
 |  * Copyright 2011 Google Inc. | 
 |  * | 
 |  * Use of this source code is governed by a BSD-style license that can be | 
 |  * found in the LICENSE file. | 
 |  */ | 
 | #ifndef SkOperand2_DEFINED | 
 | #define SkOperand2_DEFINED | 
 |  | 
 | #include "SkScalar.h" | 
 |  | 
 | class SkOpArray; | 
 | class SkString; | 
 |  | 
 | union SkOperand2 { | 
 | 	enum OpType { | 
 | 		kNoType, | 
 | 		kS32 = 1, | 
 | 		kScalar = 2, | 
 | 		kString = 4, | 
 | 		kArray = 8, | 
 | 		kObject = 16 | 
 | 	}; | 
 | 	SkOpArray* fArray; | 
 | 	void* fObject; | 
 | 	size_t fReference; | 
 | 	int32_t fS32; | 
 | 	SkScalar fScalar; | 
 | 	SkString* fString; | 
 | }; | 
 |  | 
 | struct SkScriptValue2 { | 
 | 	enum IsConstant { | 
 | 		kConstant, | 
 | 		kVariable | 
 | 	}; | 
 | 	enum IsWritten { | 
 | 		kUnwritten, | 
 | 		kWritten | 
 | 	}; | 
 | 	SkOperand2 fOperand; | 
 | 	SkOperand2::OpType fType : 8; | 
 | 	IsConstant fIsConstant : 8; | 
 | 	IsWritten fIsWritten : 8; | 
 | 	SkOpArray* getArray() { SkASSERT(fType == SkOperand2::kArray); return fOperand.fArray; } | 
 | 	void* getObject() { SkASSERT(fType == SkOperand2::kObject); return fOperand.fObject; } | 
 | 	int32_t getS32() { SkASSERT(fType == SkOperand2::kS32); return fOperand.fS32; } | 
 | 	SkScalar getScalar() { SkASSERT(fType == SkOperand2::kScalar); return fOperand.fScalar; } | 
 | 	SkString* getString() { SkASSERT(fType == SkOperand2::kString); return fOperand.fString; } | 
 |         bool isConstant() const { return fIsConstant == kConstant; } | 
 | }; | 
 |  | 
 | #endif // SkOperand2_DEFINED |