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