IMergingAlgorithm.h 879 字节
Newer Older
N
Nikolai Kochetov 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#pragma once

#include <Processors/Chunk.h>
#include <variant>

namespace DB
{

class IMergingAlgorithm
{
public:
    struct Status
    {
        Chunk chunk;
        bool is_finished = false;
        ssize_t required_source = -1;

        explicit Status(Chunk chunk_) : chunk(std::move(chunk_)) {}
        explicit Status(Chunk chunk_, bool is_finished_) : chunk(std::move(chunk_)), is_finished(is_finished_) {}
        explicit Status(size_t source) : required_source(source) {}
    };

    virtual void initialize(Chunks chunks) = 0;
N
Nikolai Kochetov 已提交
24
    virtual void consume(Chunk & chunk, size_t source_num) = 0;
N
Nikolai Kochetov 已提交
25 26
    virtual Status merge() = 0;

N
Nikolai Kochetov 已提交
27
    IMergingAlgorithm() = default;
N
Nikolai Kochetov 已提交
28 29 30
    virtual ~IMergingAlgorithm() = default;
};

N
Nikolai Kochetov 已提交
31 32
// TODO: use when compile with clang which could support it
// template <class T>
33
// concept MergingAlgorithm = std::is_base_of<IMergingAlgorithm, T>::value;
N
Nikolai Kochetov 已提交
34 35

}