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