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

#ifndef skgpu_graphite_UniquePaintParamsID_DEFINED
#define skgpu_graphite_UniquePaintParamsID_DEFINED

#include "include/core/SkTypes.h"

namespace skgpu::graphite {

// This class boils down to a unique uint that can be used instead of a variable length
// key derived from a PaintParams.
class UniquePaintParamsID {
public:
    explicit UniquePaintParamsID(uint32_t id) : fID(id) {
        SkASSERT(id != SK_InvalidUniqueID);
    }

    static UniquePaintParamsID InvalidID() { return UniquePaintParamsID(); }

    UniquePaintParamsID() : fID(SK_InvalidUniqueID) {}

    bool operator==(const UniquePaintParamsID &that) const { return fID == that.fID; }
    bool operator!=(const UniquePaintParamsID &that) const { return !(*this == that); }

    bool isValid() const { return fID != SK_InvalidUniqueID; }
    uint32_t asUInt() const { return fID; }

private:
    uint32_t fID;
};

} // skgpu::graphite

#endif // skgpu_graphite_UniquePaintParamsID_DEFINED
