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