/*
 * Copyright 2010 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef GrTemplates_DEFINED
#define GrTemplates_DEFINED

#include "SkTypes.h"

/**
 *  Use to cast a ptr to a different type, and maintain strict-aliasing
 */
template <typename Dst, typename Src> Dst GrTCast(Src src) {
    union {
        Src src;
        Dst dst;
    } data;
    data.src = src;
    return data.dst;
}

/**
 * takes a T*, saves the value it points to,  in and restores the value in the
 * destructor
 * e.g.:
 * {
 *      GrAutoTRestore<int*> autoCountRestore;
 *      if (useExtra) {
 *          autoCountRestore.reset(&fCount);
 *          fCount += fExtraCount;
 *      }
 *      ...
 * }  // fCount is restored
 */
template <typename T> class GrAutoTRestore : public SkNoncopyable {
public:
    GrAutoTRestore() : fPtr(NULL), fVal() {}

    GrAutoTRestore(T* ptr) {
        fPtr = ptr;
        if (NULL != ptr) {
            fVal = *ptr;
        }
    }

    ~GrAutoTRestore() {
        if (NULL != fPtr) {
            *fPtr = fVal;
        }
    }

    // restores previously saved value (if any) and saves value for passed T*
    void reset(T* ptr) {
        if (NULL != fPtr) {
            *fPtr = fVal;
        }
        fPtr = ptr;
        fVal = *ptr;
    }
private:
    T* fPtr;
    T  fVal;
};

#endif
