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 13class SkOpArray; 14class SkString; 15 16union 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 33struct 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 55