
#ifndef PLS_TASK_MANAGER_H_
#define PLS_TASK_MANAGER_H_

#include <memory>

#include "pls/internal/data_structures/aligned_stack.h"

namespace pls {
namespace internal {
namespace scheduling {

class task_manager {
 protected:
  explicit task_manager(data_structures::aligned_stack &task_stack) : task_stack_{task_stack} {}

 private:
  data_structures::aligned_stack &task_stack_;
};

template<size_t NUM_TASKS, size_t MAX_STACK_SIZE>
class static_task_manager : public task_manager {
 public:
  static_task_manager() : task_manager{static_task_stack_} {};

 private:
  data_structures::static_aligned_stack<MAX_STACK_SIZE> static_task_stack_;
};

}
}
}
#endif //PLS_TASK_MANAGER_H_
