/* * 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