Skip to content

Commit

Permalink
Add more algorithm tasks.
Browse files Browse the repository at this point in the history
  • Loading branch information
Barenboim committed Jun 5, 2023
1 parent 1b98dd0 commit b0ed994
Show file tree
Hide file tree
Showing 4 changed files with 371 additions and 11 deletions.
152 changes: 143 additions & 9 deletions src/factory/WFAlgoTaskFactory.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,78 @@ struct MergeOutput
T *last;
};

template<typename T>
struct ShuffleInput
{
T *first;
T *last;
};

template<typename T>
struct ShuffleOutput
{
T *first;
T *last;
};

template<typename T>
struct RemoveInput
{
T *first;
T *last;
T value;
};

template<typename T>
struct RemoveOutput
{
T *first;
T *last;
};

template<typename T>
struct UniqueInput
{
T *first;
T *last;
};

template<typename T>
struct UniqueOutput
{
T *first;
T *last;
};

template<typename T>
struct ReverseInput
{
T *first;
T *last;
};

template<typename T>
struct ReverseOutput
{
T *first;
T *last;
};

template<typename T>
struct RotateInput
{
T *first;
T *middle;
T *last;
};

template<typename T>
struct RotateOutput
{
T *first;
T *last;
};

template<typename KEY = std::string, typename VAL = std::string>
using ReduceInput = std::vector<std::pair<KEY, VAL>>;

Expand All @@ -79,6 +151,36 @@ using WFMergeTask = WFThreadTask<algorithm::MergeInput<T>,
template<typename T>
using merge_callback_t = std::function<void (WFMergeTask<T> *)>;

template<typename T>
using WFShuffleTask = WFThreadTask<algorithm::ShuffleInput<T>,
algorithm::ShuffleOutput<T>>;
template<typename T>
using shuffle_callback_t = std::function<void (WFShuffleTask<T> *)>;

template<typename T>
using WFRemoveTask = WFThreadTask<algorithm::RemoveInput<T>,
algorithm::RemoveOutput<T>>;
template<typename T>
using remove_callback_t = std::function<void (WFRemoveTask<T> *)>;

template<typename T>
using WFUniqueTask = WFThreadTask<algorithm::UniqueInput<T>,
algorithm::UniqueOutput<T>>;
template<typename T>
using unique_callback_t = std::function<void (WFUniqueTask<T> *)>;

template<typename T>
using WFReverseTask = WFThreadTask<algorithm::ReverseInput<T>,
algorithm::ReverseOutput<T>>;
template<typename T>
using reverse_callback_t = std::function<void (WFReverseTask<T> *)>;

template<typename T>
using WFRotateTask = WFThreadTask<algorithm::RotateInput<T>,
algorithm::RotateOutput<T>>;
template<typename T>
using rotate_callback_t = std::function<void (WFRotateTask<T> *)>;

template<typename KEY = std::string, typename VAL = std::string>
using WFReduceTask = WFThreadTask<algorithm::ReduceInput<KEY, VAL>,
algorithm::ReduceOutput<KEY, VAL>>;
Expand All @@ -99,6 +201,17 @@ class WFAlgoTaskFactory
CMP compare,
CB callback);

template<typename T, class CB = sort_callback_t<T>>
static WFSortTask<T> *create_psort_task(const std::string& queue_name,
T *first, T *last,
CB callback);

template<typename T, class CMP, class CB = sort_callback_t<T>>
static WFSortTask<T> *create_psort_task(const std::string& queue_name,
T *first, T *last,
CMP compare,
CB callback);

template<typename T, class CB = merge_callback_t<T>>
static WFMergeTask<T> *create_merge_task(const std::string& queue_name,
T *first1, T *last1,
Expand All @@ -114,16 +227,37 @@ class WFAlgoTaskFactory
CMP compare,
CB callback);

template<typename T, class CB = sort_callback_t<T>>
static WFSortTask<T> *create_psort_task(const std::string& queue_name,
T *first, T *last,
CB callback);
template<typename T, class CB = shuffle_callback_t<T>>
static WFShuffleTask<T> *create_shuffle_task(const std::string& queue_name,
T *first, T *last,
CB callback);

template<typename T, class CMP, class CB = sort_callback_t<T>>
static WFSortTask<T> *create_psort_task(const std::string& queue_name,
T *first, T *last,
CMP compare,
CB callback);
template<typename T, class URBG, class CB = shuffle_callback_t<T>>
static WFShuffleTask<T> *create_shuffle_task(const std::string& queue_name,
T *first, T *last,
URBG generator,
CB callback);

template<typename T, class CB = remove_callback_t<T>>
static WFRemoveTask<T> *create_remove_task(const std::string& queue_name,
T *first, T *last,
T value,
CB callback);

template<typename T, class CB = unique_callback_t<T>>
static WFUniqueTask<T> *create_unique_task(const std::string& queue_name,
T *first, T *last,
CB callback);

template<typename T, class CB = reverse_callback_t<T>>
static WFReverseTask<T> *create_reverse_task(const std::string& queue_name,
T *first, T *last,
CB callback);

template<typename T, class CB = rotate_callback_t<T>>
static WFRotateTask<T> *create_rotate_task(const std::string& queue_name,
T *first, T *middle, T *last,
CB callback);

template<typename KEY = std::string, typename VAL = std::string,
class RED = algorithm::reduce_function_t<KEY, VAL>,
Expand Down
Loading

0 comments on commit b0ed994

Please sign in to comment.