
/*
 * 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 SkRefDict_DEFINED
#define SkRefDict_DEFINED

#include "SkRefCnt.h"

/**
 *  A dictionary of string,refcnt pairs. The dictionary is also an owner of the
 *  refcnt objects while they are contained.
 */
class SK_API SkRefDict : SkNoncopyable {
public:
    SkRefDict();
    ~SkRefDict();

    /**
     *  Return the data associated with name[], or NULL if no matching entry
     *  is found. The reference-count of the entry is not affected.
     */
    SkRefCnt* find(const char name[]) const;
    
    /**
     *  If data is NULL, remove (if present) the entry matching name and call
     *  prev_data->unref() on the data for the matching entry.
     *  If data is not-NULL, replace the existing entry matching name and
     *  call (prev_data->unref()), or add a new one. In either case,
     *  data->ref() is called.
     */
    void set(const char name[], SkRefCnt* data);

    /**
     *  Remove the matching entry (if found) and unref its data.
     */
    void remove(const char name[]) { this->set(name, NULL); }

    /**
     *  Remove all entries, and unref() their associated data.
     */
    void removeAll();

private:
    struct Impl;
    Impl* fImpl;
};

#endif
