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

#ifndef SkThreadUtils_DEFINED
#define SkThreadUtils_DEFINED

#include "SkTypes.h"

class SkThread : SkNoncopyable {
public:
    typedef void (*entryPointProc)(void*);

    SkThread(entryPointProc entryPoint, void* data = NULL);

    /**
     * Non-virtual, do not subclass.
     */
    ~SkThread();

    /**
     * Starts the thread. Returns false if the thread could not be started.
     */
    bool start();

    /**
     * Waits for the thread to finish.
     * If the thread has not started, returns immediately.
     */
    void join();

    /**
     * SkThreads with an affinity for the same processor will attempt to run cache
     * locally with each other. SkThreads with an affinity for different processors
     * will attempt to run on different cores. Returns false if the request failed.
     */
    bool setProcessorAffinity(unsigned int processor);

private:
    void* fData;
};

#endif
