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

#ifndef GrSurfaceContextPriv_DEFINED
#define GrSurfaceContextPriv_DEFINED

#include "GrSurfaceContext.h"

/** Class that adds methods to GrSurfaceContext that are only intended for use internal to
    Skia. This class is purely a privileged window into GrSurfaceContext. It should never have
    additional data members or virtual methods. */
class GrSurfaceContextPriv {
public:
    GrContext* getContext() { return fSurfaceContext->fContext; }

private:
    explicit GrSurfaceContextPriv(GrSurfaceContext* surfaceContext) 
        : fSurfaceContext(surfaceContext) {
    }

    GrSurfaceContextPriv(const GrSurfaceContextPriv&) {} // unimpl
    GrSurfaceContextPriv& operator=(const GrSurfaceContextPriv&); // unimpl

    // No taking addresses of this type.
    const GrSurfaceContextPriv* operator&() const;
    GrSurfaceContextPriv* operator&();

    GrSurfaceContext* fSurfaceContext;

    friend class GrSurfaceContext; // to construct/copy this type.
};

inline GrSurfaceContextPriv GrSurfaceContext::surfPriv() {
    return GrSurfaceContextPriv(this);
}

inline const GrSurfaceContextPriv GrSurfaceContext::surfPriv() const {
    return GrSurfaceContextPriv(const_cast<GrSurfaceContext*>(this));
}

#endif
