9 #ifndef __libutilxx__sella__util__TaskQueue_H__
10 #define __libutilxx__sella__util__TaskQueue_H__
12 #include "../../common.h"
22 static const timeval FallbackTimeval = { 0, 200000 };
28 typedef std::shared_ptr<TaskQueue> shared;
31 static const size_t DefaultMinimumCapacity = 16;
33 static const uint64_t FallbackMsecDelay = 200;
34 static const uint64_t FallbackUsecDelay = 200000;
37 TaskQueue(
const size_t capacity = DefaultMinimumCapacity);
38 TaskQueue(Log::shared log,
const size_t capacity = DefaultMinimumCapacity);
43 size_t size(
void)
const;
44 bool empty(
void)
const;
47 Task::shared top(
void)
const;
48 Task::shared next(
void)
const;
50 const timeval getDelay(timeval fallback = FallbackTimeval)
const;
51 uint64_t getDelayMsec(uint64_t fallback = FallbackMsecDelay, uint64_t maximum = 0)
const;
52 uint64_t getDelayUsec(uint64_t fallback = FallbackUsecDelay, uint64_t maximum = 0)
const;
54 void push(Task::shared &task);
55 void push(Task::shared &task,
const std::chrono::system_clock::duration &delay,
int priority = 0);
56 void push(Task::shared &task,
const std::chrono::system_clock::time_point &time,
int priority = 0);
57 void push(Task::shared &task, time_t sec, suseconds_t usec = 0,
int priority = 0);
58 void push(Task::shared &task, timeval &tv,
int priority = 0);
59 bool repush(Task::shared &task,
const std::chrono::system_clock::duration &delay,
int priority = 0,
bool strict =
false);
60 bool repush(Task::shared &task,
const std::chrono::system_clock::time_point &time,
int priority = 0,
bool strict =
false);
61 bool repush(Task::shared &task, time_t sec, suseconds_t usec = 0,
int priority = 0,
bool strict =
false);
62 bool repush(Task::shared &task, timeval &tv,
int priority = 0,
bool strict =
false);
64 bool erase(Task::shared &task,
bool firstonly =
true);
65 bool erase(
void *
object);
67 size_t capacity(
void)
const;
68 void reserve(
size_t capacity);
69 void print(
void)
const;
70 void setLog(Log::shared log);
72 bool isReady(
void)
const;
75 Log::shared libutilxx__log;
76 std::vector<Task::shared> heap;