/*
 * Copyright (C) 2016 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#ifndef ANDROID_HIDL_TASK_RUNNER_H
#define ANDROID_HIDL_TASK_RUNNER_H

#include "SynchronizedQueue.h"
#include <memory>
#include <thread>

namespace android {
namespace hardware {
namespace details {

/*
 * A background infinite loop that runs the Tasks push()'ed.
 * Equivalent to a simple single-threaded Looper.
 */
class TaskRunner {
public:
    using Task = std::function<void(void)>;

    /* Create an empty task runner. Nothing will be done until start() is called. */
    TaskRunner();

    /*
     * Notify the background thread to terminate and return immediately.
     * Tasks in the queue will continue to be done sequentially in background
     * until all tasks are finished.
     */
    ~TaskRunner();

    /*
     * Sets the queue limit. Fails the push operation once the limit is reached.
     * Then kicks off the loop.
     */
    void start(size_t limit);

    /*
     * Add a task. Return true if successful, false if
     * the queue's size exceeds limit or t doesn't contain a callable target.
     */
    bool push(const Task &t);

private:
    std::shared_ptr<SynchronizedQueue<Task>> mQueue;
};

} // namespace details
} // namespace hardware
} // namespace android

#endif // ANDROID_HIDL_TASK_RUNNER_H
